53 lines
No EOL
1.9 KiB
TypeScript
53 lines
No EOL
1.9 KiB
TypeScript
import {Repository} from "./Repository";
|
|
import {PlaydateModel} from "../Models/PlaydateModel";
|
|
import Playdate, {DBPlaydate} from "../Database/tables/Playdate";
|
|
import {DatabaseConnection} from "../Database/DatabaseConnection";
|
|
import {GroupRepository} from "./GroupRepository";
|
|
import {GroupModel} from "../Models/GroupModel";
|
|
import {Nullable} from "../types/Nullable";
|
|
import playdate from "../Database/tables/Playdate";
|
|
|
|
export class PlaydateRepository extends Repository<PlaydateModel, DBPlaydate> {
|
|
|
|
constructor(
|
|
protected readonly database: DatabaseConnection,
|
|
private readonly groupRepository: GroupRepository,
|
|
) {
|
|
super(
|
|
database,
|
|
Playdate
|
|
);
|
|
}
|
|
|
|
findFromGroup(group: GroupModel) {
|
|
const finds = this.database.fetchAll<number, DBPlaydate>(
|
|
`SELECT * FROM ${this.schema.name} WHERE groupid = ? AND time_from > ?`,
|
|
group.id,
|
|
new Date().getTime()
|
|
);
|
|
|
|
return finds.map((playdate) => this.convertToModelType(playdate, group));
|
|
}
|
|
|
|
protected convertToModelType(intermediateModel: DBPlaydate | undefined, fixedGroup: Nullable<GroupModel> = null): PlaydateModel {
|
|
if (!intermediateModel) {
|
|
throw new Error("Unable to convert the playdate model");
|
|
}
|
|
const result: PlaydateModel = {
|
|
id: intermediateModel.id,
|
|
group: fixedGroup ?? this.groupRepository.getById(intermediateModel.groupid),
|
|
from_time: new Date(intermediateModel.time_from),
|
|
to_time: new Date(intermediateModel.time_to),
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
protected convertToCreateObject(instance: Partial<PlaydateModel>): object {
|
|
return {
|
|
groupid: instance.group?.id ?? null,
|
|
time_from: instance.from_time?.getTime() ?? 0,
|
|
time_to: instance.to_time?.getTime() ?? 0,
|
|
}
|
|
}
|
|
} |