import { GoodSelect } from '@/generated/prisma/models' import { Injectable } from '@nestjs/common' import { ResponseMapper } from '../../../common/response/response-mapper' import { PrismaService } from '../../../prisma/prisma.service' import { CreateGoodDto } from './dto/create-good.dto' @Injectable() export class GoodsService { constructor(private prisma: PrismaService) {} private readonly defaultSelect: GoodSelect = { id: true, name: true, barcode: true, created_at: true, description: true, sku: true, local_sku: true, is_default_guild_good: true, pricing_model: true, unit_type: true, category: { select: { id: true, name: true, image_url: true, }, }, } async findAll(complex_id: string, guild_id: string) { const goods = await this.prisma.good.findMany({ where: { OR: [ { is_default_guild_good: true, category: { guild_id, }, }, { complex_id, }, ], }, select: this.defaultSelect, }) return ResponseMapper.list(goods) } async findOne(good_id: string, complex_id: string, guild_id: string) { const good = await this.prisma.good.findUnique({ where: { id: good_id, complex: { id: complex_id, business_activity: { guild_id, }, }, }, select: this.defaultSelect, }) return ResponseMapper.single(good) } async create(data: CreateGoodDto, complex_id: string) { const { category_id, ...rest } = data const dataToCreate = { ...rest, complex_id, connect: { category: { id: category_id, }, }, } const good = await this.prisma.good.create({ data: { ...rest, category: { connect: { id: category_id, }, }, complex: { connect: { id: complex_id, }, }, }, select: this.defaultSelect, }) return ResponseMapper.create(good) } }