Simplify aime_player schema

This commit is contained in:
Tau 2019-10-28 18:34:42 -04:00
parent 04b0ccfda3
commit b096a79f95
3 changed files with 39 additions and 48 deletions

View File

@ -1,35 +1,9 @@
create table "aime_shop" (
"id" integer primary key not null,
"ext_id" integer not null,
"name" text not null,
"region" text not null,
constraint "aime_shop_uq" unique ("ext_id")
);
create table "aime_machine" (
"id" integer primary key not null,
"shop_id" integer not null
references "aime_shop"("id"),
"pcb_id" text not null,
"keychip_id" text not null,
constraint "aime_machine_pcb_id_uq" unique ("pcb_id"),
constraint "aime_machine_keychip_id_uq" unique ("keychip_id")
);
create table "aime_player" (
"id" integer primary key not null,
"ext_id" integer not null,
"register_time" timestamp not null,
constraint "aime_player_uq" unique ("ext_id")
);
create table "aime_card" (
"id" integer primary key not null,
"player_id" integer not null
references "aime_player"("id")
on delete cascade,
"nfc_id" text not null,
"luid" text not null,
"register_time" timestamp not null,
"access_time" timestamp not null,
constraint "aime_card_uq" unique ("nfc_id")
constraint "aime_player_ext_id_uq" unique ("ext_id"),
constraint "aime_player_luid_uq" unique ("luid")
);

View File

@ -0,0 +1,27 @@
-- Can't add NOT NULL or UNIQUE constraints as we'd like to. Fortunately we
-- haven't released anything yet so there aren't really any DBs with live
-- data out there in the wild.
-- (Can't drop and recreate the table either btw because "aime_player" is
-- transitively referenced by _literally everything_).
alter table "aime_player" add column "luid" text;
alter table "aime_player" add column "access_time" text;
update "aime_player" as "p"
set "luid" = (
select "c"."nfc_id"
from "aime_card" as "c"
where "c"."player_id" = "p"."id"
),
"access_time" = (
select "c"."access_time"
from "aime_card" as "c"
where "c"."player_id" = "p"."id"
);
drop table "aime_card";
-- These were never used. Re-create them if they become necessary.
drop table "aime_machine";
drop table "aime_shop";

View File

@ -9,10 +9,9 @@ class CardRepositoryImpl implements CardRepository {
async lookup(luid: string, now: Date): Promise<AimeId | undefined> {
const fetchSql = sql
.select("c.id", "p.ext_id")
.from("aime_card c")
.join("aime_player p", { "c.player_id": "p.id" })
.where("c.nfc_id", luid);
.select("p.id", "p.ext_id")
.from("aime_player p")
.where("p.luid", luid);
const row = await this._txn.fetchRow(fetchSql);
@ -24,7 +23,7 @@ class CardRepositoryImpl implements CardRepository {
const extId = row.ext_id;
const touchSql = sql
.update("aime_card")
.update("aime_player")
.set({ access_time: now })
.where("id", id);
@ -34,27 +33,18 @@ class CardRepositoryImpl implements CardRepository {
}
async register(luid: string, now: Date): Promise<AimeId> {
const playerId = this._txn.generateId();
const cardId = this._txn.generateId();
const id = this._txn.generateId();
const aimeId = generateExtId() as AimeId;
const playerSql = sql.insert("aime_player", {
id: playerId,
const insertSql = sql.insert("aime_player", {
id: id,
ext_id: aimeId,
register_time: now,
});
await this._txn.modify(playerSql);
const cardSql = sql.insert("aime_card", {
id: cardId,
player_id: playerId,
nfc_id: luid,
luid: luid,
register_time: now,
access_time: now,
});
await this._txn.modify(cardSql);
await this._txn.modify(insertSql);
return aimeId;
}