feat: add response DTOs for various services across modules
- Created response DTOs for ConfigService, AppService, AuthService, CatalogsService, AccountsService, BusinessActivityComplexesService, ComplexPosesService, SalesInvoicesService, BusinessActivitiesService, ConsumerBusinessActivityGoodsService, and others. - Implemented Create, FindAll, FindOne, and Update response types for services in consumer, partners, and POS modules. - Added request DTOs for creating and updating goods in the consumer business activities module. - Introduced filtering DTO for partner licenses. - Enhanced response mapping for partner license activations.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { UploadedFileTypes } from '@/common/enums/enums'
|
||||
import { PasswordUtil } from '@/common/utils/password.util'
|
||||
import {
|
||||
AccountStatus,
|
||||
@@ -6,6 +7,7 @@ import {
|
||||
PartnerStatus,
|
||||
} from '@/generated/prisma/enums'
|
||||
import { PartnerSelect } from '@/generated/prisma/models'
|
||||
import { UploaderService } from '@/modules/uploader/uploader.service'
|
||||
import { PrismaService } from '@/prisma/prisma.service'
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { ResponseMapper } from 'common/response/response-mapper'
|
||||
@@ -14,13 +16,17 @@ import { CreatePartnerDto, UpdatePartnerDto } from './dto/partner.dto'
|
||||
@Injectable()
|
||||
export class PartnersService {
|
||||
private now = new Date().getTime()
|
||||
constructor(private readonly prisma: PrismaService) {}
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly uploaderService: UploaderService,
|
||||
) {}
|
||||
|
||||
private readonly defaultSelect: PartnerSelect = {
|
||||
id: true,
|
||||
name: true,
|
||||
code: true,
|
||||
status: true,
|
||||
logo_url: true,
|
||||
created_at: true,
|
||||
license_charge_transactions: {
|
||||
select: {
|
||||
@@ -145,19 +151,26 @@ export class PartnersService {
|
||||
return ResponseMapper.single(this.mapPartner(partner))
|
||||
}
|
||||
|
||||
async create(data: CreatePartnerDto) {
|
||||
const { username, password, ...rest } = data
|
||||
async create(data: CreatePartnerDto, logo?: any) {
|
||||
const { username, password, ...rest } = data as any
|
||||
delete rest.logo
|
||||
|
||||
const logo_url = logo
|
||||
? await this.uploaderService.uploadFile(logo, UploadedFileTypes.PARTNER_LOGO)
|
||||
: undefined
|
||||
|
||||
const partner = await this.prisma.partner.create({
|
||||
data: {
|
||||
...rest,
|
||||
status: PartnerStatus.ACTIVE,
|
||||
partner_accounts: {
|
||||
...(logo_url ? { logo_url } : {}),
|
||||
accounts: {
|
||||
create: {
|
||||
role: PartnerRole.OWNER,
|
||||
account: {
|
||||
create: {
|
||||
username,
|
||||
password: await PasswordUtil.hash(data.password),
|
||||
password: await PasswordUtil.hash(password),
|
||||
status: AccountStatus.ACTIVE,
|
||||
type: AccountType.PARTNER,
|
||||
},
|
||||
@@ -170,12 +183,39 @@ export class PartnersService {
|
||||
return ResponseMapper.create(partner)
|
||||
}
|
||||
|
||||
async update(id: string, data: UpdatePartnerDto) {
|
||||
const partner = await this.prisma.partner.update({
|
||||
where: { id },
|
||||
data,
|
||||
select: this.defaultSelect,
|
||||
async update(id: string, data: UpdatePartnerDto, logo?: any) {
|
||||
const rest = { ...(data as any) }
|
||||
delete rest.logo
|
||||
|
||||
const partner = await this.prisma.$transaction(async tx => {
|
||||
let logo_url = ''
|
||||
if (logo) {
|
||||
const uploadedUrl = await this.uploaderService.uploadFile(
|
||||
logo,
|
||||
UploadedFileTypes.PARTNER_LOGO,
|
||||
)
|
||||
logo_url = uploadedUrl || ''
|
||||
}
|
||||
|
||||
const prevLogo = await tx.partner.findUnique({
|
||||
where: { id },
|
||||
select: { logo_url: true },
|
||||
})
|
||||
|
||||
if (logo_url && prevLogo?.logo_url) {
|
||||
this.uploaderService.deleteFile(prevLogo.logo_url, UploadedFileTypes.PARTNER_LOGO)
|
||||
}
|
||||
|
||||
return tx.partner.update({
|
||||
where: { id },
|
||||
data: {
|
||||
...rest,
|
||||
...(logo_url ? { logo_url } : {}),
|
||||
},
|
||||
select: this.defaultSelect,
|
||||
})
|
||||
})
|
||||
|
||||
return ResponseMapper.update(partner)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user