import { BusinessActivitySelect } from '@/generated/prisma/models' import { PrismaService } from '@/prisma/prisma.service' import { Injectable } from '@nestjs/common' import { ResponseMapper } from 'common/response/response-mapper' @Injectable() export class BusinessActivitiesService { constructor(private readonly prisma: PrismaService) {} defaultSelect: BusinessActivitySelect = { id: true, name: true, economic_code: true, created_at: true, partner_token: true, fiscal_id: true, invoice_number_sequence: true, guild: { select: { id: true, code: true, name: true, }, }, license_activation: { select: { id: true, starts_at: true, expires_at: true, license: { select: { activation: { select: { account_allocations: { select: { id: true, account_id: true, }, }, }, }, }, }, }, }, } private readonly prepareBusinessActivityResponse = (businessActivity: any) => { const { license_activation, complexes, ...rest } = businessActivity const { license, ...license_activation_rest } = license_activation const { account_allocations } = license.activation return { ...rest, license_info: { ...license_activation_rest, accounts_limit: account_allocations.length, allocated_account_count: account_allocations.filter( allocation => allocation.account_id, ).length, }, } } async findAll(consumer_id: string) { const businessActivities = await this.prisma.businessActivity.findMany({ where: { consumer_id, }, select: this.defaultSelect, }) return ResponseMapper.list( businessActivities.map(this.prepareBusinessActivityResponse), ) } async findOne(consumer_id: string, id: string) { const businessActivity = await this.prisma.businessActivity.findUniqueOrThrow({ where: { consumer_id, id }, select: this.defaultSelect, }) return ResponseMapper.single(this.prepareBusinessActivityResponse(businessActivity)) } async update(consumer_id: string, id: string, data: any) { const businessActivity = await this.prisma.businessActivity.update({ where: { id, consumer_id }, data, select: this.defaultSelect, }) return ResponseMapper.update(this.prepareBusinessActivityResponse(businessActivity)) } }