diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index d420902..6086192 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -1,7 +1,3 @@ -/** - * Permission names enum - * All permission names used in the system should be defined here - */ export enum Permission { MANAGE_PRODUCTS = 'manage_products', @@ -9,28 +5,23 @@ export enum Permission { // Order Management VIEW_ORDERS = 'view_orders', + CREATE_ORDER = 'create_order', + UPDATE_ORDER = 'update_order', ASSIGN_DESIGNER = 'assign_designer', - MANAGE_ORDERS = 'manage_orders', + CHANGE_ORDER_STATUS = 'change_order_status', + REMOVE_ORDER = 'remove_order', // User & Admin Management MANAGE_ADMINS = 'manage_admins', - MANAGE_USERS = 'manage_users', - - // Reports & Finances - VIEW_REPORTS = 'view_reports', - - - // Role Management MANAGE_ROLES = 'manage_roles', + MANAGE_USERS = 'manage_users', MANAGE_PAYMENTS = 'manage_payments', MANAGE_SETTINGS = 'manage_settings', - MANAGE_REPORTS = 'manage_reports', - MANAGE_CONTACTS = 'manage_contacts', } /** @@ -38,17 +29,20 @@ export enum Permission { * Maps permission names to their Farsi titles */ export const PermissionTitles: Record = { - [Permission.MANAGE_PRODUCTS]: 'مدیریت غذاها', + [Permission.MANAGE_PRODUCTS]: 'مدیریت محصولات', [Permission.MANAGE_CATEGORIES]: 'مدیریت دسته‌بندی‌ها', - [Permission.MANAGE_ORDERS]: 'مدیریت سفارشات', + + [Permission.CREATE_ORDER]: 'ایجاد سفارش جدید', + [Permission.UPDATE_ORDER]: 'ویرایش سفارش ', + [Permission.VIEW_ORDERS]: "مشاهده سفارش ها", + [Permission.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش", + [Permission.CHANGE_ORDER_STATUS]: "تغییر وضعیت سفارش", + [Permission.REMOVE_ORDER]: "حذف سفارش", + [Permission.MANAGE_ADMINS]: 'مدیریت مدیران', [Permission.MANAGE_USERS]: 'مدیریت کاربران', - [Permission.VIEW_REPORTS]: 'مشاهده گزارشات', [Permission.MANAGE_ROLES]: 'مدیریت نقش‌ها', [Permission.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', [Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات', - [Permission.MANAGE_REPORTS]: 'مدیریت گزارشات', - [Permission.MANAGE_CONTACTS]: 'مدیریت تماس‌های کاربران', - [Permission.VIEW_ORDERS]: "", - [Permission.ASSIGN_DESIGNER]: "" + }; diff --git a/src/modules/admin/controllers/admin.controller.ts b/src/modules/admin/controllers/admin.controller.ts index 3cbabb5..ba44b64 100644 --- a/src/modules/admin/controllers/admin.controller.ts +++ b/src/modules/admin/controllers/admin.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Post, Body, HttpCode, HttpStatus, Get, UseGuards, Patch, Param, Delete } from '@nestjs/common'; +import { Controller, Post, Body, Get, UseGuards, Patch, Param, Delete } from '@nestjs/common'; import { AdminService } from '../providers/admin.service'; import { CreateAdminDto } from '../dto/create-admin.dto'; import { UpdateAdminDto } from '../dto/update-admin.dto'; @@ -10,26 +10,22 @@ import { Permission } from 'src/common/enums/permission.enum'; import { Permissions } from 'src/common/decorators/permissions.decorator'; // TODO : if admin deleted then recreated it must be doable -@ApiBearerAuth() -@ApiTags('admin') @Controller() +@ApiTags('admin') +@UseGuards(AdminAuthGuard) +@ApiBearerAuth() +@Permissions(Permission.MANAGE_ADMINS) export class AdminController { constructor(private readonly adminService: AdminService) { } @Post('admin/admin') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) - @HttpCode(HttpStatus.CREATED) @ApiOperation({ summary: 'Create a new admin' }) - @ApiBody({ type: CreateAdminDto }) async create(@Body() dto: CreateAdminDto,) { const admin = await this.adminService.create(dto); return admin; } @Get('admin/admins') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) @ApiOperation({ summary: 'admin' }) async getAll() { const admin = await this.adminService.findAll(); @@ -37,8 +33,6 @@ export class AdminController { } @Get('admin/admins/me') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) @ApiOperation({ summary: 'admin' }) async getMe(@AdminId() adminId: string,) { const admin = await this.adminService.findById(adminId,); @@ -47,8 +41,6 @@ export class AdminController { @Patch('admin/admins/:adminId') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) @ApiOperation({ summary: 'Update an admin' }) @ApiParam({ name: 'adminId', description: 'Admin ID' }) @ApiBody({ type: UpdateAdminDto }) @@ -57,8 +49,6 @@ export class AdminController { } @Get('admin/admins/:adminId') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) @ApiOperation({ summary: 'Get an admin by ID' }) @ApiParam({ name: 'id', description: 'Admin ID' }) getById(@Param('adminId') adminId: string,): Promise { @@ -66,8 +56,6 @@ export class AdminController { } @Delete('admin/admins/:adminId') - @UseGuards(AdminAuthGuard) - @Permissions(Permission.MANAGE_ADMINS) @ApiOperation({ summary: 'Delete an admin by ID' }) @ApiParam({ name: 'id', description: 'Admin ID' }) deleteById(@Param('adminId') adminId: string,): Promise { diff --git a/src/modules/order/controllers/order.controller.ts b/src/modules/order/controllers/order.controller.ts index dc8186c..4af5c4a 100644 --- a/src/modules/order/controllers/order.controller.ts +++ b/src/modules/order/controllers/order.controller.ts @@ -144,7 +144,7 @@ export class OrderController { @Post('admin/orders/:orderId/invoice') @UseGuards(AdminAuthGuard) @ApiOperation({ summary: 'Create Order invoice ' }) - createInvoice(@Param('orderId') orderId: string, @Body() dto: UpdateOrderAsAdminDto) { + createInvoice(@Param('orderId') orderId: string) { return this.orderService.createInvoice(orderId); } @@ -166,6 +166,7 @@ export class OrderController { return this.orderService.addOrderItemAsAdmin(orderId, body); } + @Patch('admin/orders/:id/item/:itemId') @UseGuards(AdminAuthGuard) @ApiOperation({ summary: 'Update order item' }) diff --git a/src/modules/order/providers/order.service.ts b/src/modules/order/providers/order.service.ts index 36be30a..af3a625 100644 --- a/src/modules/order/providers/order.service.ts +++ b/src/modules/order/providers/order.service.ts @@ -10,9 +10,7 @@ import { } from '../dto/create-order.dto'; import { UserService } from 'src/modules/user/providers/user.service'; import { - CreateOrderItem, - CreateOrder, OrderStatusEnum, - // UpdateOrderItem, + OrderStatusEnum, CreateOrderWithItems, CreateOrderItemPopulated, UpdateOrder, @@ -28,7 +26,6 @@ import { Order } from '../entities/order.entity'; import { PaymentRepository } from 'src/modules/payment/repositories/payment.repository'; import { UpdateOrderItemDtoAsAdmin, UpdateOrderItemDtoAsUser } from '../dto/update-order-item.dto'; import { Admin } from 'src/modules/admin/entities/admin.entity'; -import { Product } from 'src/modules/product/entities/product.entity'; import { AdminService } from 'src/modules/admin/providers/admin.service'; import { OrderItem } from '../entities/order-item.entity'; import { UpdateOrderAsAdminDto } from '../dto/update-order.dto'; @@ -65,7 +62,7 @@ export class OrderService { async createOrderAsUser(userId: string, dto: CreateOrderAsUSerDto) { const order = await this.createOrder({ ...dto, userId, status: OrderStatusEnum.CREATED }) - this.logger.log("Order created as admin") + this.logger.log("Order created as user") return order }