feat: add (temp?) db mgr

This commit is contained in:
2026-01-13 18:35:40 -03:00
parent aba00e3599
commit 9b4d1cbe24
+75
View File
@@ -0,0 +1,75 @@
import {
Attributes,
DataTypes,
Model,
ModelAttributes,
ModelStatic,
Sequelize
} from 'sequelize';
export class DatabaseManager {
private readonly db: Sequelize;
public guildData: ModelStatic<Model> | null = null;
public userData: ModelStatic<Model> | null = null;
private constructor() {
this.db = new Sequelize('db', 'luma', '', {
host: 'localhost',
dialect: 'sqlite',
storage: 'db.sqlite',
logging: false
});
this.db.sync();
}
public async init(userKeys: object, guildKeys: object) {
this.userData = this.db.define('user_data', {
user_id: { type: DataTypes.STRING, unique: true, primaryKey: true },
...userKeys
});
this.guildData = this.db.define('guild_data', {
guild_id: { type: DataTypes.STRING, unique: true, primaryKey: true },
...guildKeys
});
await this.db.sync({ alter: true });
}
public sync(): void {
this.db.sync();
}
public async getUser(userId: string) {
if (!this.userData) throw new Error("Database not initialized");
const [user] = await this.userData.findOrCreate({
where: { user_id: userId },
defaults: { user_id: userId }
});
return user;
}
public async getGuild(guildId: string) {
if (!this.guildData) throw new Error("Database not initialized");
const [guild] = await this.guildData.findOrCreate({
where: { guild_id: guildId },
defaults: { guild_id: guildId }
});
return guild;
}
/*
singleton logic
*/
static #instance: DatabaseManager | null = null;
public static get get(): DatabaseManager {
if (!DatabaseManager.#instance)
DatabaseManager.#instance = new DatabaseManager();
return DatabaseManager.#instance;
}
}