chunithm: Initial implementation code drop

No cleaner development history than this exists. It's difficult to
methodically design something when you don't yet know what it is
you're designing.
This commit is contained in:
Tau
2019-11-06 17:29:07 -05:00
parent beb9144e9b
commit d1d63e1ef9
169 changed files with 3903 additions and 242 deletions
+50
View File
@@ -0,0 +1,50 @@
import sql from "sql-bricks-postgres";
import { UserActivityItem } from "../model/userActivity";
import { UserDataItem } from "../model/userData";
import { UserActivityRepository } from "../repo/userActivity";
import { Id } from "../../model";
import { Transaction } from "../../sql";
import { T, createSqlMapper } from "../../sql/util";
const { readRow, writeRow, colNames } = createSqlMapper({
kind: T.number,
activityId: T.number, // This is just called "id" on the wire
sortNumber: T.number,
param1: T.number,
param2: T.number,
param3: T.number,
param4: T.number,
});
export class SqlUserActivityRepository implements UserActivityRepository {
constructor(private readonly _txn: Transaction) {}
async load(
profileId: Id<UserDataItem>,
kind: number
): Promise<UserActivityItem[]> {
const stmt = sql
.select("*")
.from("cm_user_activity")
.where("profile_id", profileId)
.where("kind", kind);
const rows = await this._txn.fetchRows(stmt);
return rows.map(readRow);
}
save(profileId: Id<UserDataItem>, obj: UserActivityItem): Promise<void> {
const stmt = sql
.insert("cm_user_activity", {
id: this._txn.generateId(),
profile_id: profileId,
...writeRow(obj),
})
.onConflict("profile_id", "kind", "activity_id")
.doUpdate(colNames);
return this._txn.modify(stmt);
}
}