varo-website/src/db/database.ts
bytedream 8b18623232
All checks were successful
deploy / build-and-deploy (push) Successful in 15s
add blocked user
2025-05-20 23:34:54 +02:00

244 lines
7.5 KiB
TypeScript

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,
type GetTeamsFullReq,
getTeamsFull
} 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';
import {
addBlockedUser,
type AddBlockedUserReq,
getBlockedUsers,
type GetBlockedUsersReq,
blockedUser,
type GetBlockedUserByUuidReq,
getBlockedUserByUuid,
type EditBlockedUserReq,
editBlockedUser
} from '@db/schema/blockedUser.ts';
export class Database {
protected readonly db: MySql2Database<{
admin: typeof admin;
team: typeof team;
teamDraft: typeof teamDraft;
teamMember: typeof teamMember;
user: typeof user;
blockedUser: typeof blockedUser;
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 connectionPool = mysql.createPool({
uri: databaseUri
});
const db = drizzle({
client: connectionPool,
schema: {
admin,
team,
teamDraft,
teamMember,
user,
blockedUser,
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);
/* user blocks */
addBlockedUser = (values: AddBlockedUserReq) => addBlockedUser(this.db, values);
editBlockedUser = (values: EditBlockedUserReq) => editBlockedUser(this.db, values);
getBlockedUserByUuid = (values: GetBlockedUserByUuidReq) => getBlockedUserByUuid(this.db, values);
getBlockedUsers = (values: GetBlockedUsersReq) => getBlockedUsers(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);
getTeamsFull = (values: GetTeamsFullReq) => getTeamsFull(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);