Compare commits

..

No commits in common. "843f77901074f3d7f89d3241b06c6c5dae96141d" and "853f5eba2663c5b8afdebf03d3a0898c37d9f426" have entirely different histories.

6 changed files with 62 additions and 144 deletions

2
.gitignore vendored
View File

@ -2,5 +2,3 @@ api2/
**/build/ **/build/
out.js out.js
api/node_modules/ api/node_modules/
**/*.sqlite
**/.vscode/

View File

@ -4,35 +4,27 @@ import tink.http.Response;
import tink.web.routing.*; import tink.web.routing.*;
import tink.sql.drivers.Sqlite; import tink.sql.drivers.Sqlite;
import db.Db; import db.Db;
import haxe.Json;
import model.MUser; import model.MUser;
import controller.IDGen; import controller.IDGen;
import controller.User; import controller.User;
typedef T_project = { import db.Db.Database as Db;
name : String,
description : String,
url : String
}
typedef T_projects = {
version : Int,
projects : Array<T_project>
}
class Server { class Server {
@await public static var db:Db;
static function main() { static function main() {
var container = new NodeContainer(8080); var container = new NodeContainer(8080);
//var container = PhpContainer.inst; //use PhpContainer instead of NodeContainer when targeting PHP //var container = PhpContainer.inst; //use PhpContainer instead of NodeContainer when targeting PHP
var router = new Router<Root>(new Root()); var router = new Router<Root>(new Root());
Db.createTables();
container.run(function(req) { container.run(function(req) {
return router.route(Context.ofRequest(req)) return router.route(Context.ofRequest(req))
.recover(OutgoingResponse.reportError); .recover(OutgoingResponse.reportError);
}); });
} }
public static var db:
} }
class Root { class Root {
@ -73,10 +65,10 @@ class Root {
public function user() public function user()
return new User(); return new User();
@:sub('/projects') // @:sub('/projects')
@:produces('application/json') // @:produces('application/json')
public function projects() // public function projects()
return new Projects(); // return new Projects();
@:get('/hello') @:get('/hello')
@:produces('application/json') @:produces('application/json')
@ -92,29 +84,3 @@ class Root {
return new IDGen(); return new IDGen();
} }
class Projects {
public function new() {}
public var path:String = "./res/json/projects.json";
@:get('/')
@:produces('application/json')
public function projects(){
var json:String = Utils.getJson(path);
return json;
}
@:get('/project/by_name/$name')
@:produces('application/json')
public function project(name:String){
var json:String = Utils.getJson(path);
var _projects:T_projects = Json.parse(json);
json = "{}";
for(_project in _projects.projects){
if(_project.name == name){
json = tink.Json.stringify(_project);
}
}
return json;
}
}

View File

@ -12,10 +12,12 @@ using tink.CoreApi;
class User{ class User{
private static var driver = new tink.sql.drivers.Sqlite();
@await private static var db:Db = new Db('db.sqlite', driver); @await private static var database:Db = new Db_DrivebyCool('db.sqlite', driver);
public function new() {} public function new() {}
@:get('/') @:get('/')
@:produces('text/plain') @:produces('text/plain')
public function id(){ public function id(){
@ -61,7 +63,7 @@ class User{
@:get('/registerDummyUser') @:get('/registerDummyUser')
@:produces('application/json') @:produces('application/json')
public function registerdummyuser(){ public function registerdummyuser(){
//@await var db = new Db('db.sqlite', driver); //@await var db = new Db('daba2', driver);
// var failed:tink.core.Next<tink.sql.Id<model.MUser>> = null // var failed:tink.core.Next<tink.sql.Id<model.MUser>> = null
return createUserTable().next(function(_){ return createUserTable().next(function(_){
return db.MUser.insertOne({ return db.MUser.insertOne({
@ -117,6 +119,8 @@ class User{
@:get('/fetchalice') @:get('/fetchalice')
@:produces('application/json') @:produces('application/json')
public function fetchalice(){ public function fetchalice(){
var driver = new tink.sql.drivers.Sqlite();
return db.MUser.select({name: MUser.name, email: MUser.email}).where(MUser.email == 'alice@example.com').first().next(function(row) { return db.MUser.select({name: MUser.name, email: MUser.email}).where(MUser.email == 'alice@example.com').first().next(function(row) {
return row; return row;
}); });

View File

@ -1,84 +1,29 @@
package db; package db;
import tink.sql.drivers.Sqlite; // import tink.sql.drivers.Sqlite;
import tink.sql.Database; //import tink.sql.Database;
import tink.sql.Types; import tink.sql.Types;
import model.MUser; import model.MUser;
import model.services.DrivebyCool; import model.services.DrivebyCool;
import tink.CoreApi;
@:tables(MUser)
@:tables(MProject)
@:tables(MUser)
@:tables(MProject)
// Post related Tables // Post related Tables
@:tables(MPost) @:tables(MPost)
@:tables(MTag) @:tables(MTag)
@:tables(MTaggedPost) @:tables(MPostTag)
interface DbDef_DrivebyCool extends tink.sql.DatabaseDefinition { interface DbDef_DrivebyCool extends tink.sql.DatabaseDefinition {
//@:procedure var func:Int->{x:Int, point:tink.s2d.Point}; //@:procedure var func:Int->{x:Int, point:tink.s2d.Point};
@:table('user') var UserTbl:MUser; @:table('user') var UserTbl:MUser;
// @:table('project') var ProjectTbl:DrivebyCool.MProject; // @:table('project') var ProjectTbl:DrivebyCool.MProject;
} }
class Database extends tink.sql.Database<Def> {
class Db extends tink.sql.Database<DbDef_DrivebyCool> {
public function new(__name:String,driver:tink.sql.Driver){ public function new(__name:String,driver:tink.sql.Driver){
super(__name, driver); super(__name, driver);
} }
private static var driver = new tink.sql.drivers.Sqlite();
@async private static var db:Db = new Db('db.sqlite', driver);
@async public static function getDb()
{
return @await db;
}
public static function createTables():Void public static function createTables():Void
{ {
var db = Db.getDb();
@async var execute = function(){
return db.MUser.create(true).next(function(_){
trace("aids");
return db.MProject.create(true);
}).next(function(_){
trace("aids");
return db.MPost.create(true);
}).next(function(_){
trace("aids");
return db.MTag.create(true);
}).next(function(_){
trace("aids");
return db.MTaggedPost.create(true);
});
}
@await execute().next(function(_){
trace(_);
return _;
}).handle(function(_){
trace(_);
});
// trace(two());
// @async var yeet = db.next(function(_db){
// return db.MUser.create();
// });
// yeet.next(function(_){
// trace("kanker");
// var test = @await db;
// return test.MProject.create(true);
// });
// .next(function(_){
// trace("kanker");
// return db.MPost.create(true);
// }).next(function(_){
// return db.MTag.create(true);
// }).next(function(_){
// return db.MTaggedPost.create(true);
// }).next(function(_){
// trace(_);
// });
// @await db.MProject.create(true);
// @await db.MPost.create(true);
// @await db.MTag.create(true);
// @await db.MTaggedPost.create(true);
} }
} }

View File

@ -6,6 +6,6 @@ import model.MService;
typedef MUser = { typedef MUser = {
@:autoIncrement @:primary public var id(default, null):Id<MUser>; @:autoIncrement @:primary public var id(default, null):Id<MUser>;
public var name:VarChar<50>; public var name:VarChar<50>;
public var email:VarChar<256>; public var email:VarChar<50>;
public var password:VarChar<256>; public var password:VarChar<50>;
} }

View File

@ -10,7 +10,7 @@ import model.MSubscription;
*/ */
//Defines a Project to be listed on the projects page // Defines a Project to be listed on the projects page
typedef MProject = { typedef MProject = {
@:autoIncrement @:primary public var id(default, null):Id<MProject>; @:autoIncrement @:primary public var id(default, null):Id<MProject>;
// Properties // Properties
@ -28,8 +28,9 @@ typedef MMembership = {
} }
/*
// Defines a Post * Defines a Post
*/
typedef MPost = { typedef MPost = {
@:autoIncrement @:primary public var id(default, null):Id<MPost>; @:autoIncrement @:primary public var id(default, null):Id<MPost>;
// Relationships // Relationships
@ -41,13 +42,17 @@ typedef MPost = {
public var content:Text; public var content:Text;
} }
//
// Defines a tag that can be added to any post. // Defines a tag that can be added to any post.
//
typedef MTag = { typedef MTag = {
@:autoIncrement @:primary public var id(default, null):Id<MTag>; @:autoIncrement @:primary public var id(default, null):Id<MTag>;
public var title:VarChar<32>; public var title:VarChar<32>;
} }
//
// Defines a relationship between a tag and a post. // Defines a relationship between a tag and a post.
//
typedef MTaggedPost = { typedef MTaggedPost = {
@:autoIncrement @:primary public var id(default, null):Id<MTaggedPost>; @:autoIncrement @:primary public var id(default, null):Id<MTaggedPost>;
public var post:Id<MPost>; public var post:Id<MPost>;