diff --git a/src/idz/db/index.ts b/src/idz/db/index.ts index 63b193c..b42e5ef 100644 --- a/src/idz/db/index.ts +++ b/src/idz/db/index.ts @@ -9,6 +9,7 @@ import { SqlProfileRepository } from "./profile"; import { SqlSettingsRepository } from "./settings"; import { SqlStoryRepository } from "./story"; import { SqlTeamRepository } from "./team"; +import { SqlTeamAutoRepository } from "./teamAuto"; import { SqlTeamMemberRepository } from "./teamMember"; import { SqlTicketsRepository } from "./tickets"; import { SqlTimeAttackRepository } from "./timeAttack"; @@ -57,6 +58,10 @@ class TransactionImpl implements Repo.Transaction { return new SqlTeamRepository(this._conn); } + teamAuto(): Repo.TeamAutoRepository { + return new SqlTeamAutoRepository(this._conn); + } + teamMembers(): Repo.TeamMemberRepository { return new SqlTeamMemberRepository(this._conn); } diff --git a/src/idz/db/teamAuto.ts b/src/idz/db/teamAuto.ts new file mode 100644 index 0000000..6f91d87 --- /dev/null +++ b/src/idz/db/teamAuto.ts @@ -0,0 +1,44 @@ +import * as sql from "sql-bricks-postgres"; +import { ClientBase } from "pg"; + +import { Team, TeamAuto } from "../model/team"; +import { TeamAutoRepository } from "../repo"; +import { Id } from "../../db"; + +export class SqlTeamAutoRepository implements TeamAutoRepository { + constructor(private readonly _conn: ClientBase) {} + + async peek(): Promise<[TeamAuto, Id] | undefined> { + const peekSql = sql + .select("tt.*") + .from("idz.team_auto tt") + .orderBy("serial_no desc", "name_idx desc") + .limit(1) + .toParams(); + + const { rows } = await this._conn.query(peekSql); + const row = rows[0]; + + return ( + row && [ + { + serialNo: row.serial_no, + nameIdx: row.name_idx, + }, + row.id, + ] + ); + } + + async push(teamId: Id, auto: TeamAuto): Promise { + const pushSql = sql + .insert("idz.team_auto", { + id: teamId, + serial_no: auto.serialNo, + name_idx: auto.nameIdx, + }) + .toParams(); + + await this._conn.query(pushSql); + } +} diff --git a/src/idz/repo.ts b/src/idz/repo.ts index 5e2f238..6cb8111 100644 --- a/src/idz/repo.ts +++ b/src/idz/repo.ts @@ -69,6 +69,12 @@ export interface TeamRepository { delete(id: Id): Promise; } +export interface TeamAutoRepository { + peek(): Promise<[Model.TeamAuto, Id] | undefined>; + + push(teamId: Id, auto: Model.TeamAuto): Promise; +} + export interface TeamMemberRepository { findTeam(profileId: Id): Promise | undefined>; @@ -131,6 +137,8 @@ export interface Repositories { teams(): TeamRepository; + teamAuto(): TeamAutoRepository; + teamMembers(): TeamMemberRepository; tickets(): FacetRepository;