mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-11-27 18:04:55 +00:00
Add region and timezone seeders
This commit is contained in:
@ -15,6 +15,10 @@ import { UserRepository } from '../modules/user/repositories';
|
|||||||
import { UserRoleRepository } from '../modules/user-role/repositories';
|
import { UserRoleRepository } from '../modules/user-role/repositories';
|
||||||
import { UserRoleRepositoryModule } from '../modules/user-role/user.role.repository.module';
|
import { UserRoleRepositoryModule } from '../modules/user-role/user.role.repository.module';
|
||||||
import { UserRepositoryModule } from '../modules/user/user.repository.module';
|
import { UserRepositoryModule } from '../modules/user/user.repository.module';
|
||||||
|
import { RegionSeeder } from './services/regions.seeder';
|
||||||
|
import { RegionRepository } from '../modules/region/repositories';
|
||||||
|
import { TimeZoneSeeder } from './services/timezone.seeder';
|
||||||
|
import { TimeZoneRepository } from '../modules/timezone/repositories';
|
||||||
@Global()
|
@Global()
|
||||||
@Module({
|
@Module({
|
||||||
providers: [
|
providers: [
|
||||||
@ -28,6 +32,10 @@ import { UserRepositoryModule } from '../modules/user/user.repository.module';
|
|||||||
SuperAdminSeeder,
|
SuperAdminSeeder,
|
||||||
UserRepository,
|
UserRepository,
|
||||||
UserRoleRepository,
|
UserRoleRepository,
|
||||||
|
RegionSeeder,
|
||||||
|
RegionRepository,
|
||||||
|
TimeZoneSeeder,
|
||||||
|
TimeZoneRepository,
|
||||||
],
|
],
|
||||||
exports: [SeederService],
|
exports: [SeederService],
|
||||||
controllers: [],
|
controllers: [],
|
||||||
|
|||||||
40
libs/common/src/seed/services/regions.seeder.ts
Normal file
40
libs/common/src/seed/services/regions.seeder.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import { RegionRepository } from '@app/common/modules/region/repositories';
|
||||||
|
import { allCountries } from '@app/common/constants/regions';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class RegionSeeder {
|
||||||
|
constructor(private readonly regionRepository: RegionRepository) {}
|
||||||
|
|
||||||
|
async addRegionDataIfNotFound(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const existingRegions = await this.regionRepository.find();
|
||||||
|
|
||||||
|
const regionNames = existingRegions.map((region) => region.regionName);
|
||||||
|
|
||||||
|
const missingRegions = allCountries.filter(
|
||||||
|
(country) => !regionNames.includes(country),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (missingRegions.length > 0) {
|
||||||
|
await this.addRegionData(missingRegions);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error while checking region data:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async addRegionData(regions: string[]): Promise<void> {
|
||||||
|
try {
|
||||||
|
const regionEntities = regions.map((regionName) => ({
|
||||||
|
regionName,
|
||||||
|
}));
|
||||||
|
|
||||||
|
await this.regionRepository.save(regionEntities);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error while adding region data:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,12 +3,16 @@ import { PermissionTypeSeeder } from './permission.type.seeder';
|
|||||||
import { RoleTypeSeeder } from './role.type.seeder';
|
import { RoleTypeSeeder } from './role.type.seeder';
|
||||||
import { SpaceTypeSeeder } from './space.type.seeder';
|
import { SpaceTypeSeeder } from './space.type.seeder';
|
||||||
import { SuperAdminSeeder } from './supper.admin.seeder';
|
import { SuperAdminSeeder } from './supper.admin.seeder';
|
||||||
|
import { RegionSeeder } from './regions.seeder';
|
||||||
|
import { TimeZoneSeeder } from './timezone.seeder';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SeederService {
|
export class SeederService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly permissionTypeSeeder: PermissionTypeSeeder,
|
private readonly permissionTypeSeeder: PermissionTypeSeeder,
|
||||||
private readonly roleTypeSeeder: RoleTypeSeeder,
|
private readonly roleTypeSeeder: RoleTypeSeeder,
|
||||||
private readonly spaceTypeSeeder: SpaceTypeSeeder,
|
private readonly spaceTypeSeeder: SpaceTypeSeeder,
|
||||||
|
private readonly regionSeeder: RegionSeeder,
|
||||||
|
private readonly timeZoneSeeder: TimeZoneSeeder,
|
||||||
private readonly superAdminSeeder: SuperAdminSeeder,
|
private readonly superAdminSeeder: SuperAdminSeeder,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ -16,6 +20,8 @@ export class SeederService {
|
|||||||
await this.permissionTypeSeeder.addPermissionTypeDataIfNotFound();
|
await this.permissionTypeSeeder.addPermissionTypeDataIfNotFound();
|
||||||
await this.roleTypeSeeder.addRoleTypeDataIfNotFound();
|
await this.roleTypeSeeder.addRoleTypeDataIfNotFound();
|
||||||
await this.spaceTypeSeeder.addSpaceTypeDataIfNotFound();
|
await this.spaceTypeSeeder.addSpaceTypeDataIfNotFound();
|
||||||
|
await this.regionSeeder.addRegionDataIfNotFound();
|
||||||
|
await this.timeZoneSeeder.addTimeZoneDataIfNotFound();
|
||||||
await this.superAdminSeeder.createSuperAdminIfNotFound();
|
await this.superAdminSeeder.createSuperAdminIfNotFound();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
42
libs/common/src/seed/services/timezone.seeder.ts
Normal file
42
libs/common/src/seed/services/timezone.seeder.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import { TimeZoneRepository } from '@app/common/modules/timezone/repositories';
|
||||||
|
import { allTimeZones } from '@app/common/constants/timezones';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class TimeZoneSeeder {
|
||||||
|
constructor(private readonly timeZoneRepository: TimeZoneRepository) {}
|
||||||
|
|
||||||
|
async addTimeZoneDataIfNotFound(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const existingTimeZones = await this.timeZoneRepository.find();
|
||||||
|
const timeZoneNames = existingTimeZones.map((tz) => tz.cityName);
|
||||||
|
|
||||||
|
const missingTimeZones = allTimeZones.filter(
|
||||||
|
(tz) => !timeZoneNames.includes(tz.name),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (missingTimeZones.length > 0) {
|
||||||
|
await this.addTimeZoneData(missingTimeZones);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error while checking time zone data:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async addTimeZoneData(
|
||||||
|
timeZones: { name: string; offset: string }[],
|
||||||
|
): Promise<void> {
|
||||||
|
try {
|
||||||
|
const timeZoneEntities = timeZones.map((tz) => ({
|
||||||
|
cityName: tz.name,
|
||||||
|
timeZoneOffset: tz.offset,
|
||||||
|
}));
|
||||||
|
|
||||||
|
await this.timeZoneRepository.save(timeZoneEntities);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error while adding time zone data:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user