125 lines
2.7 KiB
TypeScript
125 lines
2.7 KiB
TypeScript
|
|
import { UploadedFileTypes } from '@/common/enums/enums'
|
||
|
|
import { GoodPricingModel } from '@/generated/prisma/enums'
|
||
|
|
import { GoodSelect } from '@/generated/prisma/models'
|
||
|
|
import { UploaderService } from '@/modules/uploader/uploader.service'
|
||
|
|
import { Injectable } from '@nestjs/common'
|
||
|
|
|
||
|
|
export interface CreateGoodDto {
|
||
|
|
name: string
|
||
|
|
sku_id: string
|
||
|
|
category_id: string
|
||
|
|
measure_unit_id: string
|
||
|
|
pricing_model: GoodPricingModel
|
||
|
|
description?: string
|
||
|
|
is_default_guild_good?: boolean
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UpdateGoodDto extends Partial<CreateGoodDto> {}
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class GoodsSharedService {
|
||
|
|
constructor(private readonly uploaderService: UploaderService) {}
|
||
|
|
|
||
|
|
readonly defaultSelect: GoodSelect = {
|
||
|
|
id: true,
|
||
|
|
name: true,
|
||
|
|
pricing_model: true,
|
||
|
|
image_url: true,
|
||
|
|
description: true,
|
||
|
|
sku: {
|
||
|
|
select: {
|
||
|
|
id: true,
|
||
|
|
name: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
measure_unit: {
|
||
|
|
select: {
|
||
|
|
id: true,
|
||
|
|
name: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
category: {
|
||
|
|
select: {
|
||
|
|
id: true,
|
||
|
|
name: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
async prepareCreateData(data: CreateGoodDto, file?: Express.Multer.File) {
|
||
|
|
const { category_id, measure_unit_id, sku_id, ...rest } = data
|
||
|
|
|
||
|
|
let image_url = ''
|
||
|
|
if (file) {
|
||
|
|
const uploadedUrl = await this.uploaderService.uploadFile(
|
||
|
|
file,
|
||
|
|
UploadedFileTypes.GOOD,
|
||
|
|
)
|
||
|
|
image_url = uploadedUrl || ''
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
...rest,
|
||
|
|
image_url,
|
||
|
|
sku: {
|
||
|
|
connect: {
|
||
|
|
id: sku_id,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
measure_unit: {
|
||
|
|
connect: {
|
||
|
|
id: measure_unit_id,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
category: {
|
||
|
|
connect: {
|
||
|
|
id: category_id,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async prepareUpdateData(id: string, data: UpdateGoodDto, file?: Express.Multer.File) {
|
||
|
|
const { category_id, measure_unit_id, sku_id, ...rest } = data
|
||
|
|
|
||
|
|
let image_url = ''
|
||
|
|
if (file) {
|
||
|
|
const uploadedUrl = await this.uploaderService.uploadFile(
|
||
|
|
file,
|
||
|
|
UploadedFileTypes.GOOD,
|
||
|
|
)
|
||
|
|
image_url = uploadedUrl || ''
|
||
|
|
}
|
||
|
|
|
||
|
|
const updateData: any = {
|
||
|
|
...rest,
|
||
|
|
image_url,
|
||
|
|
}
|
||
|
|
|
||
|
|
if (sku_id) {
|
||
|
|
updateData.sku = { connect: { id: sku_id } }
|
||
|
|
}
|
||
|
|
if (measure_unit_id) {
|
||
|
|
updateData.measure_unit = { connect: { id: measure_unit_id } }
|
||
|
|
}
|
||
|
|
if (category_id) {
|
||
|
|
updateData.category = { connect: { id: category_id } }
|
||
|
|
}
|
||
|
|
|
||
|
|
return updateData
|
||
|
|
}
|
||
|
|
|
||
|
|
async handleImageUpdate(id: string, prisma: any, image_url: string) {
|
||
|
|
if (image_url) {
|
||
|
|
const prevImage = await prisma.good.findUnique({
|
||
|
|
where: { id },
|
||
|
|
select: { image_url: true },
|
||
|
|
})
|
||
|
|
|
||
|
|
if (prevImage?.image_url) {
|
||
|
|
this.uploaderService.deleteFile(prevImage.image_url, UploadedFileTypes.GOOD)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|