chuni: Correctly implement recent rating requests

This commit is contained in:
seika1
2020-08-02 12:22:01 -04:00
committed by Tau
parent f8a5a9d7a4
commit cdae32ae64
9 changed files with 133 additions and 16 deletions
+54
View File
@@ -0,0 +1,54 @@
import sql from "sql-bricks-postgres";
import { Id } from "../../model";
import { UserDataItem } from "../model/userData";
import { UserRecentRatingItem } from "../model/userRecentRating";
import { UserRecentRatingRepository } from "../repo/userRecentRating";
import { Transaction } from "../../sql";
import { T, createSqlMapper } from "../../sql/util";
const { readRow, writeRow, colNames } = createSqlMapper({
musicId: T.number,
difficultId: T.number,
romVersionCode: T.number,
score: T.number,
});
export class SqlUserRecentRatingRepository
implements UserRecentRatingRepository {
constructor(private readonly _txn: Transaction) {}
async load(profileId: Id<UserDataItem>): Promise<UserRecentRatingItem[]> {
const stmt = sql
.select("music_id", "difficult_id", "rom_version_code", "score")
.from("cm_user_recent_rating")
.where("profile_id", profileId)
.order("sort_order ASC");
const rows = await this._txn.fetchRows(stmt);
return rows.map(readRow);
}
save(
profileId: Id<UserDataItem>,
objs: UserRecentRatingItem[]
): Promise<void> {
const stmt = sql
.insert(
"cm_user_recent_rating",
objs.map((obj, idx) => {
return {
id: this._txn.generateId(),
profile_id: profileId,
sort_order: idx + 1,
...writeRow(obj),
};
})
)
.onConflict("profile_id", "sort_order")
.doUpdate(colNames);
return this._txn.modify(stmt);
}
}