feat: add (temp?) db mgr
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user