import { Table, TableForeignKey, TableIndex, TableUnique } from "typeorm"; import { getDefaultByORM, getTypeByORM, isIncrementPrimary, isUUIDPrimary } from "../ormHelper"; import { LoginRoutineEnum } from "../../enums/loginRoutineEnum"; export const invite_table = new Table({ name: "invite", columns: [ { name: "mail", ...getTypeByORM("varchar"), isPrimary: true }, { name: "token", ...getTypeByORM("varchar") }, { name: "username", ...getTypeByORM("varchar") }, { name: "firstname", ...getTypeByORM("varchar") }, { name: "lastname", ...getTypeByORM("varchar") }, { name: "secret", ...getTypeByORM("varchar") }, ], }); export const role_table = new Table({ name: "role", columns: [ { name: "id", ...getTypeByORM("int"), ...isIncrementPrimary }, { name: "role", ...getTypeByORM("varchar") }, ], uniques: [ new TableUnique({ columnNames: ["role"], }), ], }); export const role_permission_table = new Table({ name: "role_permission", columns: [ { name: "roleId", ...getTypeByORM("int"), isPrimary: true }, { name: "permission", ...getTypeByORM("varchar"), isPrimary: true }, ], foreignKeys: [ new TableForeignKey({ columnNames: ["roleId"], referencedColumnNames: ["id"], referencedTableName: "role", onDelete: "CASCADE", onUpdate: "RESTRICT", }), ], }); export const user_table = new Table({ name: "user", columns: [ { name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary }, { name: "mail", ...getTypeByORM("varchar"), isUnique: true }, { name: "username", ...getTypeByORM("varchar"), isUnique: true }, { name: "firstname", ...getTypeByORM("varchar") }, { name: "lastname", ...getTypeByORM("varchar") }, { name: "secret", ...getTypeByORM("text") }, { name: "routine", ...getTypeByORM("varchar"), default: getDefaultByORM("string", LoginRoutineEnum.totp) }, { name: "isOwner", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) }, ], }); export const user_roles_table = new Table({ name: "user_roles", columns: [ { name: "userId", ...getTypeByORM("uuid"), isPrimary: true }, { name: "roleId", ...getTypeByORM("int"), isPrimary: true }, ], foreignKeys: [ new TableForeignKey({ columnNames: ["userId"], referencedColumnNames: ["id"], referencedTableName: "user", onDelete: "CASCADE", onUpdate: "RESTRICT", }), new TableForeignKey({ columnNames: ["roleId"], referencedColumnNames: ["id"], referencedTableName: "role", onDelete: "CASCADE", onUpdate: "RESTRICT", }), ], indices: [ new TableIndex({ columnNames: ["userId"], }), new TableIndex({ columnNames: ["roleId"], }), ], }); export const user_permission_table = new Table({ name: "user_permission", columns: [ { name: "userId", ...getTypeByORM("uuid"), isPrimary: true }, { name: "permission", ...getTypeByORM("varchar"), isPrimary: true }, ], foreignKeys: [ new TableForeignKey({ columnNames: ["userId"], referencedColumnNames: ["id"], referencedTableName: "user", onDelete: "CASCADE", onUpdate: "RESTRICT", }), ], }); export const refresh_table = new Table({ name: "refresh", columns: [ { name: "token", ...getTypeByORM("varchar"), isPrimary: true }, { name: "expiry", ...getTypeByORM("datetime", false, 6) }, { name: "userId", ...getTypeByORM("uuid"), isPrimary: true }, ], foreignKeys: [ new TableForeignKey({ columnNames: ["userId"], referencedColumnNames: ["id"], referencedTableName: "user", onDelete: "CASCADE", onUpdate: "RESTRICT", }), ], }); export const webapi_table = new Table({ name: "webapi", columns: [ { name: "id", ...getTypeByORM("int"), ...isIncrementPrimary }, { name: "token", ...getTypeByORM("text") }, { name: "title", ...getTypeByORM("varchar") }, { name: "createdAt", ...getTypeByORM("datetime", false, 6), default: getDefaultByORM("currentTimestamp", 6) }, { name: "lastUsage", ...getTypeByORM("datetime", true, 6) }, { name: "expiry", ...getTypeByORM("date", true) }, ], uniques: [ new TableUnique({ columnNames: ["token"], }), new TableUnique({ columnNames: ["title"], }), ], }); export const webapi_permission_table = new Table({ name: "webapi_permission", columns: [ { name: "webapiId", ...getTypeByORM("int"), isPrimary: true }, { name: "permission", ...getTypeByORM("varchar"), isPrimary: true }, ], foreignKeys: [ new TableForeignKey({ columnNames: ["webapiId"], referencedColumnNames: ["id"], referencedTableName: "webapi", onDelete: "CASCADE", onUpdate: "RESTRICT", }), ], }); export const reset_table = new Table({ name: "reset", columns: [ { name: "mail", ...getTypeByORM("varchar"), isPrimary: true }, { name: "token", ...getTypeByORM("varchar") }, { name: "username", ...getTypeByORM("varchar") }, { name: "secret", ...getTypeByORM("varchar") }, ], }); export const setting_table = new Table({ name: "setting", columns: [ { name: "topic", ...getTypeByORM("varchar"), isPrimary: true }, { name: "key", ...getTypeByORM("varchar"), isPrimary: true }, { name: "value", ...getTypeByORM("text") }, ], });