eduproj/materialdb/db/page.ts

74 lines
1.4 KiB
TypeScript
Raw Normal View History

2021-08-29 06:24:18 +00:00
import { PrimaryKey, ForeignKey, HasMany, Sequelize, Column, Table, Model, DataType } from "sequelize-typescript";
2021-08-28 20:08:35 +00:00
@Table
export class Page extends Model {
@PrimaryKey
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public slug: string;
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public title: string;
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-29 06:24:18 +00:00
public type: string;
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public content: string;
}
@Table
export class Exercise extends Model {
@PrimaryKey
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public name: string;
2021-08-29 06:24:18 +00:00
2021-08-29 07:59:56 +00:00
@Column(DataType.STRING)
public description: string;
@Column(DataType.STRING)
public style: string;
@Column(DataType.JSON)
public props: any;
2021-08-29 06:24:18 +00:00
@HasMany(() => Grader)
public graders: Grader[];
2021-08-28 20:08:35 +00:00
}
2021-08-29 07:39:52 +00:00
@Table
export class ExerciseSatisfiesConcept extends Model {
@ForeignKey(() => Exercise)
@Column(DataType.STRING)
public exercise_name: string;
@ForeignKey(() => Page)
@Column(DataType.STRING)
public concept_slug: string;
}
2021-08-28 20:08:35 +00:00
@Table
export class Grader extends Model {
@PrimaryKey
2021-08-29 06:24:18 +00:00
@ForeignKey(() => Exercise)
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public exercise_name: string;
@PrimaryKey
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public language: string;
2021-08-29 07:39:52 +00:00
@Column(DataType.STRING)
2021-08-28 20:08:35 +00:00
public style: string;
@Column(DataType.JSON)
public props: any;
}
export async function init(path: string): Promise<Sequelize> {
let sequelize = new Sequelize(`sqlite:${path}`, {
models: [Page, Exercise, Grader],
});
await sequelize.sync({ force: true });
return sequelize;
}