102 lines
3.3 KiB
TypeScript
102 lines
3.3 KiB
TypeScript
|
|
import { Injectable } from '@nestjs/common'
|
||
|
|
import { ResponseMapper } from '../common/response/response-mapper'
|
||
|
|
import { PrismaService } from '../prisma/prisma.service'
|
||
|
|
import { CreateInventoryTransferItemDto } from './dto/create-inventory-transfer-item.dto'
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class InventoryTransferItemsService {
|
||
|
|
constructor(private prisma: PrismaService) {}
|
||
|
|
|
||
|
|
async create(dto: CreateInventoryTransferItemDto) {
|
||
|
|
const payload: any = { ...dto }
|
||
|
|
if (Object.prototype.hasOwnProperty.call(payload, 'productId')) {
|
||
|
|
payload.product = { connect: { id: Number(payload.productId) } }
|
||
|
|
delete payload.productId
|
||
|
|
}
|
||
|
|
if (Object.prototype.hasOwnProperty.call(payload, 'transferId')) {
|
||
|
|
payload.transfer = { connect: { id: Number(payload.transferId) } }
|
||
|
|
delete payload.transferId
|
||
|
|
}
|
||
|
|
|
||
|
|
const item = await this.prisma.inventoryTransferItem.create({ data: payload })
|
||
|
|
return ResponseMapper.create(item)
|
||
|
|
}
|
||
|
|
|
||
|
|
async findAll(transferId?: number) {
|
||
|
|
const where = transferId ? { transferId: Number(transferId) } : undefined
|
||
|
|
const items = await this.prisma.inventoryTransferItem.findMany({
|
||
|
|
where,
|
||
|
|
include: { product: true },
|
||
|
|
})
|
||
|
|
return ResponseMapper.list(items)
|
||
|
|
}
|
||
|
|
|
||
|
|
async findOne(id: number) {
|
||
|
|
const item = await this.prisma.inventoryTransferItem.findUnique({
|
||
|
|
where: { id },
|
||
|
|
include: { product: true, transfer: true },
|
||
|
|
})
|
||
|
|
if (!item) return null
|
||
|
|
return ResponseMapper.single(item)
|
||
|
|
}
|
||
|
|
|
||
|
|
// scoped helpers for nested routes
|
||
|
|
async createForTransfer(transferId: number, dto: CreateInventoryTransferItemDto) {
|
||
|
|
const payload: any = { ...dto, transferId }
|
||
|
|
return this.create(payload)
|
||
|
|
}
|
||
|
|
|
||
|
|
async findAllForTransfer(transferId: number) {
|
||
|
|
return this.findAll(transferId)
|
||
|
|
}
|
||
|
|
|
||
|
|
async findOneForTransfer(transferId: number, id: number) {
|
||
|
|
const item = await this.prisma.inventoryTransferItem.findFirst({
|
||
|
|
where: { id, transferId },
|
||
|
|
include: { product: true, transfer: true },
|
||
|
|
})
|
||
|
|
if (!item) return null
|
||
|
|
return ResponseMapper.single(item)
|
||
|
|
}
|
||
|
|
|
||
|
|
async update(id: number, data: any) {
|
||
|
|
const payload: any = { ...data }
|
||
|
|
if (Object.prototype.hasOwnProperty.call(payload, 'productId')) {
|
||
|
|
payload.product = { connect: { id: Number(payload.productId) } }
|
||
|
|
delete payload.productId
|
||
|
|
}
|
||
|
|
if (Object.prototype.hasOwnProperty.call(payload, 'transferId')) {
|
||
|
|
payload.transfer = { connect: { id: Number(payload.transferId) } }
|
||
|
|
delete payload.transferId
|
||
|
|
}
|
||
|
|
|
||
|
|
const item = await this.prisma.inventoryTransferItem.update({
|
||
|
|
where: { id },
|
||
|
|
data: payload,
|
||
|
|
})
|
||
|
|
return ResponseMapper.update(item)
|
||
|
|
}
|
||
|
|
|
||
|
|
async updateForTransfer(transferId: number, id: number, data: any) {
|
||
|
|
// ensure the item belongs to the transfer
|
||
|
|
const existing = await this.prisma.inventoryTransferItem.findFirst({
|
||
|
|
where: { id, transferId },
|
||
|
|
})
|
||
|
|
if (!existing) return null
|
||
|
|
return this.update(id, data)
|
||
|
|
}
|
||
|
|
|
||
|
|
async remove(id: number) {
|
||
|
|
const item = await this.prisma.inventoryTransferItem.delete({ where: { id } })
|
||
|
|
return ResponseMapper.single(item)
|
||
|
|
}
|
||
|
|
|
||
|
|
async removeForTransfer(transferId: number, id: number) {
|
||
|
|
const existing = await this.prisma.inventoryTransferItem.findFirst({
|
||
|
|
where: { id, transferId },
|
||
|
|
})
|
||
|
|
if (!existing) return null
|
||
|
|
return this.remove(id)
|
||
|
|
}
|
||
|
|
}
|