diff --git a/web/package.json b/web/package.json index ad99518..3252b18 100644 --- a/web/package.json +++ b/web/package.json @@ -34,8 +34,10 @@ "dependencies": { "@types/materialdb": "file:../materialdb", "materialdb": "file:../materialdb", + "monaco-editor": "^0.27.0", "reflect-metadata": "^0.1.13", "sequelize": "^6.6.5", - "sequelize-typescript": "^2.1.0" + "sequelize-typescript": "^2.1.0", + "ts-pattern": "^3.2.5" } } diff --git a/web/src/hooks/index.ts b/web/src/hooks/index.ts index 0486573..349fb2e 100644 --- a/web/src/hooks/index.ts +++ b/web/src/hooks/index.ts @@ -4,5 +4,6 @@ import { dbPromise } from "$lib/db"; export async function handle({ request, resolve }) { request.locals.db = await dbPromise; request.locals.loginStatus = checkLogin(request); + console.log("DB", request.locals.db); return resolve(request); } diff --git a/web/src/lib/MasteryDemo.svelte b/web/src/lib/MasteryDemo.svelte index a68b2ae..e03f9ff 100644 --- a/web/src/lib/MasteryDemo.svelte +++ b/web/src/lib/MasteryDemo.svelte @@ -1,16 +1,16 @@ {#if state == "loading"} diff --git a/web/src/lib/auth.ts b/web/src/lib/auth.ts index 5e34853..9a31ce2 100644 --- a/web/src/lib/auth.ts +++ b/web/src/lib/auth.ts @@ -1,7 +1,16 @@ import { User } from "$lib/db"; +import { match, select } from "ts-pattern"; + +type _LoginStatus = + | { type: "loggedIn"; } + | { type: "notLoggedIn"; } export class LoginStatus { - constructor(public isLoggedIn: boolean, public username?: string) {} + constructor( + public isLoggedIn: boolean, + public user_id?: number, + public username?: string, + ) {} } export function checkLogin(req: Request): LoginStatus { diff --git a/web/src/lib/components/Editor.svelte b/web/src/lib/components/Editor.svelte new file mode 100644 index 0000000..6397069 --- /dev/null +++ b/web/src/lib/components/Editor.svelte @@ -0,0 +1,23 @@ + + +
+ + diff --git a/web/src/lib/db/exercise.ts b/web/src/lib/db/exercise.ts new file mode 100644 index 0000000..7a22dc3 --- /dev/null +++ b/web/src/lib/db/exercise.ts @@ -0,0 +1,14 @@ +import { DataType, Unique, Column, Table, Model } from "sequelize-typescript"; + +/// An instance of an exercise, created to be solved by a specific user. +@Table +export class ExerciseInstance extends Model { + @Column(DataType.STRING) + public user_id: string; + + @Column(DataType.STRING) + public exercise_name: string; + + @Column(DataType.JSON) + public instance_props: any; +} diff --git a/web/src/lib/db/index.ts b/web/src/lib/db/index.ts index 2c5d4db..004878c 100644 --- a/web/src/lib/db/index.ts +++ b/web/src/lib/db/index.ts @@ -1,5 +1,6 @@ import { Sequelize } from "sequelize-typescript"; import { User } from "./user"; +import { ExerciseInstance } from "./exercise"; import { Page, Exercise, Grader } from "materialdb/db"; @@ -15,7 +16,7 @@ async function loadMaterialDb() { async function init(): Promise{JSON.stringify(exercise, null, 2)}+
{exercise.style}
type of questions yet!
{/if}
diff --git a/web/src/lib/exercise/GradedProgram/Component.svelte b/web/src/lib/exercise/GradedProgram/Component.svelte
new file mode 100644
index 0000000..d495dba
--- /dev/null
+++ b/web/src/lib/exercise/GradedProgram/Component.svelte
@@ -0,0 +1,9 @@
+
+
+{props}
+
+