From 7d6964208cedc7f79c2ad7080eeae0ea6c1af03b Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Mon, 6 May 2024 18:33:49 +0300 Subject: [PATCH] Add UserRoleEntity and related modules for user role management --- .../role-type/entities/role.type.entity.ts | 10 ++++++-- .../src/modules/user-role/dtos/index.ts | 1 + .../modules/user-role/dtos/user.role.dto.ts | 15 ++++++++++++ .../src/modules/user-role/entities/index.ts | 1 + .../user-role/entities/user.role.entity.ts | 23 +++++++++++++++++++ .../modules/user-role/repositories/index.ts | 1 + .../repositories/user.role.repository.ts | 10 ++++++++ .../user-role/user.role.repository.module.ts | 10 ++++++++ .../src/modules/user/entities/user.entity.ts | 8 +++++++ 9 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 libs/common/src/modules/user-role/dtos/index.ts create mode 100644 libs/common/src/modules/user-role/dtos/user.role.dto.ts create mode 100644 libs/common/src/modules/user-role/entities/index.ts create mode 100644 libs/common/src/modules/user-role/entities/user.role.entity.ts create mode 100644 libs/common/src/modules/user-role/repositories/index.ts create mode 100644 libs/common/src/modules/user-role/repositories/user.role.repository.ts create mode 100644 libs/common/src/modules/user-role/user.role.repository.module.ts diff --git a/libs/common/src/modules/role-type/entities/role.type.entity.ts b/libs/common/src/modules/role-type/entities/role.type.entity.ts index 974365c..c65db72 100644 --- a/libs/common/src/modules/role-type/entities/role.type.entity.ts +++ b/libs/common/src/modules/role-type/entities/role.type.entity.ts @@ -1,7 +1,8 @@ -import { Column, Entity } from 'typeorm'; +import { Column, Entity, OneToMany } from 'typeorm'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { RoleTypeDto } from '../dtos/role.type.dto'; import { RoleType } from '@app/common/constants/role.type.enum'; +import { UserRoleEntity } from '../../user-role/entities'; @Entity({ name: 'role-type' }) export class RoleTypeEntity extends AbstractEntity { @@ -10,7 +11,12 @@ export class RoleTypeEntity extends AbstractEntity { enum: Object.values(RoleType), }) type: string; - + @OneToMany(() => UserRoleEntity, (role) => role.roleType, { + nullable: true, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + role: UserRoleEntity[]; constructor(partial: Partial) { super(); Object.assign(this, partial); diff --git a/libs/common/src/modules/user-role/dtos/index.ts b/libs/common/src/modules/user-role/dtos/index.ts new file mode 100644 index 0000000..7879674 --- /dev/null +++ b/libs/common/src/modules/user-role/dtos/index.ts @@ -0,0 +1 @@ +export * from './user.role.dto'; diff --git a/libs/common/src/modules/user-role/dtos/user.role.dto.ts b/libs/common/src/modules/user-role/dtos/user.role.dto.ts new file mode 100644 index 0000000..3ff4dab --- /dev/null +++ b/libs/common/src/modules/user-role/dtos/user.role.dto.ts @@ -0,0 +1,15 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class UserRoleDto { + @IsString() + @IsNotEmpty() + public uuid: string; + + @IsString() + @IsNotEmpty() + public userUuid: string; + + @IsString() + @IsNotEmpty() + public roleTypeUuid: string; +} diff --git a/libs/common/src/modules/user-role/entities/index.ts b/libs/common/src/modules/user-role/entities/index.ts new file mode 100644 index 0000000..b6f3bd9 --- /dev/null +++ b/libs/common/src/modules/user-role/entities/index.ts @@ -0,0 +1 @@ +export * from './user.role.entity'; diff --git a/libs/common/src/modules/user-role/entities/user.role.entity.ts b/libs/common/src/modules/user-role/entities/user.role.entity.ts new file mode 100644 index 0000000..e375723 --- /dev/null +++ b/libs/common/src/modules/user-role/entities/user.role.entity.ts @@ -0,0 +1,23 @@ +import { Entity, ManyToOne } from 'typeorm'; +import { AbstractEntity } from '../../abstract/entities/abstract.entity'; +import { UserRoleDto } from '../dtos'; +import { UserEntity } from '../../user/entities'; +import { RoleTypeEntity } from '../../role-type/entities'; + +@Entity({ name: 'user-role' }) +export class UserRoleEntity extends AbstractEntity { + @ManyToOne(() => UserEntity, (user) => user.role, { + nullable: false, + }) + user: UserEntity; + + @ManyToOne(() => RoleTypeEntity, (roleType) => roleType.role, { + nullable: false, + }) + roleType: RoleTypeEntity; + + constructor(partial: Partial) { + super(); + Object.assign(this, partial); + } +} diff --git a/libs/common/src/modules/user-role/repositories/index.ts b/libs/common/src/modules/user-role/repositories/index.ts new file mode 100644 index 0000000..abf7247 --- /dev/null +++ b/libs/common/src/modules/user-role/repositories/index.ts @@ -0,0 +1 @@ +export * from './user.role.repository'; diff --git a/libs/common/src/modules/user-role/repositories/user.role.repository.ts b/libs/common/src/modules/user-role/repositories/user.role.repository.ts new file mode 100644 index 0000000..9bc9a24 --- /dev/null +++ b/libs/common/src/modules/user-role/repositories/user.role.repository.ts @@ -0,0 +1,10 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { UserRoleEntity } from '../entities'; + +@Injectable() +export class UserRoleRepository extends Repository { + constructor(private dataSource: DataSource) { + super(UserRoleEntity, dataSource.createEntityManager()); + } +} diff --git a/libs/common/src/modules/user-role/user.role.repository.module.ts b/libs/common/src/modules/user-role/user.role.repository.module.ts new file mode 100644 index 0000000..540787e --- /dev/null +++ b/libs/common/src/modules/user-role/user.role.repository.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { UserRoleEntity } from './entities'; +@Module({ + providers: [], + exports: [], + controllers: [], + imports: [TypeOrmModule.forFeature([UserRoleEntity])], +}) +export class UserRoleRepositoryModule {} diff --git a/libs/common/src/modules/user/entities/user.entity.ts b/libs/common/src/modules/user/entities/user.entity.ts index 4268ae8..ffe402c 100644 --- a/libs/common/src/modules/user/entities/user.entity.ts +++ b/libs/common/src/modules/user/entities/user.entity.ts @@ -3,6 +3,7 @@ import { Column, Entity, OneToMany } from 'typeorm'; import { UserDto } from '../dtos'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { UserSpaceEntity } from '../../user-space/entities'; +import { UserRoleEntity } from '../../user-role/entities'; @Entity({ name: 'user' }) export class UserEntity extends AbstractEntity { @@ -57,6 +58,13 @@ export class UserEntity extends AbstractEntity { (userPermission) => userPermission.user, ) userPermission: DeviceUserPermissionEntity[]; + + @OneToMany(() => UserRoleEntity, (role) => role.user, { + nullable: true, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + role: UserRoleEntity[]; constructor(partial: Partial) { super(); Object.assign(this, partial);