From 515111e61bd797f10eae82de2bf1c11860d8e412 Mon Sep 17 00:00:00 2001 From: Tau Date: Mon, 29 Apr 2019 11:11:23 -0400 Subject: [PATCH] idz: Add SqlCharaRepository --- src/idz/db/chara.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/idz/db/chara.ts diff --git a/src/idz/db/chara.ts b/src/idz/db/chara.ts new file mode 100644 index 0000000..ab79608 --- /dev/null +++ b/src/idz/db/chara.ts @@ -0,0 +1,69 @@ +import { Client } from "pg"; +import * as sql from "sql-bricks-postgres"; + +import { _findProfile } from "./_util"; +import { ExtId } from "../model/base"; +import { Chara } from "../model/chara"; +import { Profile } from "../model/profile"; +import { FacetRepository } from "../repo"; + +export class SqlCharaRepository implements FacetRepository { + constructor(private readonly _conn: Client) {} + + async load(extId: ExtId): Promise { + const loadSql = sql + .select("s.*") + .from("idz.profile p") + .join("idz.chara c", { "p.id": "c.id" }) + .where("p.ext_id", extId) + .toParams(); + + const { rows } = await this._conn.query(loadSql); + const row = rows[0]; + + return { + gender: row.gender, + field_02: row.field_02, + field_04: row.field_04, + field_06: row.field_06, + field_08: row.field_08, + field_0A: row.field_0A, + field_0C: row.field_0C, + field_0E: row.field_0E, + title: row.title, + background: row.background, + }; + } + + async save(extId: ExtId, chara: Chara): Promise { + const profileId = await _findProfile(this._conn, extId); + + const saveSql = sql + .insert("idz.chara", { + id: profileId, + gender: chara.gender, + field_02: chara.field_02, + field_04: chara.field_04, + field_06: chara.field_06, + field_08: chara.field_08, + field_0A: chara.field_0A, + field_0C: chara.field_0C, + field_0E: chara.field_0E, + title: chara.title, + background: chara.background, + }) + .onConflict("id") + .doUpdate( + "field_02", + "field_04", + "field_06", + "field_08", + "field_0A", + "field_0C", + "field_0E" + ) + .toParams(); + + await this._conn.query(saveSql); + } +}