Refactor Admin module by removing role and permission controllers, services, and DTOs; update imports to utilize Roles module for role and permission entities; adjust AdminService and AdminModule accordingly.
This commit is contained in:
@@ -17,6 +17,7 @@ import { ThrottlerModule } from '@nestjs/throttler';
|
|||||||
import { RestaurantsModule } from './modules/restaurants/restaurants.module';
|
import { RestaurantsModule } from './modules/restaurants/restaurants.module';
|
||||||
import { FoodModule } from './modules/foods/food.module';
|
import { FoodModule } from './modules/foods/food.module';
|
||||||
import { CartModule } from './modules/cart/cart.module';
|
import { CartModule } from './modules/cart/cart.module';
|
||||||
|
import { RolesModule } from './modules/roles/roles.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -47,6 +48,7 @@ import { CartModule } from './modules/cart/cart.module';
|
|||||||
RestaurantsModule,
|
RestaurantsModule,
|
||||||
FoodModule,
|
FoodModule,
|
||||||
CartModule,
|
CartModule,
|
||||||
|
RolesModule,
|
||||||
],
|
],
|
||||||
controllers: [],
|
controllers: [],
|
||||||
providers: [],
|
providers: [],
|
||||||
|
|||||||
@@ -3,25 +3,21 @@ import { AdminService } from './providers/admin.service';
|
|||||||
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
||||||
import { Admin } from './entities/admin.entity';
|
import { Admin } from './entities/admin.entity';
|
||||||
import { JwtModule } from '@nestjs/jwt';
|
import { JwtModule } from '@nestjs/jwt';
|
||||||
import { AdminRepository } from './repositories/rest.repository';
|
import { AdminRepository } from './repositories/admin.repository';
|
||||||
import { Role } from './entities/role.entity';
|
import { Role } from '../roles/entities/role.entity';
|
||||||
import { Permission } from './entities/permission.entity';
|
import { Permission } from '../roles/entities/permission.entity';
|
||||||
import { RolePermission } from './entities/rolePermission.entity';
|
import { RolePermission } from '../roles/entities/rolePermission.entity';
|
||||||
import { AdminController } from './controllers/admin.controller';
|
import { AdminController } from './controllers/admin.controller';
|
||||||
import { RoleService } from './providers/role.service';
|
|
||||||
import { RoleController } from './controllers/role.controller';
|
|
||||||
import { PermissionService } from './providers/permission.service';
|
|
||||||
import { PermissionController } from './controllers/permission.controller';
|
|
||||||
import { UtilsModule } from '../utils/utils.module';
|
import { UtilsModule } from '../utils/utils.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
providers: [AdminService, AdminRepository, RoleService, PermissionService],
|
providers: [AdminService, AdminRepository],
|
||||||
controllers: [AdminController, RoleController, PermissionController],
|
controllers: [AdminController],
|
||||||
imports: [
|
imports: [
|
||||||
MikroOrmModule.forFeature([Admin, Role, Permission, RolePermission]),
|
MikroOrmModule.forFeature([Admin, Role, Permission, RolePermission]),
|
||||||
JwtModule,
|
JwtModule,
|
||||||
UtilsModule,
|
UtilsModule,
|
||||||
],
|
],
|
||||||
exports: [AdminService, AdminRepository, RoleService, PermissionService],
|
exports: [AdminService, AdminRepository],
|
||||||
})
|
})
|
||||||
export class AdminModule {}
|
export class AdminModule {}
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
||||||
import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
|
||||||
import { PermissionService } from '../providers/permission.service';
|
|
||||||
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
|
||||||
|
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@ApiBearerAuth()
|
|
||||||
@ApiTags('admin/permissions')
|
|
||||||
@Controller('admin/permissions')
|
|
||||||
export class PermissionController {
|
|
||||||
constructor(private readonly permissionService: PermissionService) {}
|
|
||||||
|
|
||||||
@Get()
|
|
||||||
@ApiOperation({ summary: 'Get all permissions' })
|
|
||||||
@ApiResponse({ status: 200, description: 'Permissions retrieved successfully' })
|
|
||||||
async findAll() {
|
|
||||||
return this.permissionService.findAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Entity, ManyToOne, Property } from '@mikro-orm/core';
|
import { Entity, ManyToOne, Property } from '@mikro-orm/core';
|
||||||
import { BaseEntity } from '../../../common/entities/base.entity';
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||||
import { Role } from './role.entity';
|
import { Role } from '../../roles/entities/role.entity';
|
||||||
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
||||||
|
|
||||||
@Entity({ tableName: 'admins' })
|
@Entity({ tableName: 'admins' })
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
|
|||||||
import { InjectRepository } from '@mikro-orm/nestjs';
|
import { InjectRepository } from '@mikro-orm/nestjs';
|
||||||
import { EntityRepository } from '@mikro-orm/core';
|
import { EntityRepository } from '@mikro-orm/core';
|
||||||
import { Admin } from '../entities/admin.entity';
|
import { Admin } from '../entities/admin.entity';
|
||||||
import { Role } from '../entities/role.entity';
|
import { Role } from '../../roles/entities/role.entity';
|
||||||
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
||||||
import { EntityManager } from '@mikro-orm/postgresql';
|
import { EntityManager } from '@mikro-orm/postgresql';
|
||||||
import { CacheService } from '../../utils/cache.service';
|
import { CacheService } from '../../utils/cache.service';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { randomInt } from 'crypto';
|
|||||||
import { TokensService } from './tokens.service';
|
import { TokensService } from './tokens.service';
|
||||||
import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository';
|
import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository';
|
||||||
import { AuthMessage, RestMessage } from 'src/common/enums/message.enum';
|
import { AuthMessage, RestMessage } from 'src/common/enums/message.enum';
|
||||||
import { AdminRepository } from 'src/modules/admin/repositories/rest.repository';
|
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
|
||||||
import { AdminLoginTransformer } from '../transformers/admin-login.transformer';
|
import { AdminLoginTransformer } from '../transformers/admin-login.transformer';
|
||||||
import { UserLoginTransformer } from '../transformers/user-login.transformer';
|
import { UserLoginTransformer } from '../transformers/user-login.transformer';
|
||||||
|
|
||||||
|
|||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
import { Entity, Property, Unique, ManyToMany, Collection } from '@mikro-orm/core';
|
||||||
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||||
|
import { Role } from './role.entity';
|
||||||
|
|
||||||
|
@Entity({ tableName: 'permissions' })
|
||||||
|
export class Permission extends BaseEntity {
|
||||||
|
@Property()
|
||||||
|
@Unique()
|
||||||
|
name!: string;
|
||||||
|
|
||||||
|
@Property()
|
||||||
|
title!: string;
|
||||||
|
|
||||||
|
@ManyToMany({ entity: () => Role, mappedBy: r => r.permissions })
|
||||||
|
roles = new Collection<Role>(this);
|
||||||
|
}
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
// role.entity.ts
|
||||||
|
import { Collection, Entity, ManyToMany, OneToMany, ManyToOne, Property } from '@mikro-orm/core';
|
||||||
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||||
|
import { Permission } from './permission.entity';
|
||||||
|
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
||||||
|
import { RolePermission } from './rolePermission.entity';
|
||||||
|
|
||||||
|
@Entity({ tableName: 'roles' })
|
||||||
|
export class Role extends BaseEntity {
|
||||||
|
@Property()
|
||||||
|
name!: string;
|
||||||
|
|
||||||
|
@Property()
|
||||||
|
title!: string;
|
||||||
|
|
||||||
|
@ManyToMany({ entity: () => Permission, pivotEntity: () => RolePermission, inversedBy: p => p.roles })
|
||||||
|
permissions = new Collection<Permission>(this);
|
||||||
|
|
||||||
|
@ManyToOne(() => Restaurant, { nullable: true })
|
||||||
|
restaurant?: Restaurant;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// role-permission.entity.ts (pivot)
|
||||||
|
import { Entity, ManyToOne } from '@mikro-orm/core';
|
||||||
|
import { Role } from './role.entity';
|
||||||
|
import { Permission } from './permission.entity';
|
||||||
|
|
||||||
|
@Entity({ tableName: 'role_permissions' })
|
||||||
|
export class RolePermission {
|
||||||
|
// دو ManyToOne دقیقاً؛ هر کدام میتونن primary: true باشند برای composite PK
|
||||||
|
@ManyToOne(() => Role, { primary: true })
|
||||||
|
role!: Role;
|
||||||
|
|
||||||
|
@ManyToOne(() => Permission, { primary: true })
|
||||||
|
permission!: Permission;
|
||||||
|
|
||||||
|
// **نکته:** اینجا *فقط* همین دو خصوصیت کافی است —
|
||||||
|
// از تعریف جداگانهی roleId / permissionId با @PrimaryKey خودداری کن مگر بخوای نام/نوع ستون را سفارشی کنی.
|
||||||
|
}
|
||||||
+1
-2
@@ -4,7 +4,7 @@ import { EntityRepository } from '@mikro-orm/core';
|
|||||||
import { Permission } from '../entities/permission.entity';
|
import { Permission } from '../entities/permission.entity';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PermissionService {
|
export class PermissionsService {
|
||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(Permission)
|
@InjectRepository(Permission)
|
||||||
private readonly permissionRepository: EntityRepository<Permission>,
|
private readonly permissionRepository: EntityRepository<Permission>,
|
||||||
@@ -15,4 +15,3 @@ export class PermissionService {
|
|||||||
return permissions;
|
return permissions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-1
@@ -10,7 +10,7 @@ import { UpdateRoleDto } from '../dto/update-role.dto';
|
|||||||
import { FindRolesDto } from '../dto/find-roles.dto';
|
import { FindRolesDto } from '../dto/find-roles.dto';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RoleService {
|
export class RolesService {
|
||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(Role)
|
@InjectRepository(Role)
|
||||||
private readonly roleRepository: EntityRepository<Role>,
|
private readonly roleRepository: EntityRepository<Role>,
|
||||||
+26
-15
@@ -1,18 +1,36 @@
|
|||||||
import { Controller, Get, Post, Body, Param, Patch, Delete, Query, UseGuards } from '@nestjs/common';
|
import { Controller, Get, Post, Body, Param, Patch, Delete, Query, UseGuards } from '@nestjs/common';
|
||||||
import { ApiTags, ApiOperation, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
import { ApiTags, ApiOperation, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
||||||
import { RoleService } from '../providers/role.service';
|
import { RolesService } from './providers/roles.service';
|
||||||
import { CreateRoleDto } from '../dto/create-role.dto';
|
import { PermissionsService } from './providers/permissions.service';
|
||||||
import { UpdateRoleDto } from '../dto/update-role.dto';
|
import { CreateRoleDto } from './dto/create-role.dto';
|
||||||
import { FindRolesDto } from '../dto/find-roles.dto';
|
import { UpdateRoleDto } from './dto/update-role.dto';
|
||||||
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
import { FindRolesDto } from './dto/find-roles.dto';
|
||||||
import { Permissions } from 'src/modules/auth/decorators/permissions.decorator';
|
import { AdminAuthGuard } from '../auth/guards/adminAuth.guard';
|
||||||
|
import { Permissions } from '../auth/decorators/permissions.decorator';
|
||||||
|
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@ApiBearerAuth()
|
@ApiBearerAuth()
|
||||||
@ApiTags('admin/roles')
|
@ApiTags('admin/roles')
|
||||||
@Controller('admin/roles')
|
@Controller('admin/roles')
|
||||||
export class RoleController {
|
export class RolesController {
|
||||||
constructor(private readonly roleService: RoleService) {}
|
constructor(
|
||||||
|
private readonly roleService: RolesService,
|
||||||
|
private readonly permissionService: PermissionsService,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@ApiOperation({ summary: 'Get all roles with pagination and filters' })
|
||||||
|
@ApiResponse({ status: 200, description: 'Roles retrieved successfully' })
|
||||||
|
async findAll(@Query() dto: FindRolesDto) {
|
||||||
|
return this.roleService.findAll(dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('permissions')
|
||||||
|
@ApiOperation({ summary: 'Get all permissions' })
|
||||||
|
@ApiResponse({ status: 200, description: 'Permissions retrieved successfully' })
|
||||||
|
async findAllPermissions() {
|
||||||
|
return this.permissionService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
@Permissions('create-role')
|
@Permissions('create-role')
|
||||||
@Post()
|
@Post()
|
||||||
@@ -23,13 +41,6 @@ export class RoleController {
|
|||||||
return this.roleService.create(dto);
|
return this.roleService.create(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get()
|
|
||||||
@ApiOperation({ summary: 'Get all roles with pagination and filters' })
|
|
||||||
@ApiResponse({ status: 200, description: 'Roles retrieved successfully' })
|
|
||||||
async findAll(@Query() dto: FindRolesDto) {
|
|
||||||
return this.roleService.findAll(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Get(':id')
|
@Get(':id')
|
||||||
@ApiOperation({ summary: 'Get a specific role by ID' })
|
@ApiOperation({ summary: 'Get a specific role by ID' })
|
||||||
@ApiResponse({ status: 200, description: 'Role retrieved successfully' })
|
@ApiResponse({ status: 200, description: 'Role retrieved successfully' })
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
||||||
|
import { RolesService } from './providers/roles.service';
|
||||||
|
import { RolesController } from './roles.controller';
|
||||||
|
import { PermissionsService } from './providers/permissions.service';
|
||||||
|
import { Role } from './entities/role.entity';
|
||||||
|
import { Permission } from './entities/permission.entity';
|
||||||
|
import { RolePermission } from './entities/rolePermission.entity';
|
||||||
|
import { JwtModule } from '@nestjs/jwt';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [
|
||||||
|
MikroOrmModule.forFeature([Role, Permission, RolePermission]),
|
||||||
|
JwtModule,
|
||||||
|
],
|
||||||
|
controllers: [RolesController],
|
||||||
|
providers: [RolesService, PermissionsService],
|
||||||
|
exports: [RolesService, PermissionsService],
|
||||||
|
})
|
||||||
|
export class RolesModule {}
|
||||||
@@ -3,8 +3,8 @@ import { Seeder } from '@mikro-orm/seeder';
|
|||||||
import { Category } from '../modules/foods/entities/category.entity';
|
import { Category } from '../modules/foods/entities/category.entity';
|
||||||
import { Food } from '../modules/foods/entities/food.entity';
|
import { Food } from '../modules/foods/entities/food.entity';
|
||||||
import { Admin } from '../modules/admin/entities/admin.entity';
|
import { Admin } from '../modules/admin/entities/admin.entity';
|
||||||
import { Permission as PermissionEntity } from '../modules/admin/entities/permission.entity';
|
import { Permission as PermissionEntity } from '../modules/roles/entities/permission.entity';
|
||||||
import { Role } from '../modules/admin/entities/role.entity';
|
import { Role } from '../modules/roles/entities/role.entity';
|
||||||
import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
|
import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
|
||||||
import { User } from '../modules/users/entities/user.entity';
|
import { User } from '../modules/users/entities/user.entity';
|
||||||
import { Permission, PermissionTitles } from '../common/enums/permission.enum';
|
import { Permission, PermissionTitles } from '../common/enums/permission.enum';
|
||||||
|
|||||||
Reference in New Issue
Block a user