refactor(models): Moved models and Repositories to database
This commit is contained in:
parent
d5f5fe5f1a
commit
9155f630d9
18 changed files with 42 additions and 42 deletions
|
|
@ -1,114 +0,0 @@
|
|||
import {Repository} from "./Repository";
|
||||
import {GroupModel} from "../Models/GroupModel";
|
||||
import Groups, {DBGroup} from "../Database/tables/Groups";
|
||||
import {DatabaseConnection} from "../Database/DatabaseConnection";
|
||||
import {GuildMember, UserFlagsBitField} from "discord.js";
|
||||
import {Nullable} from "../types/Nullable";
|
||||
import {PlaydateRepository} from "./PlaydateRepository";
|
||||
import {Container} from "../Container/Container";
|
||||
|
||||
export class GroupRepository extends Repository<GroupModel, DBGroup> {
|
||||
|
||||
constructor(
|
||||
protected readonly database: DatabaseConnection,
|
||||
) {
|
||||
super(
|
||||
database,
|
||||
Groups
|
||||
);
|
||||
}
|
||||
|
||||
public findGroupByName(name: string): Nullable<GroupModel> {
|
||||
const result = this.database.fetch<string, DBGroup>(
|
||||
`SELECT * FROM groups WHERE name = ? LIMIT 1`,
|
||||
name
|
||||
)
|
||||
|
||||
if (!result) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return this.convertToModelType(result);
|
||||
}
|
||||
|
||||
public findGroupsByRoles(server: string, roleIds: string[]): GroupModel[] {
|
||||
const template = roleIds.map(_roleId => '?').join(',');
|
||||
|
||||
const dbResult = this.database.fetchAll<number[], DBGroup>(`
|
||||
SELECT * FROM groups WHERE server = ? AND role IN (${template})
|
||||
`,
|
||||
server,
|
||||
...roleIds)
|
||||
|
||||
|
||||
return dbResult.map((result) => this.convertToModelType(result));
|
||||
}
|
||||
|
||||
public findGroupsByMember(member: GuildMember, onlyLeader: boolean = false) {
|
||||
if (!member) {
|
||||
throw new Error("Can't find member for guild: none given");
|
||||
}
|
||||
|
||||
const groups = this.findGroupsByRoles(member.guild.id, [...member.roles.cache.keys()])
|
||||
|
||||
if (!onlyLeader) {
|
||||
return groups;
|
||||
}
|
||||
|
||||
return groups.filter((group: GroupModel) => {
|
||||
return group.leader.memberid === member.id;
|
||||
})
|
||||
}
|
||||
|
||||
public isMemberInGroup(member: Nullable<GuildMember>, group: GroupModel): boolean
|
||||
{
|
||||
if (!member) {
|
||||
throw new Error("Can't find member for guild: none given");
|
||||
}
|
||||
|
||||
const groups = this.findGroupsByRoles(member.guild.id, [...member.roles.cache.keys()])
|
||||
|
||||
return groups.some((dbGroup) => {
|
||||
return group.id === dbGroup.id;
|
||||
})
|
||||
}
|
||||
|
||||
public deleteGroup(group: GroupModel): void {
|
||||
this.delete(group.id);
|
||||
|
||||
const repo = Container.get<PlaydateRepository>(PlaydateRepository.name);
|
||||
const playdates = repo.findFromGroup(group, true)
|
||||
playdates.forEach((playdate) => {
|
||||
repo.delete(playdate.id);
|
||||
})
|
||||
}
|
||||
|
||||
protected convertToModelType(intermediateModel: DBGroup | undefined): GroupModel {
|
||||
if (!intermediateModel) {
|
||||
throw new Error("No intermediate model provided");
|
||||
}
|
||||
|
||||
return {
|
||||
id: intermediateModel.id,
|
||||
name: intermediateModel.name,
|
||||
leader: {
|
||||
server: intermediateModel.server,
|
||||
memberid: intermediateModel.leader
|
||||
},
|
||||
role: {
|
||||
server: intermediateModel.server,
|
||||
roleid: intermediateModel.role
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected convertToCreateObject(instance: Partial<GroupModel>): object {
|
||||
return {
|
||||
name: instance.name ?? '',
|
||||
server: instance.role?.server ?? null,
|
||||
leader: instance.leader?.memberid ?? null,
|
||||
role: instance.role?.roleid ?? null,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue