From 4f442c357fb1354ed1461299ed5af8f7e64f2582 Mon Sep 17 00:00:00 2001 From: Paolo Brasolin <paolo.brasolin@eurac.edu> Date: Tue, 5 Apr 2022 14:30:11 +0200 Subject: [PATCH] feat: #be add gmtm tracking --- backend/migrations/20220405095220_gmtm.ts | 21 +++++++++++++++++++++ backend/src/schemas.ts | 10 ++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 backend/migrations/20220405095220_gmtm.ts diff --git a/backend/migrations/20220405095220_gmtm.ts b/backend/migrations/20220405095220_gmtm.ts new file mode 100644 index 0000000..1b7e290 --- /dev/null +++ b/backend/migrations/20220405095220_gmtm.ts @@ -0,0 +1,21 @@ +import { Knex } from "knex"; + +export async function up(knex: Knex): Promise<void> { + return knex.schema + .alterTable("games", (table) => table.integer("began_at_gmtm").unsigned()) + .alterTable("clues", (table) => table.integer("began_at_gmtm").unsigned()) + .alterTable("shots", (table) => table.integer("began_at_gmtm").unsigned()) + .alterTable("games", (table) => table.integer("ended_at_gmtm").unsigned()) + .alterTable("clues", (table) => table.integer("ended_at_gmtm").unsigned()) + .alterTable("shots", (table) => table.integer("ended_at_gmtm").unsigned()); +} + +export async function down(knex: Knex): Promise<void> { + return knex.schema + .alterTable("games", (table) => table.dropColumn("began_at_gmtm")) + .alterTable("clues", (table) => table.dropColumn("began_at_gmtm")) + .alterTable("shots", (table) => table.dropColumn("began_at_gmtm")) + .alterTable("games", (table) => table.dropColumn("ended_at_gmtm")) + .alterTable("clues", (table) => table.dropColumn("ended_at_gmtm")) + .alterTable("shots", (table) => table.dropColumn("ended_at_gmtm")); +} diff --git a/backend/src/schemas.ts b/backend/src/schemas.ts index 072c8af..d55f0e0 100644 --- a/backend/src/schemas.ts +++ b/backend/src/schemas.ts @@ -20,6 +20,8 @@ export const Game = Type.Object({ device_id: Type.Readonly(Type.String({ format: "uuid" })), began_at: Nullable(Type.String({ format: "date-time" })), ended_at: Nullable(Type.String({ format: "date-time" })), + began_at_gmtm: Nullable(Type.Number({ minimum: 0 })), + ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })), }); export const Clue = Type.Object({ @@ -28,6 +30,8 @@ export const Clue = Type.Object({ word_id: Type.Readonly(Type.String({ format: "uuid" })), began_at: Nullable(Type.String({ format: "date-time" })), ended_at: Nullable(Type.String({ format: "date-time" })), + began_at_gmtm: Nullable(Type.Number({ minimum: 0 })), + ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })), }); export const Shot = Type.Object({ @@ -36,17 +40,19 @@ export const Shot = Type.Object({ clue_id: Nullable(Type.String({ format: "uuid" })), began_at: Type.String({ format: "date-time" }), ended_at: Type.String({ format: "date-time" }), + began_at_gmtm: Nullable(Type.Number({ minimum: 0 })), + ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })), typed: Type.String(), final: Type.String(), }); export const GameUpdate = Type.Partial( - Type.Pick(Game, ["began_at", "ended_at"]), + Type.Pick(Game, ["began_at", "ended_at", "began_at_gmtm", "ended_at_gmtm"]), ); export const GameCreate = GameUpdate; export const ClueUpdate = Type.Partial( - Type.Pick(Clue, ["began_at", "ended_at"]), + Type.Pick(Clue, ["began_at", "ended_at", "began_at_gmtm", "ended_at_gmtm"]), ); export const ClueCreate = Type.Intersect([ Type.Pick(Clue, ["word_id"]), -- GitLab