Files
djhackersdev_minime/src/idz/userdb/sql/weeklyMissions.ts
T

73 lines
2.2 KiB
TypeScript

import sql from "sql-bricks-postgres";
import { WeeklyMissions } from "../model/weeklyMissions";
import { Profile } from "../model/profile";
import { WeeklyMissionsRepository } from "../repo";
import { Id } from "../../../model";
import { Transaction } from "../../../sql";
const defaultWeeklyMissions: WeeklyMissions = {
weeklyReset: new Date(),
weeklyMissionLeft: 0,
weeklyProgressLeft: 0,
weeklyParamsLeft: 0,
weeklyMissionRight: 0,
weeklyProgressRight: 0,
weeklyParamsRight: 0,
};
export class SqlWeeklyMissionsRepository implements WeeklyMissionsRepository {
constructor(private readonly _txn: Transaction) {}
async load(profileId: Id<Profile>): Promise<WeeklyMissions> {
const loadSql = sql
.select("wm.*")
.from("idz_weekly_missions wm")
.where("wm.id", profileId);
const row = await this._txn.fetchRow(loadSql);
if (row === undefined) {
return { ...defaultWeeklyMissions };
}
return {
weeklyReset: new Date(row.weekly_reset!),
weeklyMissionLeft: parseInt(row.mission_left!),
weeklyProgressLeft: parseInt(row.progress_left!),
weeklyParamsLeft: parseInt(row.params_left!),
weeklyMissionRight: parseInt(row.mission_right!),
weeklyProgressRight: parseInt(row.progress_right!),
weeklyParamsRight: parseInt(row.params_right!),
};
}
async save(
profileId: Id<Profile>,
weeklyMissions: WeeklyMissions
): Promise<void> {
const saveSql = sql
.insert("idz_weekly_missions", {
id: profileId,
weekly_reset: weeklyMissions.weeklyReset,
mission_left: weeklyMissions.weeklyMissionLeft,
progress_left: weeklyMissions.weeklyProgressLeft,
params_left: weeklyMissions.weeklyParamsLeft,
mission_right: weeklyMissions.weeklyMissionRight,
progress_right: weeklyMissions.weeklyProgressRight,
params_right: weeklyMissions.weeklyParamsRight,
})
.onConflict("profile_id")
.doUpdate([
"weekly_reset",
"mission_left",
"progress_left",
"params_left",
"mission_right",
"progress_right",
"params_right",
]);
await this._txn.modify(saveSql);
}
}