module provinces

This commit is contained in:
2026-07-07 19:44:31 +03:30
parent e2d9b5ef99
commit 45ab6a8dda
27 changed files with 3848 additions and 6 deletions
@@ -0,0 +1,111 @@
import {
MigrationInterface,
QueryRunner,
Table,
TableForeignKey,
} from 'typeorm';
export class AddProvincesAndCities1721000000000 implements MigrationInterface {
name = 'AddProvincesAndCities1721000000000';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'provinces',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'gen_random_uuid()',
},
{ name: 'name', type: 'varchar', length: '100', isUnique: true },
{ name: 'slug', type: 'varchar', length: '100', isUnique: true },
{ name: 'createdAt', type: 'timestamp', default: 'now()' },
{ name: 'updatedAt', type: 'timestamp', default: 'now()' },
],
}),
true,
);
await queryRunner.createTable(
new Table({
name: 'cities',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'gen_random_uuid()',
},
{ name: 'provinceId', type: 'uuid' },
{ name: 'name', type: 'varchar', length: '100' },
{ name: 'slug', type: 'varchar', length: '100', isUnique: true },
{ name: 'createdAt', type: 'timestamp', default: 'now()' },
{ name: 'updatedAt', type: 'timestamp', default: 'now()' },
],
}),
true,
);
await queryRunner.createForeignKey(
'cities',
new TableForeignKey({
columnNames: ['provinceId'],
referencedTableName: 'provinces',
referencedColumnNames: ['id'],
onDelete: 'CASCADE',
}),
);
await queryRunner.query(`
ALTER TABLE "salons"
ADD COLUMN "provinceId" uuid,
ADD COLUMN "cityId" uuid
`);
await queryRunner.createForeignKey(
'salons',
new TableForeignKey({
columnNames: ['provinceId'],
referencedTableName: 'provinces',
referencedColumnNames: ['id'],
onDelete: 'SET NULL',
}),
);
await queryRunner.createForeignKey(
'salons',
new TableForeignKey({
columnNames: ['cityId'],
referencedTableName: 'cities',
referencedColumnNames: ['id'],
onDelete: 'SET NULL',
}),
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
const salonsTable = await queryRunner.getTable('salons');
if (salonsTable) {
for (const fk of salonsTable.foreignKeys.filter(
(key) =>
key.columnNames.includes('provinceId') ||
key.columnNames.includes('cityId'),
)) {
await queryRunner.dropForeignKey('salons', fk);
}
}
await queryRunner.query(`
ALTER TABLE "salons"
DROP COLUMN IF EXISTS "provinceId",
DROP COLUMN IF EXISTS "cityId"
`);
await queryRunner.dropTable('cities', true);
await queryRunner.dropTable('provinces', true);
}
}