diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index 7ae581e..d420902 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -4,12 +4,12 @@ */ export enum Permission { - MANAGE_productS = 'manage_products', + MANAGE_PRODUCTS = 'manage_products', MANAGE_CATEGORIES = 'manage_categories', // Order Management - VIEW_ORDERS='view_orders', - ASSIGN_DESIGNER='assign_designer', + VIEW_ORDERS = 'view_orders', + ASSIGN_DESIGNER = 'assign_designer', MANAGE_ORDERS = 'manage_orders', // User & Admin Management @@ -38,7 +38,7 @@ 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.MANAGE_ADMINS]: 'مدیریت مدیران', diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts index b356e29..1107d00 100644 --- a/src/modules/auth/auth.module.ts +++ b/src/modules/auth/auth.module.ts @@ -14,6 +14,7 @@ import { NotificationsModule } from '../notification/notifications.module'; import { OtpRepository } from './repository/otp.repository'; import { OtpService } from './services/otp.service'; import { Otp } from './entities/otp.entity'; +import { AuthCrone } from './crone/auth.crone'; @Module({ imports: [ @@ -40,7 +41,7 @@ import { Otp } from './entities/otp.entity'; ], controllers: [AuthController], - providers: [AuthService, TokensService, AdminAuthGuard, OtpRepository, OtpService], + providers: [AuthService, TokensService, AdminAuthGuard, OtpRepository, OtpService, AuthCrone], exports: [AdminAuthGuard], }) export class AuthModule { } diff --git a/src/modules/auth/crone/auth.crone.ts b/src/modules/auth/crone/auth.crone.ts new file mode 100644 index 0000000..8fb3d17 --- /dev/null +++ b/src/modules/auth/crone/auth.crone.ts @@ -0,0 +1,25 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { Cron } from '@nestjs/schedule'; +import { OtpRepository } from '../repository/otp.repository'; + + +@Injectable() +export class AuthCrone { + private readonly logger = new Logger(AuthCrone.name); + + constructor( + private readonly otpRepository: OtpRepository + ) { } + + @Cron('*/59 * * * *', { + name: 'completeOldDeliveredOrders', + timeZone: 'UTC', + }) + async removeExpireOtp() { + this.logger.log("Delete expire otps") + await this.otpRepository.nativeDelete({ + expiresAt: { $lt: new Date() } + }) + return true + } +} diff --git a/src/modules/product/controllers/product.controller.ts b/src/modules/product/controllers/product.controller.ts index dc5b471..7576f3d 100644 --- a/src/modules/product/controllers/product.controller.ts +++ b/src/modules/product/controllers/product.controller.ts @@ -39,70 +39,70 @@ export class productController { ) { } - /*====================CATEGORY =========================*/ - @Post('admin/category') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Create a new category' }) - @ApiBody({ type: CreateCategoryDto }) - createCategory(@Body() createproductDto: CreateCategoryDto) { - return this.categoryService.create(createproductDto); - } + /*====================CATEGORY =========================*/ + @Post('admin/category') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Create a new category' }) + @ApiBody({ type: CreateCategoryDto }) + createCategory(@Body() createproductDto: CreateCategoryDto) { + return this.categoryService.create(createproductDto); + } - @Get('admin/category') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Get a paginated list of Categories' }) - @ApiQuery({ name: 'page', required: false, type: Number }) - @ApiQuery({ name: 'limit', required: false, type: Number }) - @ApiQuery({ name: 'search', required: false, type: String }) - @ApiQuery({ name: 'orderBy', required: false, type: String }) - @ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] }) - @ApiQuery({ name: 'isActive', required: false, type: Boolean }) - async findAllCategories(@Query() dto: FindCategoriesDto) { - const result = await this.categoryService.findAll(dto); - return result; - } + @Get('admin/category') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Get a paginated list of Categories' }) + @ApiQuery({ name: 'page', required: false, type: Number }) + @ApiQuery({ name: 'limit', required: false, type: Number }) + @ApiQuery({ name: 'search', required: false, type: String }) + @ApiQuery({ name: 'orderBy', required: false, type: String }) + @ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] }) + @ApiQuery({ name: 'isActive', required: false, type: Boolean }) + async findAllCategories(@Query() dto: FindCategoriesDto) { + const result = await this.categoryService.findAll(dto); + return result; + } - @Get('admin/category/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Get a category by id' }) - @ApiParam({ name: 'id', required: true }) - findCategoryById(@Param('id') id: string) { - return this.categoryService.findById(+id); - } + @Get('admin/category/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Get a category by id' }) + @ApiParam({ name: 'id', required: true }) + findCategoryById(@Param('id') id: string) { + return this.categoryService.findById(+id); + } - @Patch('admin/category/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Update a category' }) - @ApiParam({ name: 'id', required: true }) - @ApiBody({ type: UpdateCategoryDto }) - updateCategory(@Param('id') id: string, @Body() dto: UpdateCategoryDto) { - return this.categoryService.update(+id, dto); - } + @Patch('admin/category/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Update a category' }) + @ApiParam({ name: 'id', required: true }) + @ApiBody({ type: UpdateCategoryDto }) + updateCategory(@Param('id') id: string, @Body() dto: UpdateCategoryDto) { + return this.categoryService.update(+id, dto); + } - @Delete('admin/category/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Delete (soft) a category' }) - @ApiParam({ name: 'id', required: true }) - removeCategory(@Param('id') id: string,) { - return this.categoryService.remove(+id); - } + @Delete('admin/category/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Delete (soft) a category' }) + @ApiParam({ name: 'id', required: true }) + removeCategory(@Param('id') id: string,) { + return this.categoryService.remove(+id); + } /* =============================== PRODUCT ================================= */ @Post('admin/product') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Create a new product' }) @ApiBody({ type: CreateproductDto }) create(@Body() createproductDto: CreateproductDto) { @@ -112,7 +112,7 @@ export class productController { @Get('admin/products') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Get a paginated list of products' }) @ApiQuery({ name: 'page', required: false, type: Number }) @ApiQuery({ name: 'limit', required: false, type: Number }) @@ -129,7 +129,7 @@ export class productController { @Get('admin/products/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Get a product by id' }) @ApiParam({ name: 'id', required: true }) findById(@Param('id') id: string,) { @@ -139,7 +139,7 @@ export class productController { @Patch('admin/products/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Update a product' }) @ApiParam({ name: 'id', required: true }) @ApiBody({ type: UpdateproductDto }) @@ -150,20 +150,20 @@ export class productController { @Delete('admin/products/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Delete (soft) a product' }) @ApiParam({ name: 'id', required: true }) remove(@Param('id') id: string,) { return this.productService.remove(id); } - + /*=============================== Attibute ==========================*/ @Post('admin/product/:id/attribute') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Create a new attribute' }) @ApiParam({ name: 'id', required: true }) @ApiBody({ type: CreateAttributeDto }) @@ -174,7 +174,7 @@ export class productController { @Get('admin/products/:id/attributes') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiParam({ name: 'id', required: true }) @ApiOperation({ summary: 'Get list of product attributes' }) async findProductAttributes(@Param('id') id: string) { @@ -184,7 +184,7 @@ export class productController { @Get('admin/products/attributes/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Get a attribute by id' }) @ApiParam({ name: 'id', required: true }) findAttributeById(@Param('id') id: string) { @@ -194,7 +194,7 @@ export class productController { @Patch('admin/products/attributes/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Update a attribute' }) @ApiParam({ name: 'id', required: true }) @ApiBody({ type: UpdateAttributeDto }) @@ -205,63 +205,63 @@ export class productController { @Delete('admin/products/attributes/:id') // @UseGuards(AdminAuthGuard) @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) + @Permissions(Permission.MANAGE_PRODUCTS) @ApiOperation({ summary: 'Delete (soft) a attribute' }) @ApiParam({ name: 'id', required: true }) removeAttribute(@Param('id') id: string,) { return this.attributeService.remove(+id); } - /*=========================== Attibute Values==========================*/ - @Post('admin/product/attribute/:id/value') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Create a new attribute value' }) - @ApiParam({ name: 'id', required: true }) - @ApiBody({ type: CreateAttributeValueDto }) - createAttributeValue(@Param('id') id: string, @Body() dto: CreateAttributeValueDto) { - return this.attributeValueService.create(+id, dto); - } - - @Get('admin/products/attributes/:id/values') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiParam({ name: 'id', required: true }) - @ApiOperation({ summary: 'Get list of attribute values' }) - async findtAttributeValue(@Param('id') id: string) { - return this.attributeValueService.findAll(+id); - } - - @Get('admin/products/attributes/value/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Get a attribute value by id' }) - @ApiParam({ name: 'id', required: true }) - findAttributeValueById(@Param('id') id: string) { - return this.attributeValueService.findById(+id); - } - - @Patch('admin/products/attributes/value/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Update a attribute value' }) - @ApiParam({ name: 'id', required: true }) - @ApiBody({ type: UpdateAttributeValueDto }) - updateAttributeValue(@Param('id') id: string, @Body() dto: UpdateAttributeValueDto) { - return this.attributeValueService.update(+id, dto); - } - - @Delete('admin/products/attributes/value/:id') - // @UseGuards(AdminAuthGuard) - @ApiBearerAuth() - @Permissions(Permission.MANAGE_productS) - @ApiOperation({ summary: 'Delete (soft) a attribute value' }) - @ApiParam({ name: 'id', required: true }) - removeAttributeValue(@Param('id') id: string,) { - return this.attributeValueService.remove(+id); - } + /*=========================== Attibute Values==========================*/ + @Post('admin/product/attribute/:id/value') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Create a new attribute value' }) + @ApiParam({ name: 'id', required: true }) + @ApiBody({ type: CreateAttributeValueDto }) + createAttributeValue(@Param('id') id: string, @Body() dto: CreateAttributeValueDto) { + return this.attributeValueService.create(+id, dto); + } + + @Get('admin/products/attributes/:id/values') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiParam({ name: 'id', required: true }) + @ApiOperation({ summary: 'Get list of attribute values' }) + async findtAttributeValue(@Param('id') id: string) { + return this.attributeValueService.findAll(+id); + } + + @Get('admin/products/attributes/value/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Get a attribute value by id' }) + @ApiParam({ name: 'id', required: true }) + findAttributeValueById(@Param('id') id: string) { + return this.attributeValueService.findById(+id); + } + + @Patch('admin/products/attributes/value/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Update a attribute value' }) + @ApiParam({ name: 'id', required: true }) + @ApiBody({ type: UpdateAttributeValueDto }) + updateAttributeValue(@Param('id') id: string, @Body() dto: UpdateAttributeValueDto) { + return this.attributeValueService.update(+id, dto); + } + + @Delete('admin/products/attributes/value/:id') + // @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @Permissions(Permission.MANAGE_PRODUCTS) + @ApiOperation({ summary: 'Delete (soft) a attribute value' }) + @ApiParam({ name: 'id', required: true }) + removeAttributeValue(@Param('id') id: string,) { + return this.attributeValueService.remove(+id); + } }