import { PrismaService } from '@/prisma/prisma.service' import { Injectable } from '@nestjs/common' import { ResponseMapper } from 'common/response/response-mapper' import { CreatePartnerLicenseDto, UpdateLicenseDto } from './dto/license.dto' @Injectable() export class PartnerLicensesService { constructor(private readonly prisma: PrismaService) {} async findAll(partnerId: string) { const licenses = await this.prisma.license.findMany({ where: { partner_id: partnerId }, include: { pos: { include: { complex: true, provider: true, accounts: { include: { user: true, }, omit: { business_id: true, partner_id: true, provider_id: true, pos_id: true, }, }, device: { include: { brand: true, }, omit: { brand_id: true, }, }, }, }, }, omit: { pos_id: true, partner_id: true, }, }) return ResponseMapper.list( licenses.map(license => { const { pos, ...rest } = license const { accounts, ...posRest } = pos return { account: accounts[0], pos: posRest, ...rest, } }), ) } async findOne(partnerId: string, id: string) { const license = await this.prisma.license.findFirst({ where: { id, partner_id: partnerId }, include: { pos: { include: { complex: true, provider: true, accounts: { include: { user: true, }, omit: { business_id: true, partner_id: true, provider_id: true, pos_id: true, }, }, device: { include: { brand: true, }, omit: { brand_id: true, }, }, }, }, }, omit: { pos_id: true, partner_id: true, }, }) if (license) { const { pos, ...rest } = license const { accounts, ...posRest } = pos return ResponseMapper.single({ account: accounts[0], pos: posRest, ...rest, }) } return ResponseMapper.single(license) } async create(partnerId: string, data: CreatePartnerLicenseDto) { // const license = await this.prisma.$transaction(async tx => { // const user = await tx.user.upsert({ // where: { // mobile_number: data.mobile_number, // }, // update: {}, // create: { // first_name: data.first_name, // last_name: data.last_name, // mobile_number: data.mobile_number, // national_code: data.national_code, // }, // }) // const business = await tx.businessActivity.create({ // data: { // name: data.business_activity_name, // guild_id: data.guild, // user: { // connect: { // id: user.id, // }, // }, // }, // }) // const complex = await tx.complex.create({ // data: { // name: data.complex_name, // tax_id: data.tax_id, // business_activity_id: business.id, // }, // }) // const pos = await tx.pos.create({ // data: { // pos_type: data.pos_type, // serial: data.pos_serial, // device_id: data.pos_device, // complex_id: complex.id, // }, // }) // const date = new Date() // const expiresAt = new Date(date.setFullYear(date.getFullYear() + 1)) // const license = await tx.license.create({ // data: { // partner_id: partnerId, // pos_id: pos.id, // starts_at: data.starts_at || new Date(), // expires_at: data.expires_at || expiresAt, // status: LicenseStatus.ACTIVE, // }, // }) // const hashedPassword = await PasswordUtil.hash(data.password) // const account = await tx.account.create({ // data: { // username: data.username, // password: hashedPassword, // type: AccountType.POS, // user_id: user.id, // pos_id: pos.id, // status: data.account_status, // }, // }) // return { // license, // } // }) return ResponseMapper.create('license') } async update(partnerId: string, id: string, data: UpdateLicenseDto) { const license = await this.prisma.license.update({ where: { id }, data: { ...data, partner_id: partnerId }, }) return ResponseMapper.update(license) } async delete(partnerId: string, id: string) { await this.prisma.license.delete({ where: { id } }) return ResponseMapper.delete() } }