diff --git a/src/modules/catalog/catalog.controller.ts b/src/modules/catalog/catalog.controller.ts index 0170859..5326ca5 100644 --- a/src/modules/catalog/catalog.controller.ts +++ b/src/modules/catalog/catalog.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get } from '@nestjs/common' +import { Controller, Get, Param } from '@nestjs/common' import { ApiTags } from '@nestjs/swagger' import { CatalogsService } from './catalog.service' @@ -26,4 +26,9 @@ export class CatalogsController { async getDeviceBrands() { return this.catalogService.getDeviceBrands() } + + @Get('guilds/:guildId/good_categories') + async getGuildGoodCategories(@Param('guildId') guild_id: string) { + return this.catalogService.getGuildGoodCategories(guild_id) + } } diff --git a/src/modules/catalog/catalog.service.ts b/src/modules/catalog/catalog.service.ts index 2181dc4..7473413 100644 --- a/src/modules/catalog/catalog.service.ts +++ b/src/modules/catalog/catalog.service.ts @@ -38,4 +38,14 @@ export class CatalogsService { }) return ResponseMapper.list(items) } + + async getGuildGoodCategories(guild_id: string) { + const items = await this.prisma.goodCategory.findMany({ + where: { + guild_id, + }, + select: this.defaultSelect, + }) + return ResponseMapper.list(items) + } } diff --git a/src/modules/consumer/business-activities/complexes/complexes.module.ts b/src/modules/consumer/business-activities/complexes/complexes.module.ts index 5e1b130..6a3ac9d 100644 --- a/src/modules/consumer/business-activities/complexes/complexes.module.ts +++ b/src/modules/consumer/business-activities/complexes/complexes.module.ts @@ -2,10 +2,11 @@ import { PrismaModule } from '@/prisma/prisma.module' import { Module } from '@nestjs/common' import { BusinessActivityComplexesController } from './complexes.controller' import { BusinessActivityComplexesService } from './complexes.service' +import { ConsumerComplexGoodsModule } from './goods/goods.module' import { ConsumerComplexPosesModule } from './poses/poses.module' @Module({ - imports: [PrismaModule, ConsumerComplexPosesModule], + imports: [PrismaModule, ConsumerComplexPosesModule, ConsumerComplexGoodsModule], controllers: [BusinessActivityComplexesController], providers: [BusinessActivityComplexesService], }) diff --git a/src/modules/consumer/business-activities/complexes/goods/dto/good.dto.ts b/src/modules/consumer/business-activities/complexes/goods/dto/good.dto.ts new file mode 100644 index 0000000..7fc92f0 --- /dev/null +++ b/src/modules/consumer/business-activities/complexes/goods/dto/good.dto.ts @@ -0,0 +1,32 @@ +import { GoodPricingModel, UnitType } from '@/generated/prisma/enums' +import { ApiProperty, PartialType } from '@nestjs/swagger' +import { IsEnum, IsOptional, IsString } from 'class-validator' + +export class CreateGoodDto { + @IsString() + @ApiProperty({ required: true }) + name: string + + @IsString() + @ApiProperty({ required: true }) + sku: string + + @IsString() + @ApiProperty({ required: true }) + category_id: string + + @IsEnum(UnitType) + @ApiProperty({ required: true, enum: UnitType }) + unit_type: UnitType + + @IsEnum(GoodPricingModel) + @ApiProperty({ required: true, enum: GoodPricingModel }) + pricing_model: GoodPricingModel + + @IsOptional() + @IsString() + @ApiProperty({ required: false }) + description?: string +} + +export class UpdateGoodDto extends PartialType(CreateGoodDto) {} diff --git a/src/modules/consumer/business-activities/complexes/goods/goods.controller.ts b/src/modules/consumer/business-activities/complexes/goods/goods.controller.ts new file mode 100644 index 0000000..67f748b --- /dev/null +++ b/src/modules/consumer/business-activities/complexes/goods/goods.controller.ts @@ -0,0 +1,53 @@ +import { TokenAccount } from '@/common/decorators/tokenInfo.decorator' +import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common' +import { ApiTags } from '@nestjs/swagger' +import { CreateGoodDto, UpdateGoodDto } from './dto/good.dto' +import { ConsumerComplexGoodsService } from './goods.service' + +@ApiTags('ConsumerComplexGoods') +@Controller('consumer/business_activities/:businessActivityId/complexes/:complexId/goods') +export class ConsumerComplexGoodsController { + constructor(private readonly service: ConsumerComplexGoodsService) {} + + @Get() + async findAll( + @TokenAccount('userId') userId: string, + @Param('businessActivityId') businessActivityId: string, + @Param('complexId') complexId: string, + ) { + console.log(userId, businessActivityId, complexId) + + return this.service.findAll(userId, businessActivityId, complexId) + } + + @Get(':id') + async findOne( + @TokenAccount('userId') userId: string, + @Param('businessActivityId') businessActivityId: string, + @Param('complexId') complexId: string, + @Param('id') id: string, + ) { + return this.service.findOne(userId, businessActivityId, complexId, id) + } + + @Post() + async create(@Param('complexId') complexId: string, @Body() data: CreateGoodDto) { + return this.service.create(complexId, data) + } + + @Patch(':id') + async update( + @TokenAccount('userId') userId: string, + @Param('businessActivityId') businessActivityId: string, + @Param('complexId') complexId: string, + @Param('id') id: string, + @Body() data: UpdateGoodDto, + ) { + return this.service.update(userId, businessActivityId, complexId, id, data) + } + + // @Delete(':id') + // async delete(@Param('id') id: string) { + // return this.businessActivityAccountsService.delete(id) + // } +} diff --git a/src/modules/consumer/business-activities/complexes/goods/goods.module.ts b/src/modules/consumer/business-activities/complexes/goods/goods.module.ts new file mode 100644 index 0000000..180be0f --- /dev/null +++ b/src/modules/consumer/business-activities/complexes/goods/goods.module.ts @@ -0,0 +1,12 @@ +import { PrismaModule } from '@/prisma/prisma.module' +import { Module } from '@nestjs/common' +import { ConsumerComplexGoodsController } from './goods.controller' +import { ConsumerComplexGoodsService } from './goods.service' + +@Module({ + imports: [PrismaModule], + controllers: [ConsumerComplexGoodsController], + providers: [ConsumerComplexGoodsService], + exports: [ConsumerComplexGoodsService], +}) +export class ConsumerComplexGoodsModule {} diff --git a/src/modules/consumer/business-activities/complexes/goods/goods.service.ts b/src/modules/consumer/business-activities/complexes/goods/goods.service.ts new file mode 100644 index 0000000..4271829 --- /dev/null +++ b/src/modules/consumer/business-activities/complexes/goods/goods.service.ts @@ -0,0 +1,129 @@ +import { GoodSelect } from '@/generated/prisma/models' +import { PrismaService } from '@/prisma/prisma.service' +import { Injectable } from '@nestjs/common' +import { ResponseMapper } from 'common/response/response-mapper' +import { CreateGoodDto, UpdateGoodDto } from './dto/good.dto' + +@Injectable() +export class ConsumerComplexGoodsService { + constructor(private readonly prisma: PrismaService) {} + + defaultSelect: GoodSelect = { + id: true, + name: true, + barcode: true, + sku: true, + local_sku: true, + pricing_model: true, + unit_type: true, + category: { + select: { + id: true, + name: true, + }, + }, + created_at: true, + } + + async findAll(user_id: string, business_activity_id: string, complex_id: string) { + const goods = await this.prisma.good.findMany({ + where: { + complex_id, + complex: { + id: complex_id, + business_activity: { + id: business_activity_id, + user_id, + }, + }, + }, + select: this.defaultSelect, + }) + + return ResponseMapper.list(goods) + } + + async findOne( + user_id: string, + business_activity_id: string, + complex_id: string, + id: string, + ) { + const good = await this.prisma.good.findUnique({ + where: { + complex: { + id: complex_id, + business_activity: { + id: business_activity_id, + user_id, + }, + }, + id, + }, + select: this.defaultSelect, + }) + return ResponseMapper.single(good) + } + + async create(complex_id: string, data: CreateGoodDto) { + const { category_id, ...rest } = data + + const good = await this.prisma.good.create({ + data: { + ...rest, + complex: { + connect: { + id: complex_id, + }, + }, + category: { + connect: { + id: category_id, + }, + }, + }, + }) + return ResponseMapper.create(good) + } + + async update( + user_id: string, + business_activity_id: string, + complex_id: string, + id: string, + data: UpdateGoodDto, + ) { + const { category_id, ...rest } = data + const good = await this.prisma.good.update({ + where: { + complex: { + id: complex_id, + business_activity: { + id: business_activity_id, + user_id, + }, + }, + id, + }, + data: { + complex: { + connect: { + id: complex_id, + }, + }, + category: { + connect: { + id: category_id, + }, + }, + ...rest, + }, + }) + return ResponseMapper.update(good) + } + + // async delete(id: string) { + // await this.prisma.complex.delete({ where: { id } }) + // return ResponseMapper.delete() + // } +} diff --git a/src/modules/consumer/business-activities/complexes/poses/poses.service.ts b/src/modules/consumer/business-activities/complexes/poses/poses.service.ts index ff699b7..a68b65e 100644 --- a/src/modules/consumer/business-activities/complexes/poses/poses.service.ts +++ b/src/modules/consumer/business-activities/complexes/poses/poses.service.ts @@ -90,7 +90,6 @@ export class ComplexPosesService { }, select: this.defaultSelect, }) - console.log(poses) return ResponseMapper.list(poses) }