suggestion module

This commit is contained in:
2026-06-30 10:55:51 +03:30
parent d8086cab17
commit d5448ba07a
10 changed files with 486 additions and 0 deletions
@@ -0,0 +1,92 @@
import {
MigrationInterface,
QueryRunner,
Table,
TableForeignKey,
TableIndex,
TableUnique,
} from 'typeorm';
export class AddServiceSuggestions1720000000000 implements MigrationInterface {
name = 'AddServiceSuggestions1720000000000';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TYPE "service_suggestions_type_enum" AS ENUM(
'complementary',
'renewal'
)
`);
await queryRunner.createTable(
new Table({
name: 'service_suggestions',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'gen_random_uuid()',
},
{ name: 'serviceId', type: 'uuid' },
{ name: 'suggestedServiceId', type: 'uuid' },
{ name: 'isActive', type: 'boolean', default: true },
{ name: 'badgeTitle', type: 'varchar', length: '100' },
{ name: 'displayPriority', type: 'int', default: 0 },
{
name: 'shortDescription',
type: 'varchar',
length: '500',
isNullable: true,
},
{ name: 'type', type: 'service_suggestions_type_enum' },
{ name: 'createdAt', type: 'timestamp', default: 'now()' },
{ name: 'updatedAt', type: 'timestamp', default: 'now()' },
],
}),
true,
);
await queryRunner.createForeignKey(
'service_suggestions',
new TableForeignKey({
columnNames: ['serviceId'],
referencedTableName: 'services',
referencedColumnNames: ['id'],
onDelete: 'CASCADE',
}),
);
await queryRunner.createForeignKey(
'service_suggestions',
new TableForeignKey({
columnNames: ['suggestedServiceId'],
referencedTableName: 'services',
referencedColumnNames: ['id'],
onDelete: 'CASCADE',
}),
);
await queryRunner.createUniqueConstraint(
'service_suggestions',
new TableUnique({
name: 'UQ_service_suggestions_serviceId_suggestedServiceId',
columnNames: ['serviceId', 'suggestedServiceId'],
}),
);
await queryRunner.createIndex(
'service_suggestions',
new TableIndex({
name: 'IDX_service_suggestions_serviceId_isActive_displayPriority',
columnNames: ['serviceId', 'isActive', 'displayPriority'],
}),
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('service_suggestions', true);
await queryRunner.query(`DROP TYPE "service_suggestions_type_enum"`);
}
}