123 lines
2.9 KiB
TypeScript
123 lines
2.9 KiB
TypeScript
import { LicenseInclude } from '@/generated/prisma/models'
|
|
import { PrismaService } from '@/prisma/prisma.service'
|
|
import { Injectable } from '@nestjs/common'
|
|
import { ResponseMapper } from 'common/response/response-mapper'
|
|
import { LicenseStatus } from 'generated/prisma/enums'
|
|
import { CreateLicenseDto, UpdateLicenseDto } from './dto/license.dto'
|
|
|
|
@Injectable()
|
|
export class PartnerLicensesService {
|
|
constructor(private readonly prisma: PrismaService) {}
|
|
|
|
private readonly licenseInclude = {
|
|
partner: true,
|
|
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,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
} as LicenseInclude
|
|
|
|
async findAll() {
|
|
const [licenses, count] = await this.prisma.$transaction([
|
|
this.prisma.license.findMany({
|
|
include: this.licenseInclude,
|
|
omit: {
|
|
pos_id: true,
|
|
partner_id: true,
|
|
},
|
|
}),
|
|
this.prisma.license.count(),
|
|
])
|
|
return ResponseMapper.paginate(
|
|
licenses.map(license => {
|
|
const { pos, ...rest } = license
|
|
// @ts-ignore
|
|
const { accounts, ...posRest } = pos
|
|
return {
|
|
account: accounts[0],
|
|
pos: posRest,
|
|
...rest,
|
|
}
|
|
}),
|
|
{
|
|
count,
|
|
},
|
|
)
|
|
}
|
|
|
|
async findOne(id: string) {
|
|
const license = await this.prisma.license.findFirst({
|
|
where: { id },
|
|
include: this.licenseInclude,
|
|
omit: {
|
|
pos_id: true,
|
|
partner_id: true,
|
|
},
|
|
})
|
|
if (license) {
|
|
const { pos, ...rest } = license
|
|
// @ts-ignore
|
|
const { accounts, ...posRest } = pos
|
|
return ResponseMapper.single({
|
|
account: accounts[0],
|
|
pos: posRest,
|
|
...rest,
|
|
})
|
|
}
|
|
|
|
return ResponseMapper.single(license)
|
|
}
|
|
|
|
async create(data: CreateLicenseDto) {
|
|
const date = new Date(data.starts_at || '')
|
|
const expiresAt =
|
|
data.expires_at || new Date(date.setFullYear(date.getFullYear() + 1))
|
|
|
|
const license = await this.prisma.license.create({
|
|
data: {
|
|
partner_id: data.partner_id,
|
|
pos_id: data.pos_id,
|
|
starts_at: date,
|
|
expires_at: expiresAt,
|
|
status: LicenseStatus.ACTIVE,
|
|
},
|
|
})
|
|
|
|
return ResponseMapper.create(license)
|
|
}
|
|
|
|
async update(id: string, data: UpdateLicenseDto) {
|
|
const license = await this.prisma.license.update({
|
|
where: { id },
|
|
data: { ...data },
|
|
})
|
|
return ResponseMapper.update(license)
|
|
}
|
|
|
|
async delete(id: string) {
|
|
await this.prisma.license.delete({ where: { id } })
|
|
return ResponseMapper.delete()
|
|
}
|
|
}
|