import { level } from 'winston'; import { Injectable } from '@nestjs/common'; import { UserRoleMappingRepository } from '../repository/user-role-mapping.repository'; import { UserRoleMapping } from '../entity/user-role-mapping.entity'; @Injectable() export class UserRoleMappingService { constructor( private readonly userRoleMappingRepository: UserRoleMappingRepository, ) {} async assignUserRole(userRoleMapping: UserRoleMapping) { const existing = await this.userRoleMappingRepository.findByUserIdAndRoleId( userRoleMapping.user_id, userRoleMapping.role_id, userRoleMapping.appcode, userRoleMapping.level_id, userRoleMapping.level_type, ); if (!existing) { return await this.userRoleMappingRepository.save(userRoleMapping); } } async updateAssignedRole(userRoleMapping: UserRoleMapping) { // 1. If ID is provided, try to fetch existing mapping by ID if (userRoleMapping.id) { const existing = await this.userRoleMappingRepository.findByUSRId( userRoleMapping.id, ); if (existing) { existing.appcode = userRoleMapping.appcode; existing.level_id = userRoleMapping.level_id; existing.level_type = userRoleMapping.level_type; existing.role_id = userRoleMapping.role_id; return await this.userRoleMappingRepository.save(existing); } } // 2. Check if a similar mapping already exists (same user-role-level-app) const duplicate = await this.userRoleMappingRepository.findByUserIdAndRoleId( userRoleMapping.user_id, userRoleMapping.role_id, userRoleMapping.appcode, userRoleMapping.level_id, userRoleMapping.level_type, ); if (duplicate) { return duplicate; // or null, depending on how you want to handle it } return await this.userRoleMappingRepository.save(userRoleMapping); } async findByUserId(userId: number): Promise { return await this.userRoleMappingRepository.findByUserId(userId); } async deleteByUserId( userId: number, levelType?: string, levelId?, ): Promise { await this.userRoleMappingRepository.deleteByUserId( userId, levelType, levelId, ); } async getUserByIdAndAppCode( userId: number, appCode: string, ): Promise { return await this.userRoleMappingRepository.findByUserIdAndAppCode( userId, appCode, ); } async getUserByIdAppCodeAndLevel( userId: number, appCode: string, levelType: string, levelId: string, ): Promise { return await this.userRoleMappingRepository.findByUserIdAndAppCodeAndLevel( userId, appCode, levelType, levelId, ); } }