otp expire crone

This commit is contained in:
2026-01-20 20:36:22 +03:30
parent 6ba36ca130
commit ca8d6c473d
4 changed files with 147 additions and 121 deletions
+4 -4
View File
@@ -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, string> = {
[Permission.MANAGE_productS]: 'مدیریت غذاها',
[Permission.MANAGE_PRODUCTS]: 'مدیریت غذاها',
[Permission.MANAGE_CATEGORIES]: 'مدیریت دسته‌بندی‌ها',
[Permission.MANAGE_ORDERS]: 'مدیریت سفارشات',
[Permission.MANAGE_ADMINS]: 'مدیریت مدیران',
+2 -1
View File
@@ -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 { }
+25
View File
@@ -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
}
}
@@ -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);
}
}