diff --git a/src/modules/admin/entities/admin.entity.ts b/src/modules/admin/entities/admin.entity.ts index a9d8a54..e0e4a8d 100644 --- a/src/modules/admin/entities/admin.entity.ts +++ b/src/modules/admin/entities/admin.entity.ts @@ -22,10 +22,12 @@ export class Admin extends BaseEntity { this._phone = normalizePhone(value); } - // Add the new role property @OneToMany(() => AdminRole, adminRole => adminRole.admin, { cascade: [Cascade.ALL], orphanRemoval: true, }) roles = new Collection(this); + + /** Restaurant-specific role (set when fetched in restaurant context, not persisted) */ + role?: AdminRole; } diff --git a/src/modules/admin/providers/admin.service.ts b/src/modules/admin/providers/admin.service.ts index dcda64d..74e23d8 100644 --- a/src/modules/admin/providers/admin.service.ts +++ b/src/modules/admin/providers/admin.service.ts @@ -20,7 +20,7 @@ export class AdminService { private readonly adminRoleRepository: EntityRepository, private readonly em: EntityManager, private readonly cacheService: CacheService, - ) {} + ) { } async findByPhone(phone: string): Promise { const normalizedPhone = normalizePhone(phone); @@ -30,8 +30,11 @@ export class AdminService { async findById(adminId: string, restId: string): Promise { const admin = await this.adminRepository.findOne( { id: adminId, roles: { restaurant: { id: restId } } }, - { populate: ['roles', 'roles.role'] }, + { populate: ['roles', 'roles.role', 'roles.restaurant'] }, ); + if (!admin) return null; + const adminRole = admin.roles.getItems().find(r => r.restaurant?.id === restId); + admin.role = adminRole; return admin; } diff --git a/src/modules/admin/transformers/admin-detail.transformer.ts b/src/modules/admin/transformers/admin-detail.transformer.ts index 84704a0..6590afc 100644 --- a/src/modules/admin/transformers/admin-detail.transformer.ts +++ b/src/modules/admin/transformers/admin-detail.transformer.ts @@ -23,8 +23,9 @@ export class AdminDetailTransformer { return null; } - // Extract role information - const role = admin.roles.getItems().find(r => r.role)?.role; + // Extract role information (prefer restaurant-specific role when set) + const adminRole = admin.role ?? admin.roles.getItems().find(r => r.role); + const role = adminRole?.role; if (!role) { return null; } @@ -39,9 +40,9 @@ export class AdminDetailTransformer { }, permissions: role.permissions.getItems().map(p => p.name) || [], restaurant: { - id: role.restaurant?.id || '', - name: role.restaurant?.name || '', - slug: role.restaurant?.slug || '', + id: adminRole?.restaurant?.id || role.restaurant?.id || '', + name: adminRole?.restaurant?.name || role.restaurant?.name || '', + slug: adminRole?.restaurant?.slug || role.restaurant?.slug || '', }, }; }