This commit is contained in:
221
src/db/database.ts
Normal file
221
src/db/database.ts
Normal file
@ -0,0 +1,221 @@
|
||||
import { drizzle, type MySql2Database } from 'drizzle-orm/mysql2';
|
||||
import mysql from 'mysql2/promise';
|
||||
import {
|
||||
existsAdmin,
|
||||
admin,
|
||||
type ExistsAdminReq,
|
||||
type GetAdminReq,
|
||||
getAdmins,
|
||||
type AddAdminReq,
|
||||
addAdmin,
|
||||
type EditAdminReq,
|
||||
editAdmin
|
||||
} from './schema/admin';
|
||||
import {
|
||||
addTeam,
|
||||
deleteTeam,
|
||||
getTeams,
|
||||
getTeamById,
|
||||
getTeamByName,
|
||||
type AddTeamReq,
|
||||
type DeleteTeamReq,
|
||||
type GetTeamByIdReq,
|
||||
type GetTeamByNameReq,
|
||||
type GetTeamsReq,
|
||||
team,
|
||||
type GetTeamByUserUuidReq,
|
||||
getTeamByUserUuid,
|
||||
type EditTeamReq,
|
||||
editTeam
|
||||
} from './schema/team';
|
||||
import {
|
||||
addTeamDraft,
|
||||
deleteTeamDraft,
|
||||
getTeamDraftByMemberOne,
|
||||
type AddTeamDraftReq,
|
||||
type DeleteTeamDraftReq,
|
||||
type GetTeamDraftByMemberOneReq,
|
||||
teamDraft,
|
||||
type GetTeamDraftByUsernameReq,
|
||||
getTeamDraftByUsername
|
||||
} from './schema/teamDraft';
|
||||
import {
|
||||
addTeamMember,
|
||||
type AddTeamMemberReq,
|
||||
deleteTeamMemberByTeamId,
|
||||
type DeleteTeamMemberByTeamIdReq,
|
||||
teamMember
|
||||
} from './schema/teamMember';
|
||||
import {
|
||||
type AddUserReq,
|
||||
type EditUserReq,
|
||||
type DeleteUserReq,
|
||||
type GetUsersReq,
|
||||
type GetUserByUsernameReq,
|
||||
user,
|
||||
addUser,
|
||||
editUser,
|
||||
deleteUser,
|
||||
getUsers,
|
||||
getUserByUsername,
|
||||
existsUser,
|
||||
type ExistsUserReq,
|
||||
type GetUsersByUuidReq,
|
||||
getUsersByUuid,
|
||||
type GetUserByIdReq,
|
||||
getUserById
|
||||
} from './schema/user';
|
||||
import {
|
||||
type GetSettingReq,
|
||||
settings,
|
||||
getSetting,
|
||||
type GetSettingsReq,
|
||||
getSettings,
|
||||
type SetSettingsReq,
|
||||
setSettings
|
||||
} from './schema/settings';
|
||||
import {
|
||||
addDeath,
|
||||
type AddDeathReq,
|
||||
death,
|
||||
getDeathByUserId,
|
||||
type GetDeathByUserIdReq,
|
||||
getDeaths,
|
||||
type GetDeathsReq
|
||||
} from './schema/death.ts';
|
||||
import {
|
||||
addFeedback,
|
||||
type AddFeedbackReq,
|
||||
addUserFeedbacks,
|
||||
type AddUserFeedbacksReq,
|
||||
feedback,
|
||||
getFeedbacks,
|
||||
type GetFeedbacksReq
|
||||
} from './schema/feedback.ts';
|
||||
import { addReport, type AddReportReq, getReports, type GetReportsReq, report } from './schema/report.ts';
|
||||
import { DATABASE_URI } from 'astro:env/server';
|
||||
import { type GetStrikeReasonsReq, getStrikeReasons, strikeReason } from '@db/schema/strikeReason.ts';
|
||||
import { getStrikesByTeamId, type GetStrikesByTeamId, strike } from '@db/schema/strike.ts';
|
||||
import {
|
||||
editReportStatus,
|
||||
type EditReportStatusReq,
|
||||
getReportStatus,
|
||||
type GetReportStatusReq,
|
||||
reportStatus
|
||||
} from '@db/schema/reportStatus.ts';
|
||||
|
||||
export class Database {
|
||||
protected readonly db: MySql2Database<{
|
||||
admin: typeof admin;
|
||||
team: typeof team;
|
||||
teamDraft: typeof teamDraft;
|
||||
teamMember: typeof teamMember;
|
||||
user: typeof user;
|
||||
death: typeof death;
|
||||
report: typeof report;
|
||||
reportStatus: typeof reportStatus;
|
||||
strike: typeof strike;
|
||||
strikeReason: typeof strikeReason;
|
||||
feedback: typeof feedback;
|
||||
settings: typeof settings;
|
||||
}>;
|
||||
|
||||
private constructor(db: typeof this.db) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
static async init(databaseUri: string) {
|
||||
const connection = await mysql.createConnection({
|
||||
uri: databaseUri
|
||||
});
|
||||
|
||||
const db = drizzle({
|
||||
client: connection,
|
||||
schema: {
|
||||
admin,
|
||||
team,
|
||||
teamDraft,
|
||||
teamMember,
|
||||
user,
|
||||
death,
|
||||
report,
|
||||
reportStatus,
|
||||
strike,
|
||||
strikeReason,
|
||||
feedback,
|
||||
settings
|
||||
},
|
||||
mode: 'default'
|
||||
});
|
||||
|
||||
return new Database(db);
|
||||
}
|
||||
|
||||
async transaction<T>(fn: (tx: Database & { rollback: () => never }) => Promise<T>): Promise<T> {
|
||||
return this.db.transaction((tx) => fn(new Database(tx) as Database & { rollback: () => never }));
|
||||
}
|
||||
|
||||
/* admins */
|
||||
addAdmin = (values: AddAdminReq) => addAdmin(this.db, values);
|
||||
editAdmin = (values: EditAdminReq) => editAdmin(this.db, values);
|
||||
getAdmins = (values: GetAdminReq) => getAdmins(this.db, values);
|
||||
existsAdmin = (values: ExistsAdminReq) => existsAdmin(this.db, values);
|
||||
|
||||
/* user */
|
||||
addUser = (values: AddUserReq) => addUser(this.db, values);
|
||||
editUser = (values: EditUserReq) => editUser(this.db, values);
|
||||
deleteUser = (values: DeleteUserReq) => deleteUser(this.db, values);
|
||||
existsUser = (values: ExistsUserReq) => existsUser(this.db, values);
|
||||
getUsers = (values: GetUsersReq) => getUsers(this.db, values);
|
||||
getUserById = (values: GetUserByIdReq) => getUserById(this.db, values);
|
||||
getUserByUsername = (values: GetUserByUsernameReq) => getUserByUsername(this.db, values);
|
||||
getUsersByUuid = (values: GetUsersByUuidReq) => getUsersByUuid(this.db, values);
|
||||
|
||||
/* team */
|
||||
addTeam = (values: AddTeamReq) => addTeam(this.db, values);
|
||||
editTeam = (values: EditTeamReq) => editTeam(this.db, values);
|
||||
deleteTeam = (values: DeleteTeamReq) => deleteTeam(this.db, values);
|
||||
getTeams = (values: GetTeamsReq) => getTeams(this.db, values);
|
||||
getTeamById = (values: GetTeamByIdReq) => getTeamById(this.db, values);
|
||||
getTeamByName = (values: GetTeamByNameReq) => getTeamByName(this.db, values);
|
||||
getTeamByUserUuid = (values: GetTeamByUserUuidReq) => getTeamByUserUuid(this.db, values);
|
||||
|
||||
/* team draft */
|
||||
addTeamDraft = (values: AddTeamDraftReq) => addTeamDraft(this.db, values);
|
||||
deleteTeamDraft = (values: DeleteTeamDraftReq) => deleteTeamDraft(this.db, values);
|
||||
getTeamDraftByUsername = (values: GetTeamDraftByUsernameReq) => getTeamDraftByUsername(this.db, values);
|
||||
getTeamDraftByMemberOne = (values: GetTeamDraftByMemberOneReq) => getTeamDraftByMemberOne(this.db, values);
|
||||
|
||||
/* team member */
|
||||
addTeamMember = (values: AddTeamMemberReq) => addTeamMember(this.db, values);
|
||||
deleteTeamMemberByTeamId = (values: DeleteTeamMemberByTeamIdReq) => deleteTeamMemberByTeamId(this.db, values);
|
||||
|
||||
/* death */
|
||||
addDeath = (values: AddDeathReq) => addDeath(this.db, values);
|
||||
getDeathByUserId = (values: GetDeathByUserIdReq) => getDeathByUserId(this.db, values);
|
||||
getDeaths = (values: GetDeathsReq) => getDeaths(this.db, values);
|
||||
|
||||
/* report */
|
||||
addReport = (values: AddReportReq) => addReport(this.db, values);
|
||||
getReports = (values: GetReportsReq) => getReports(this.db, values);
|
||||
|
||||
/* report status */
|
||||
getReportStatus = (values: GetReportStatusReq) => getReportStatus(this.db, values);
|
||||
editReportStatus = (values: EditReportStatusReq) => editReportStatus(this.db, values);
|
||||
|
||||
/* strike reason */
|
||||
getStrikeReasons = (values: GetStrikeReasonsReq) => getStrikeReasons(this.db, values);
|
||||
getStrikesByTeamId = (values: GetStrikesByTeamId) => getStrikesByTeamId(this.db, values);
|
||||
|
||||
/* feedback */
|
||||
addFeedback = (values: AddFeedbackReq) => addFeedback(this.db, values);
|
||||
addUserFeedbacks = (values: AddUserFeedbacksReq) => addUserFeedbacks(this.db, values);
|
||||
getFeedbacks = (values: GetFeedbacksReq) => getFeedbacks(this.db, values);
|
||||
|
||||
/* settings */
|
||||
getSettings = (values: GetSettingsReq) => getSettings(this.db, values);
|
||||
setSettings = (values: SetSettingsReq) => setSettings(this.db, values);
|
||||
getSetting = (values: GetSettingReq) => getSetting(this.db, values);
|
||||
}
|
||||
|
||||
export const db = await Database.init(DATABASE_URI);
|
Reference in New Issue
Block a user