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 ConsumerBusinessActivityGoodsService { constructor(private readonly prisma: PrismaService) {} defaultSelect: GoodSelect = { id: true, name: true, barcode: true, local_sku: true, pricing_model: true, image_url: true, sku: { select: { id: true, name: true, }, }, measure_unit: { select: { id: true, name: true, }, }, category: { select: { id: true, name: true, }, }, created_at: true, } async findAll(consumer_id: string, business_activity_id: string) { const goods = await this.prisma.good.findMany({ where: { business_activity: { id: business_activity_id, consumer_id, }, }, select: this.defaultSelect, }) return ResponseMapper.list(goods) } async findOne(consumer_id: string, business_activity_id: string, id: string) { const good = await this.prisma.good.findUnique({ where: { business_activity: { id: business_activity_id, consumer_id, }, id, }, select: this.defaultSelect, }) return ResponseMapper.single(good) } async create(business_activity_id: string, data: CreateGoodDto) { const { category_id, sku_id, measure_unit_id, ...rest } = data const good = await this.prisma.good.create({ data: { ...rest, business_activity: { connect: { id: business_activity_id, }, }, category: { connect: { id: category_id, }, }, sku: { connect: { id: sku_id, }, }, measure_unit: { connect: { id: measure_unit_id, }, }, }, }) return ResponseMapper.create(good) } async update( consumer_id: string, business_activity_id: string, id: string, data: UpdateGoodDto, ) { const { category_id, sku_id, measure_unit_id, ...rest } = data const good = await this.prisma.good.update({ where: { business_activity: { id: business_activity_id, consumer_id, }, id, }, data: { business_activity: { connect: { id: business_activity_id, }, }, category: { connect: { id: category_id, }, }, sku: { connect: { id: sku_id, }, }, measure_unit: { connect: { id: measure_unit_id, }, }, ...rest, }, }) return ResponseMapper.update(good) } // async delete(id: string) { // await this.prisma.complex.delete({ where: { id } }) // return ResponseMapper.delete() // } }