From 283bc7e29626bf8f0d5b79c54129709cbc2b206f Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sun, 15 Jun 2025 22:44:45 +0800 Subject: [PATCH] feat: add User data manager & User Database --- server/data/DataBaseManager.ts | 34 ++++++++++++++++++++++++++++++++++ server/data/User.ts | 19 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 server/data/DataBaseManager.ts create mode 100644 server/data/User.ts diff --git a/server/data/DataBaseManager.ts b/server/data/DataBaseManager.ts new file mode 100644 index 0000000..abef840 --- /dev/null +++ b/server/data/DataBaseManager.ts @@ -0,0 +1,34 @@ +// @ts-types="npm:sequelize" +import { Sequelize, Op, Model, DataTypes } from 'sequelize' +import Config from "../config.ts" +import User from "./User.ts"; + +abstract class BaseDataManager { + declare sequelize: Sequelize + declare name: string + constructor(name: string) { + this.init(name) + this.onInit() + } + private init(name: string) { + this.name = name + this.sequelize = new Sequelize({ + dialect: 'sqlite', + storage: Config.dirs.DATABASES_DIR + '/' + name + '.db' + }) + } + abstract onInit(): void +} + +class UserDataManager extends BaseDataManager { + static SINGLE_INSTANCE = new UserDataManager('users') + override onInit(): void { + User.initTable(this.sequelize, this.name) + } +} + +export default class DataBaseManager { + static getUserDataManager() { + return UserDataManager.SINGLE_INSTANCE + } +} diff --git a/server/data/User.ts b/server/data/User.ts new file mode 100644 index 0000000..5448a93 --- /dev/null +++ b/server/data/User.ts @@ -0,0 +1,19 @@ +// @ts-types="npm:sequelize" +import { Sequelize, Op, Model, DataTypes } from 'sequelize' + +export default class User extends Model { + declare created_id: number + static async initTable(sequelize: Sequelize, name: string) { + this.init({ + created_id: { + type: DataTypes.INTEGER.UNSIGNED, + autoIncrement: true, + primaryKey: true, + } + }, { + sequelize: sequelize, + tableName: name, + }) + await this.sync({ alter: true }) + } +}