diff --git a/src/database/migrations/1734717058658-add-notification-config-to-item-queue.ts b/src/database/migrations/1734717058658-add-notification-config-to-item-queue.ts new file mode 100644 index 0000000..98f329d --- /dev/null +++ b/src/database/migrations/1734717058658-add-notification-config-to-item-queue.ts @@ -0,0 +1,25 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddNotificationConfigToItemQueue1734717058658 + implements MigrationInterface +{ + name = 'AddNotificationConfigToItemQueue1734717058658'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "item_queues" ADD "use_notification" boolean NOT NULL DEFAULT true`, + ); + await queryRunner.query( + `ALTER TABLE "item_queues" ADD "requiring_notification" boolean NOT NULL DEFAULT false`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "item_queues" DROP COLUMN "requiring_notification"`, + ); + await queryRunner.query( + `ALTER TABLE "item_queues" DROP COLUMN "use_notification"`, + ); + } +} diff --git a/src/database/migrations/1734718462106-add-last-notification-to-queue.ts b/src/database/migrations/1734718462106-add-last-notification-to-queue.ts new file mode 100644 index 0000000..1334c16 --- /dev/null +++ b/src/database/migrations/1734718462106-add-last-notification-to-queue.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddLastNotificationToQueue1734718462106 + implements MigrationInterface +{ + name = 'AddLastNotificationToQueue1734718462106'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "queues" ADD "last_notification" bigint NULL`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "queues" DROP COLUMN "last_notification"`, + ); + } +} diff --git a/src/modules/item-related/item-queue/data/models/item-queue.model.ts b/src/modules/item-related/item-queue/data/models/item-queue.model.ts index 7f0be80..c298f6d 100644 --- a/src/modules/item-related/item-queue/data/models/item-queue.model.ts +++ b/src/modules/item-related/item-queue/data/models/item-queue.model.ts @@ -33,4 +33,10 @@ export class ItemQueueModel onUpdate: 'CASCADE', }) items: ItemModel[]; + + @Column('boolean', { default: true }) + use_notification: boolean; + + @Column('boolean', { default: false }) + requiring_notification: boolean; } diff --git a/src/modules/item-related/item-queue/domain/entities/item-queue.entity.ts b/src/modules/item-related/item-queue/domain/entities/item-queue.entity.ts index 5b89cfe..1d7c765 100644 --- a/src/modules/item-related/item-queue/domain/entities/item-queue.entity.ts +++ b/src/modules/item-related/item-queue/domain/entities/item-queue.entity.ts @@ -9,4 +9,6 @@ export interface ItemQueueEntity extends BaseStatusEntity { max_peak_level: number; call_preparation: number; items: ItemEntity[]; + use_notification?: boolean; + requiring_notification?: boolean; } diff --git a/src/modules/item-related/item-queue/domain/usecases/managers/detail-item-queue.manager.ts b/src/modules/item-related/item-queue/domain/usecases/managers/detail-item-queue.manager.ts index 67d7861..2686425 100644 --- a/src/modules/item-related/item-queue/domain/usecases/managers/detail-item-queue.manager.ts +++ b/src/modules/item-related/item-queue/domain/usecases/managers/detail-item-queue.manager.ts @@ -38,6 +38,8 @@ export class DetailItemQueueManager extends BaseDetailManager { `${this.tableName}.editor_name`, `${this.tableName}.max_peak_level`, `${this.tableName}.call_preparation`, + `${this.tableName}.use_notification`, + `${this.tableName}.requiring_notification`, `items.id`, `items.created_at`, diff --git a/src/modules/item-related/item-queue/domain/usecases/managers/index-item-queue.manager.ts b/src/modules/item-related/item-queue/domain/usecases/managers/index-item-queue.manager.ts index 93c6eb8..a0c94b5 100644 --- a/src/modules/item-related/item-queue/domain/usecases/managers/index-item-queue.manager.ts +++ b/src/modules/item-related/item-queue/domain/usecases/managers/index-item-queue.manager.ts @@ -41,6 +41,8 @@ export class IndexItemQueueManager extends BaseIndexManager { `${this.tableName}.editor_name`, `${this.tableName}.max_peak_level`, `${this.tableName}.call_preparation`, + `${this.tableName}.use_notification`, + `${this.tableName}.requiring_notification`, `items.id`, `items.created_at`, diff --git a/src/modules/queue/data/models/queue.model.ts b/src/modules/queue/data/models/queue.model.ts index eff707f..dd3ec16 100644 --- a/src/modules/queue/data/models/queue.model.ts +++ b/src/modules/queue/data/models/queue.model.ts @@ -115,6 +115,9 @@ export class QueueModel extends BaseModel implements Queue { @Column({ type: 'bigint' }) time: number; + @Column({ type: 'bigint', nullable: true }) + last_notification: number; + @Column({ type: 'bigint' }) call_time: number; diff --git a/src/modules/queue/domain/helpers/time.helper.ts b/src/modules/queue/domain/helpers/time.helper.ts index 88f094e..8a5e05f 100644 --- a/src/modules/queue/domain/helpers/time.helper.ts +++ b/src/modules/queue/domain/helpers/time.helper.ts @@ -9,3 +9,16 @@ export function toTime(timestamp: number): string { minutes < 10 ? '0' : '' }${minutes}`; } + +export function phoneNumberOnly(phone: string): string { + return phone.replace(/[^0-9]/g, ''); +} + +export function timeIsBefore( + currentTime: number, + time: number, + diff = 15, +): boolean { + const diffInMilliseconds = diff * 60 * 1000; + return time < currentTime + diffInMilliseconds; +}