This commit is contained in:
2026-01-29 09:47:43 +03:30
parent 890309e59a
commit d6c3f17aea
5 changed files with 146 additions and 127 deletions
@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common'; import { forwardRef, Module } from '@nestjs/common';
import { FormBuilderController } from './controller/form-builder.controller'; import { FormBuilderController } from './controller/form-builder.controller';
import { FieldService } from './provider/field.service'; import { FieldService } from './provider/field.service';
import { FieldOptionService } from './provider/field-option.service'; import { FieldOptionService } from './provider/field-option.service';
@@ -9,7 +9,11 @@ import { JwtModule } from '@nestjs/jwt';
import { ProductModule } from '../product/product.module'; import { ProductModule } from '../product/product.module';
@Module({ @Module({
imports: [PrintModule, ProductModule, JwtModule.register({})], imports: [
PrintModule,
JwtModule.register({}),
forwardRef(() => ProductModule),
],
controllers: [FormBuilderController], controllers: [FormBuilderController],
providers: [FieldService, FieldOptionService, FieldRepository, FieldOptionRepository], providers: [FieldService, FieldOptionService, FieldRepository, FieldOptionRepository],
exports: [FieldService, FieldOptionService, FieldRepository, FieldOptionRepository], exports: [FieldService, FieldOptionService, FieldRepository, FieldOptionRepository],
@@ -6,7 +6,6 @@ import { PrintRepository } from 'src/modules/print/repository/print.repository';
import { Field } from '../entities/field.entity'; import { Field } from '../entities/field.entity';
import { CreateFieldDto } from '../dto/create-field.dto'; import { CreateFieldDto } from '../dto/create-field.dto';
import { UpdateFieldDto } from '../dto/update-field.dto'; import { UpdateFieldDto } from '../dto/update-field.dto';
import { ProductRepository } from 'src/modules/product/repositories/product.repository';
import { EntityType } from '../interface/print'; import { EntityType } from '../interface/print';
import { Product } from 'src/modules/product/entities/product.entity'; import { Product } from 'src/modules/product/entities/product.entity';
import { Print } from 'src/modules/print/entities/print.entity'; import { Print } from 'src/modules/print/entities/print.entity';
@@ -12,30 +12,30 @@ import {
ApiBearerAuth, ApiBearerAuth,
ApiHeader, ApiHeader,
} from '@nestjs/swagger'; } from '@nestjs/swagger';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { UserId } from 'src/common/decorators';
import { AuthGuard } from 'src/modules/auth/guards/auth.guard';
import { Permission } from 'src/common/enums/permission.enum'; import { Permission } from 'src/common/enums/permission.enum';
import { Permissions } from 'src/common/decorators/permissions.decorator'; import { Permissions } from 'src/common/decorators/permissions.decorator';
import { CreateCategoryDto } from '../dto/create-category.dto'; import { CreateCategoryDto } from '../dto/create-category.dto';
import { CategoryService } from '../providers/category.service'; import { CategoryService } from '../providers/category.service';
import { FindCategoriesDto } from '../dto/find-categories.dto'; import { FindCategoriesDto } from '../dto/find-categories.dto';
import { UpdateCategoryDto } from '../dto/update-category.dto'; import { UpdateCategoryDto } from '../dto/update-category.dto';
import { AttributeService } from '../providers/attribute.service'; // import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { CreateAttributeDto } from '../dto/create-attribute.dto'; // import { UserId } from 'src/common/decorators';
import { UpdateAttributeDto } from '../dto/update-attribute.dto'; // import { AuthGuard } from 'src/modules/auth/guards/auth.guard';
import { CreateAttributeValueDto } from '../dto/create-attribute-value.dto'; // import { AttributeService } from '../providers/attribute.service';
import { AttributeValueService } from '../providers/attribute-value.service'; // import { CreateAttributeDto } from '../dto/create-attribute.dto';
import { UpdateAttributeValueDto } from '../dto/update-attribute-value.dto'; // import { UpdateAttributeDto } from '../dto/update-attribute.dto';
// import { CreateAttributeValueDto } from '../dto/create-attribute-value.dto';
// import { AttributeValueService } from '../providers/attribute-value.service';
// import { UpdateAttributeValueDto } from '../dto/update-attribute-value.dto';
@ApiTags('products') @ApiTags('products')
@Controller() @Controller()
export class productController { export class ProductController {
constructor( constructor(
private readonly productService: ProductService, private readonly productService: ProductService,
private readonly categoryService: CategoryService, private readonly categoryService: CategoryService,
private readonly attributeService: AttributeService, // private readonly attributeService: AttributeService,
private readonly attributeValueService: AttributeValueService, // private readonly attributeValueService: AttributeValueService,
) { } ) { }
@@ -171,108 +171,108 @@ export class productController {
/*=============================== Attibute ==========================*/ /*=============================== Attibute ==========================*/
@Post('admin/product/:id/attribute') // @Post('admin/product/:id/attribute')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Create a new attribute' }) // @ApiOperation({ summary: 'Create a new attribute' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiBody({ type: CreateAttributeDto }) // @ApiBody({ type: CreateAttributeDto })
createAttribute(@Param('id') id: string, @Body() dto: CreateAttributeDto) { // createAttribute(@Param('id') id: string, @Body() dto: CreateAttributeDto) {
return this.attributeService.create(+id, dto); // return this.attributeService.create(+id, dto);
} // }
@Get('admin/products/:id/attributes') // @Get('admin/products/:id/attributes')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiOperation({ summary: 'Get list of product attributes' }) // @ApiOperation({ summary: 'Get list of product attributes' })
async findProductAttributes(@Param('id') id: string) { // async findProductAttributes(@Param('id') id: string) {
return this.attributeService.findAll(+id); // return this.attributeService.findAll(+id);
} // }
@Get('admin/products/attributes/:id') // @Get('admin/products/attributes/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Get a attribute by id' }) // @ApiOperation({ summary: 'Get a attribute by id' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
findAttributeById(@Param('id') id: string) { // findAttributeById(@Param('id') id: string) {
return this.attributeService.findById(+id); // return this.attributeService.findById(+id);
} // }
@Patch('admin/products/attributes/:id') // @Patch('admin/products/attributes/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Update a attribute' }) // @ApiOperation({ summary: 'Update a attribute' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiBody({ type: UpdateAttributeDto }) // @ApiBody({ type: UpdateAttributeDto })
updateProductAttribute(@Param('id') id: string, @Body() dto: UpdateAttributeDto) { // updateProductAttribute(@Param('id') id: string, @Body() dto: UpdateAttributeDto) {
return this.attributeService.update(+id, dto); // return this.attributeService.update(+id, dto);
} // }
@Delete('admin/products/attributes/:id') // @Delete('admin/products/attributes/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Delete (soft) a attribute' }) // @ApiOperation({ summary: 'Delete (soft) a attribute' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
removeAttribute(@Param('id') id: string,) { // removeAttribute(@Param('id') id: string,) {
return this.attributeService.remove(+id); // return this.attributeService.remove(+id);
} // }
/*=========================== Attibute Values==========================*/ /*=========================== Attibute Values==========================*/
@Post('admin/product/attribute/:id/value') // @Post('admin/product/attribute/:id/value')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Create a new attribute value' }) // @ApiOperation({ summary: 'Create a new attribute value' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiBody({ type: CreateAttributeValueDto }) // @ApiBody({ type: CreateAttributeValueDto })
createAttributeValue(@Param('id') id: string, @Body() dto: CreateAttributeValueDto) { // createAttributeValue(@Param('id') id: string, @Body() dto: CreateAttributeValueDto) {
return this.attributeValueService.create(+id, dto); // return this.attributeValueService.create(+id, dto);
} // }
@Get('admin/products/attributes/:id/values') // @Get('admin/products/attributes/:id/values')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiOperation({ summary: 'Get list of attribute values' }) // @ApiOperation({ summary: 'Get list of attribute values' })
async findtAttributeValue(@Param('id') id: string) { // async findtAttributeValue(@Param('id') id: string) {
return this.attributeValueService.findAll(+id); // return this.attributeValueService.findAll(+id);
} // }
@Get('admin/products/attributes/value/:id') // @Get('admin/products/attributes/value/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Get a attribute value by id' }) // @ApiOperation({ summary: 'Get a attribute value by id' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
findAttributeValueById(@Param('id') id: string) { // findAttributeValueById(@Param('id') id: string) {
return this.attributeValueService.findById(+id); // return this.attributeValueService.findById(+id);
} // }
@Patch('admin/products/attributes/value/:id') // @Patch('admin/products/attributes/value/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Update a attribute value' }) // @ApiOperation({ summary: 'Update a attribute value' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
@ApiBody({ type: UpdateAttributeValueDto }) // @ApiBody({ type: UpdateAttributeValueDto })
updateAttributeValue(@Param('id') id: string, @Body() dto: UpdateAttributeValueDto) { // updateAttributeValue(@Param('id') id: string, @Body() dto: UpdateAttributeValueDto) {
return this.attributeValueService.update(+id, dto); // return this.attributeValueService.update(+id, dto);
} // }
@Delete('admin/products/attributes/value/:id') // @Delete('admin/products/attributes/value/:id')
// @UseGuards(AdminAuthGuard) // // @UseGuards(AdminAuthGuard)
@ApiBearerAuth() // @ApiBearerAuth()
@Permissions(Permission.MANAGE_PRODUCTS) // @Permissions(Permission.MANAGE_PRODUCTS)
@ApiOperation({ summary: 'Delete (soft) a attribute value' }) // @ApiOperation({ summary: 'Delete (soft) a attribute value' })
@ApiParam({ name: 'id', required: true }) // @ApiParam({ name: 'id', required: true })
removeAttributeValue(@Param('id') id: string,) { // removeAttributeValue(@Param('id') id: string,) {
return this.attributeValueService.remove(+id); // return this.attributeValueService.remove(+id);
} // }
} }
+32 -18
View File
@@ -1,38 +1,52 @@
import { Module } from '@nestjs/common'; import { forwardRef, Module } from '@nestjs/common';
import { ProductService } from './providers/product.service'; import { ProductService } from './providers/product.service';
import { productController } from './controllers/product.controller'; import { ProductController } from './controllers/product.controller';
import { ProductRepository } from './repositories/product.repository'; import { ProductRepository } from './repositories/product.repository';
import { MikroOrmModule } from '@mikro-orm/nestjs'; import { MikroOrmModule } from '@mikro-orm/nestjs';
import { Category } from './entities/category.entity'; import { Category } from './entities/category.entity';
import { Product } from './entities/product.entity'; import { Product } from './entities/product.entity';
import { Attribute } from './entities/attribute.entity';
import { AttributeValue } from './entities/attribute-value.entity';
import { AuthModule } from '../auth/auth.module'; import { AuthModule } from '../auth/auth.module';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';
import { UtilsModule } from '../util/utils.module'; import { UtilsModule } from '../util/utils.module';
import { CategoryRepository } from './repositories/category.repository'; import { CategoryRepository } from './repositories/category.repository';
import { CategoryService } from './providers/category.service'; import { CategoryService } from './providers/category.service';
import { AttributeRepository } from './repositories/attribute.repository'; import { FormBuilderModule } from '../form-builder/form-builder.module';
import { AttributeService } from './providers/attribute.service'; // import { Attribute } from './entities/attribute.entity';
import { AttributeValueRepository } from './repositories/attribute-value.repository'; // import { AttributeValue } from './entities/attribute-value.entity';
import { AttributeValueService } from './providers/attribute-value.service'; // import { AttributeRepository } from './repositories/attribute.repository';
// import { AttributeService } from './providers/attribute.service';
// import { AttributeValueRepository } from './repositories/attribute-value.repository';
// import { AttributeValueService } from './providers/attribute-value.service';
@Module({ @Module({
imports: [ imports: [
MikroOrmModule.forFeature([Product, Category, Attribute, AttributeValue]), MikroOrmModule.forFeature([
Product,
Category
// , Attribute, AttributeValue
]),
AuthModule, AuthModule,
JwtModule, JwtModule,
UtilsModule, UtilsModule,
forwardRef(() => FormBuilderModule)
], ],
controllers: [productController,], controllers: [ProductController],
providers: [ProductService, ProductRepository, providers: [
CategoryRepository, CategoryService, ProductService,
AttributeRepository, AttributeService, ProductRepository,
AttributeValueRepository, CategoryRepository,
AttributeValueService CategoryService,
// AttributeRepository, AttributeService,
// AttributeValueRepository,
// AttributeValueService
],
exports: [
ProductRepository,
CategoryRepository,
CategoryService,
// AttributeRepository,
// AttributeService,
ProductService
], ],
exports: [ProductRepository, CategoryRepository,
CategoryService, AttributeRepository,
AttributeService, ProductService],
}) })
export class ProductModule { } export class ProductModule { }
@@ -7,6 +7,7 @@ import { RequiredEntityData } from '@mikro-orm/core';
import { Product } from '../entities/product.entity'; import { Product } from '../entities/product.entity';
import { CategoryMessage, productMessage } from 'src/common/enums/message.enum'; import { CategoryMessage, productMessage } from 'src/common/enums/message.enum';
import { CategoryRepository } from '../repositories/category.repository'; import { CategoryRepository } from '../repositories/category.repository';
import { FieldService } from 'src/modules/form-builder/provider/field.service';
@Injectable() @Injectable()
export class ProductService { export class ProductService {
@@ -14,6 +15,7 @@ export class ProductService {
constructor( constructor(
private readonly productRepository: ProductRepository, private readonly productRepository: ProductRepository,
private readonly categoryRepository: CategoryRepository, private readonly categoryRepository: CategoryRepository,
// private readonly fieldService: FieldService,
private readonly em: EntityManager, private readonly em: EntityManager,
) { } ) { }