Skip to content

Commit a184906

Browse files
committed
seed user roles
1 parent 5758400 commit a184906

File tree

8 files changed

+96
-1
lines changed

8 files changed

+96
-1
lines changed

Projects/BooksLibrary/src/app.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ export default class Application {
4444
//Connect with database
4545
await Loader.databaseConnector.init();
4646

47+
//call the seeder
48+
await Loader.seeder.init();
49+
4750
//Set-up middlewares
4851
await this.setupMiddlewares();
4952

@@ -58,6 +61,8 @@ export default class Application {
5861
await this.listen();
5962
} catch (error) {
6063
Logger.instance().log(`An error occurred while starting api service. ${error.message}`);
64+
// eslint-disable-next-line no-console
65+
console.error(error);
6166
}
6267
};
6368

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { RoleDto } from 'domain.types/role/role.dto';
2+
3+
export interface IRoleRepo {
4+
create(entity: any): Promise<RoleDto>;
5+
6+
getById(id: number): Promise<RoleDto>;
7+
8+
getByName(name: string): Promise<RoleDto>;
9+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { RoleDto } from 'domain.types/role/role.dto';
2+
import Role from '../models/role.model';
3+
4+
export class RoleMapper {
5+
static toDto(role: Role): RoleDto {
6+
const dto: RoleDto = {
7+
id: role.id,
8+
RoleName: role.RoleName,
9+
};
10+
11+
return dto;
12+
}
13+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { ApiError } from 'common/api.error';
2+
import { Logger } from 'common/logger';
3+
import { IRoleRepo } from 'database/repository.interfaces/user.role.repo.interface';
4+
import { RoleDto } from 'domain.types/role/role.dto';
5+
import { RoleMapper } from '../mapper/user.role.mapper';
6+
import Role from '../models/role.model';
7+
8+
export class UserRoleRepo implements IRoleRepo {
9+
create = async (roleEntity: any): Promise<RoleDto> => {
10+
try {
11+
const entity = {
12+
RoleName: roleEntity.RoleName,
13+
};
14+
const role: Role = await Role.create(entity);
15+
const dto = RoleMapper.toDto(role);
16+
return dto;
17+
} catch (error) {
18+
Logger.instance().log(error.message);
19+
throw new ApiError(500, error.message);
20+
}
21+
};
22+
23+
getById(id: number): Promise<RoleDto> {
24+
throw new Error('Method not implemented.');
25+
}
26+
27+
getByName(name: string): Promise<RoleDto> {
28+
throw new Error('Method not implemented.');
29+
}
30+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { DependencyContainer } from 'tsyringe';
22
import { DatabaseConnector_Sequelize } from './sequelize/database.connector.sequelize';
33
import { UserRepo } from './sequelize/repositories/user.repo';
4+
import { UserRoleRepo } from './sequelize/repositories/user.role.repo';
45

56
export class SQLInjector {
67
static registerInjections(container: DependencyContainer) {
78
container.register('IDatabaseConnector', DatabaseConnector_Sequelize);
89

910
container.register('IUserRepo', UserRepo);
11+
container.register('IRoleRepo', UserRoleRepo);
1012
}
1113
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export interface RoleDto {
2-
id : number;
2+
id: string;
33
RoleName: string;
44
}

Projects/BooksLibrary/src/startup/loader.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Logger } from '../common/logger';
44
import { Authorizer } from 'auth/authorizer';
55
import { DatabaseConnector } from 'database/database.connector';
66
import { Injector } from './injector';
7+
import { Seeder } from './seeder';
78

89
export class Loader {
910
private static _container: DependencyContainer = container;
@@ -30,6 +31,12 @@ export class Loader {
3031
return Loader._databaseConnector;
3132
}
3233

34+
private static _seeder: Seeder = null;
35+
36+
public static get seeder() {
37+
return Loader._seeder;
38+
}
39+
3340
public static init = async (): Promise<boolean> => {
3441
try {
3542
//Register injections here...
@@ -38,6 +45,8 @@ export class Loader {
3845

3946
Loader._databaseConnector = container.resolve(DatabaseConnector);
4047

48+
Loader._seeder = container.resolve(Seeder);
49+
4150
return true;
4251
} catch (error) {
4352
Logger.instance().log(error.message);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Logger } from 'common/logger';
2+
import { IRoleRepo } from 'database/repository.interfaces/user.role.repo.interface';
3+
import { Roles } from 'domain.types/role/role.types';
4+
import { inject, injectable } from 'tsyringe';
5+
6+
@injectable()
7+
export class Seeder {
8+
constructor(@inject('IRoleRepo') private _roleRepo: IRoleRepo) {}
9+
10+
public init = async (): Promise<void> => {
11+
try {
12+
await this.seedDefaultRoles();
13+
} catch (error) {
14+
Logger.instance().log(error.message);
15+
}
16+
};
17+
18+
seedDefaultRoles = async () => {
19+
await this._roleRepo.create({
20+
RoleName: Roles.Admin,
21+
});
22+
23+
await this._roleRepo.create({
24+
RoleName: Roles.User,
25+
});
26+
};
27+
}

0 commit comments

Comments
 (0)