Add UserRoleEntity and related modules for user role management

This commit is contained in:
faris Aljohari
2024-05-06 18:33:49 +03:00
parent 1b41199359
commit 7d6964208c
9 changed files with 77 additions and 2 deletions

View File

@ -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<RoleTypeDto> {
@ -10,7 +11,12 @@ export class RoleTypeEntity extends AbstractEntity<RoleTypeDto> {
enum: Object.values(RoleType),
})
type: string;
@OneToMany(() => UserRoleEntity, (role) => role.roleType, {
nullable: true,
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
})
role: UserRoleEntity[];
constructor(partial: Partial<RoleTypeEntity>) {
super();
Object.assign(this, partial);

View File

@ -0,0 +1 @@
export * from './user.role.dto';

View File

@ -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;
}

View File

@ -0,0 +1 @@
export * from './user.role.entity';

View File

@ -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<UserRoleDto> {
@ManyToOne(() => UserEntity, (user) => user.role, {
nullable: false,
})
user: UserEntity;
@ManyToOne(() => RoleTypeEntity, (roleType) => roleType.role, {
nullable: false,
})
roleType: RoleTypeEntity;
constructor(partial: Partial<UserRoleEntity>) {
super();
Object.assign(this, partial);
}
}

View File

@ -0,0 +1 @@
export * from './user.role.repository';

View File

@ -0,0 +1,10 @@
import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { UserRoleEntity } from '../entities';
@Injectable()
export class UserRoleRepository extends Repository<UserRoleEntity> {
constructor(private dataSource: DataSource) {
super(UserRoleEntity, dataSource.createEntityManager());
}
}

View File

@ -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 {}

View File

@ -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<UserDto> {
@ -57,6 +58,13 @@ export class UserEntity extends AbstractEntity<UserDto> {
(userPermission) => userPermission.user,
)
userPermission: DeviceUserPermissionEntity[];
@OneToMany(() => UserRoleEntity, (role) => role.user, {
nullable: true,
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
})
role: UserRoleEntity[];
constructor(partial: Partial<UserEntity>) {
super();
Object.assign(this, partial);