Skip to content

Commit 000cd5d

Browse files
committed
bugfix: seeder seeded roles multiple times on app start
1 parent 7dc2bcf commit 000cd5d

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Projects/BooksLibrary/src/database/repository.interfaces/user.role.repo.interface.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { RoleDto } from 'domain.types/role/role.dto';
22

33
export interface IRoleRepo {
4+
search(): Promise<RoleDto[]>;
5+
46
create(entity: any): Promise<RoleDto>;
57

68
getById(id: number): Promise<RoleDto>;

Projects/BooksLibrary/src/database/sql/sequelize/repositories/user.role.repo.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,21 @@ import { Logger } from 'common/logger';
33
import { IRoleRepo } from 'database/repository.interfaces/user.role.repo.interface';
44
import { RoleDto } from 'domain.types/role/role.dto';
55
import { Roles } from 'domain.types/role/role.types';
6-
import { Op } from 'sequelize/types';
76
import { RoleMapper } from '../mapper/user.role.mapper';
87
import Role from '../models/role.model';
98

109
export class UserRoleRepo implements IRoleRepo {
10+
search = async (): Promise<RoleDto[]> => {
11+
try {
12+
const role: Role[] = await Role.findAll();
13+
const dto: RoleDto[] = role.map((userRole) => RoleMapper.toDto(userRole));
14+
return dto;
15+
} catch (error) {
16+
Logger.instance().log(error.message);
17+
throw new ApiError(500, error.message);
18+
}
19+
};
20+
1121
create = async (roleEntity: any): Promise<RoleDto> => {
1222
try {
1323
const entity = {

Projects/BooksLibrary/src/startup/seeder.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Logger } from 'common/logger';
22
import { IRoleRepo } from 'database/repository.interfaces/user.role.repo.interface';
3+
import { RoleDto } from 'domain.types/role/role.dto';
34
import { Roles } from 'domain.types/role/role.types';
45
import { inject, injectable } from 'tsyringe';
56

@@ -16,6 +17,11 @@ export class Seeder {
1617
};
1718

1819
seedDefaultRoles = async () => {
20+
const existing: RoleDto[] = await this._roleRepo.search();
21+
if (existing.length > 0) {
22+
return;
23+
}
24+
1925
await this._roleRepo.create({
2026
RoleName: Roles.Admin,
2127
});

0 commit comments

Comments
 (0)