Compare commits

...

2 Commits

Author SHA1 Message Date
853f5eba26 fixed some minor stuff, might need some additional work. 2022-10-13 12:47:44 +02:00
6962885582 kk 2022-10-07 17:22:05 +02:00
7 changed files with 169 additions and 1199 deletions

View File

@ -1,9 +1,11 @@
-lib tink_http -lib tink_http
-lib tink_web -lib tink_web
-lib tink_core
#-lib tink_hxx #-lib tink_hxx
-lib tink_json -lib tink_json
-lib tink_sql -lib tink_sql
-lib hxnodejs -lib hxnodejs
# -D await_catch_none
-cp src -cp src
--main Server --main Server
-js build/out.js -js build/out.js

1187
api/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"mysql": "^2.18.1", "mysql": "^2.18.1",
"sqlite": "^4.1.2",
"sqlite3": "^5.0.11" "sqlite3": "^5.0.11"
} }
} }

View File

@ -10,6 +10,7 @@ import model.MUser;
import controller.IDGen; import controller.IDGen;
import controller.User; import controller.User;
import db.Db.Database as Db;
@ -23,6 +24,7 @@ class Server {
.recover(OutgoingResponse.reportError); .recover(OutgoingResponse.reportError);
}); });
} }
public static var db:
} }
class Root { class Root {
@ -63,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')

View File

@ -3,13 +3,19 @@ package controller;
import haxe.Json; import haxe.Json;
import Utils; import Utils;
import db.Db; import db.Db;
import tink.sql.Fields;
import model.MUser; import model.MUser;
import tink.core.*;
using Lambda;
using tink.CoreApi;
class User{ class User{
public function new() {}
public static var driver = new tink.sql.drivers.Sqlite(); @await private static var database:Db = new Db_DrivebyCool('db.sqlite', driver);
@await public static var db = new Db('db.sqlite', driver); public function new() {}
@:get('/') @:get('/')
@ -19,25 +25,88 @@ class User{
return json; return json;
} }
// @await public function createUserTable():Promise<Bool>
// {
// // @await var status:Promise<Bool> =;
// @await var op = db.MUser.create();
// op.handle(function(outcome){
// switch outcome {
// case Success(data):
// trace(data);
// return data;
// case Failure(e):
// trace("failure: "+e);
// return e.data;
// }
// });
// return true;
// }
@await public function createUserTable():Promise<Bool>
{
// @await var status:Promise<Bool> =;
@await var op = db.MUser.create();
op.handle(function(outcome){
switch outcome {
case Success(data):
trace(data);
//return data;
case Failure(e):
trace("failure: "+e);
//return e.data;
}
});
return true;
}
@:get('/registerDummyUser') @:get('/registerDummyUser')
@:produces('text/plain') @:produces('application/json')
public function registerdummyuser(){ public function registerdummyuser(){
//@await var db = new Db('daba2', driver); //@await var db = new Db('daba2', driver);
db.MUser.create().next(function(){ // var failed:tink.core.Next<tink.sql.Id<model.MUser>> = null
db.MUser.insertOne({ return createUserTable().next(function(_){
return db.MUser.insertOne({
id: cast null, id: cast null,
name: 'Alice', name: 'Alice',
email: 'alice@example.com', email: 'alice@example.com',
password: 'jew' password: 'jew'
}).next(function(){ });
db.MUser.select({name: MUser.name, email: MUser.email}).where(MUser.email == 'alice@example.com').first().next(function(row) { }).next(function(_){
trace(row.name); return db.MUser.select({id: MUser.id, name: MUser.name, email: MUser.email, password: MUser.password}).where(MUser.id == _).first().next(function(row) {
// return "$row"; return row;
});
}); });
}); });
return "success"; // @await var createTable = db.MUser.create().handle(function(outcome) {
// @await var insert = db.MUser.insertOne({
// id: cast null,
// name: 'Alice',
// email: 'alice@example.com',
// password: 'jew'
// }).next(function(_){
// trace(_);
// trace("wat");
// return { name: "klaas" };
// });
// trace(@await result);
// switch outcome {
// case Success(data):
// trace(data);
// return data;
// case Failure(e):
// trace("failure: "+e);
// return e.data;
// }
// return outcome;
// });
// trace(@await result);
// trace("kak");
// trace(result.status);
//return result;
// return {name: "Kees"};
//@await return result.next.;
//@await return result;
// @await var three = ; // @await var three = ;
// trace(@await one); // trace(@await one);
// trace(@await two); // trace(@await two);

View File

@ -4,14 +4,26 @@ package db;
//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 db.Models.User; @:tables(MUser)
@:tables(MProject)
// Post related Tables
@:tables(MPost)
typedef Db = tink.sql.Database<Def>; @:tables(MTag)
@:tables(MUser) @:tables(MPostTag)
interface Def 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 UserAlias:User; @:table('user') var UserTbl:MUser;
// @:table('project') var ProjectTbl:DrivebyCool.MProject;
}
class Database extends tink.sql.Database<Def> {
public function new(__name:String,driver:tink.sql.Driver){
super(__name, driver);
}
public static function createTables():Void
{
}
} }

View File

@ -1,17 +1,60 @@
package model.sites.drivebycool; package model.services;
import tink.sql.Types; import tink.sql.Types;
import model.MSubscription; import model.MSubscription;
/*
* Project related models
*/
// 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
public var name:VarChar<50>; public var name:VarChar<50>;
public var owner:Id<MUser>; public var owner:Id<MUser>;
public var description:VarChar<1024>; public var description:VarChar<1024>;
} }
// Defines a relationship between a Project and a User. The User will be added as a member of the project and can author blogposts
typedef MMembership = { typedef MMembership = {
@:autoIncrement @:primary public var id(default, null):Id<MMembership>; @:autoIncrement @:primary public var id(default, null):Id<MMembership>;
// relationships
public var project:Id<MProject>; public var project:Id<MProject>;
public var user:Id<MUser>; public var user:Id<MUser>;
}
/*
* Defines a Post
*/
typedef MPost = {
@:autoIncrement @:primary public var id(default, null):Id<MPost>;
// Relationships
public var project:Id<MProject>;
public var owner:Id<MUser>;
// Properties
public var title:VarChar<1024>;
public var description:Text;
public var content:Text;
}
//
// Defines a tag that can be added to any post.
//
typedef MTag = {
@:autoIncrement @:primary public var id(default, null):Id<MTag>;
public var title:VarChar<32>;
}
//
// Defines a relationship between a tag and a post.
//
typedef MTaggedPost = {
@:autoIncrement @:primary public var id(default, null):Id<MTaggedPost>;
public var post:Id<MPost>;
public var tag:Id<MTag>;
} }