import { Controller, Get, UseGuards, Param, Put, Post, Body, Delete, Query } from '@nestjs/common'; import { AdminService } from './admin.service'; import { JwtAuthGuard } from '../auth/jwt-auth.guard'; import { ApiTags, ApiBearerAuth, ApiOperation, ApiQuery } from '@nestjs/swagger'; @ApiTags('Admin - پنل مدیریت') @ApiBearerAuth() @Controller('admin') export class AdminController { constructor(private readonly adminService: AdminService) {} @UseGuards(JwtAuthGuard) @Get('dashboard/stats') @ApiOperation({ summary: 'دریافت آمار کلی داشبورد' }) async getDashboardStats() { const stats = await this.adminService.getDashboardStats(); return { success: true, data: stats }; } @UseGuards(JwtAuthGuard) @Get('users') @ApiOperation({ summary: 'لیست کاربران' }) @ApiQuery({ name: 'page', required: false, description: 'شماره صفحه' }) @ApiQuery({ name: 'limit', required: false, description: 'تعداد آیتم‌ها' }) @ApiQuery({ name: 'search', required: false, description: 'جستجو در نام یا ایمیل' }) @ApiQuery({ name: 'role', required: false, description: 'فیلتر بر اساس نقش کاربر' }) async getUsers( @Query('page') page?: string, @Query('limit') limit?: string, @Query('search') search?: string, @Query('role') role?: string ) { const data = await this.adminService.getUsers({ page, limit, search, role }); return { success: true, ...data }; } @UseGuards(JwtAuthGuard) @Put('users/:id/role') @ApiOperation({ summary: 'تغییر نقش کاربر' }) async updateUserRole(@Param('id') id: string, @Body('role') role: string) { const user = await this.adminService.updateUserRole(id, role); return { success: true, data: user }; } @UseGuards(JwtAuthGuard) @Get('products') @ApiOperation({ summary: 'لیست محصولات (مدیریت)' }) @ApiQuery({ name: 'page', required: false, description: 'شماره صفحه' }) @ApiQuery({ name: 'limit', required: false, description: 'تعداد آیتم‌ها' }) @ApiQuery({ name: 'search', required: false, description: 'جستجو' }) @ApiQuery({ name: 'categoryId', required: false, description: 'شناسه دسته‌بندی' }) async getProducts( @Query('page') page?: string, @Query('limit') limit?: string, @Query('search') search?: string, @Query('categoryId') categoryId?: string ) { const data = await this.adminService.getProducts({ page, limit, search, categoryId }); return { success: true, ...data }; } @UseGuards(JwtAuthGuard) @Post('products') @ApiOperation({ summary: 'ایجاد محصول جدید' }) async createProduct(@Body() data: any) { const product = await this.adminService.createProduct(data); return { success: true, data: product }; } @UseGuards(JwtAuthGuard) @Put('products/:id') @ApiOperation({ summary: 'ویرایش محصول' }) async updateProduct(@Param('id') id: string, @Body() data: any) { const product = await this.adminService.updateProduct(id, data); return { success: true, data: product }; } @UseGuards(JwtAuthGuard) @Delete('products/:id') @ApiOperation({ summary: 'حذف محصول' }) async deleteProduct(@Param('id') id: string) { await this.adminService.deleteProduct(id); return { success: true, message: 'Product deleted' }; } @UseGuards(JwtAuthGuard) @Get('orders') @ApiOperation({ summary: 'لیست سفارش‌ها' }) @ApiQuery({ name: 'page', required: false, description: 'شماره صفحه' }) @ApiQuery({ name: 'limit', required: false, description: 'تعداد آیتم‌ها' }) @ApiQuery({ name: 'search', required: false, description: 'جستجو' }) @ApiQuery({ name: 'status', required: false, description: 'وضعیت سفارش' }) async getOrders( @Query('page') page?: string, @Query('limit') limit?: string, @Query('search') search?: string, @Query('status') status?: string ) { const data = await this.adminService.getOrders({ page, limit, search, status }); return { success: true, ...data }; } @UseGuards(JwtAuthGuard) @Put('orders/:id/status') @ApiOperation({ summary: 'تغییر وضعیت و کد رهگیری سفارش' }) async updateOrderStatus( @Param('id') id: string, @Body('status') status: string, @Body('trackingNumber') trackingNumber?: string ) { const order = await this.adminService.updateOrderStatus(id, status, trackingNumber); return { success: true, data: order }; } // --- Coupons --- @UseGuards(JwtAuthGuard) @Get('coupons') @ApiOperation({ summary: 'لیست کد تخفیف‌ها' }) @ApiQuery({ name: 'page', required: false, description: 'شماره صفحه' }) @ApiQuery({ name: 'limit', required: false, description: 'تعداد آیتم‌ها' }) @ApiQuery({ name: 'search', required: false, description: 'جستجو' }) async getCoupons(@Query() query: any) { const coupons = await this.adminService.getCoupons(query); return { success: true, ...coupons }; } @UseGuards(JwtAuthGuard) @Post('coupons') @ApiOperation({ summary: 'ایجاد کد تخفیف جدید' }) async createCoupon(@Body() data: any) { const coupon = await this.adminService.createCoupon(data); return { success: true, data: coupon }; } @UseGuards(JwtAuthGuard) @Put('coupons/:id') @ApiOperation({ summary: 'ویرایش کد تخفیف' }) async updateCoupon(@Param('id') id: string, @Body() data: any) { const coupon = await this.adminService.updateCoupon(id, data); return { success: true, data: coupon }; } @UseGuards(JwtAuthGuard) @Put('coupons/:id/toggle') @ApiOperation({ summary: 'فعال/غیرفعال کردن کد تخفیف' }) async toggleCoupon(@Param('id') id: string, @Body('isActive') isActive: boolean) { const coupon = await this.adminService.toggleCoupon(id, isActive); return { success: true, data: coupon }; } @UseGuards(JwtAuthGuard) @Delete('coupons/:id') @ApiOperation({ summary: 'حذف کد تخفیف' }) async deleteCoupon(@Param('id') id: string) { await this.adminService.deleteCoupon(id); return { success: true }; } // --- Settings --- @UseGuards(JwtAuthGuard) @Get('settings') @ApiOperation({ summary: 'دریافت تنظیمات' }) async getSettings() { const settings = await this.adminService.getSettings(); return { success: true, data: settings }; } @UseGuards(JwtAuthGuard) @Put('settings') @ApiOperation({ summary: 'ذخیره تنظیمات' }) async updateSettings(@Body() data: Record) { const settings = await this.adminService.updateSettings(data); return { success: true, data: settings }; } }