Tokiva-backend-Node / src /services /supplier.service.ts
anoderb
feat: initial commit of Tokiva POS Node backend for Hugging Face
ef874e6
Raw
History Blame Contribute Delete
3.35 kB
import prisma from '../utils/db';
import { catatAudit } from '../utils/audit';
import { moveToTrash } from '../utils/trash';
import { APIError } from '../utils/errors';
export class SupplierService {
static async getSuppliers(skip = 0, limit = 10, pencarian?: string) {
const where: any = {
deleted_at: null,
};
if (pencarian) {
where.nama = {
contains: pencarian,
};
}
return await prisma.supplier.findMany({
where,
skip,
take: limit,
});
}
static async getSupplierById(id: number) {
const supplier = await prisma.supplier.findFirst({
where: { id, deleted_at: null },
});
if (!supplier) {
throw new APIError('Supplier tidak ditemukan', 404);
}
return supplier;
}
static async create(data: any, actorId: number, ip: string, userAgent: string) {
const supplier = await prisma.supplier.create({
data: {
nama: data.nama,
kontak: data.kontak ?? null,
nomor_hp: data.nomor_hp ?? null,
alamat: data.alamat ?? null,
hutang: data.hutang ?? 0,
aktif: data.aktif ?? 1,
},
});
await catatAudit({
userId: actorId,
aksi: 'create',
entitas: 'supplier',
entitasId: supplier.id,
dataBaru: { nama: supplier.nama, kontak: supplier.kontak, hutang: Number(supplier.hutang) },
ipAddress: ip,
userAgent,
});
return supplier;
}
static async update(id: number, data: any, actorId: number, ip: string, userAgent: string) {
const supplier = await this.getSupplierById(id);
const dataLama = {
nama: supplier.nama,
kontak: supplier.kontak,
nomor_hp: supplier.nomor_hp,
alamat: supplier.alamat,
hutang: Number(supplier.hutang),
aktif: supplier.aktif,
};
const updateData: any = {};
if (data.nama !== undefined) updateData.nama = data.nama;
if (data.kontak !== undefined) updateData.kontak = data.kontak;
if (data.nomor_hp !== undefined) updateData.nomor_hp = data.nomor_hp;
if (data.alamat !== undefined) updateData.alamat = data.alamat;
if (data.hutang !== undefined) updateData.hutang = data.hutang;
if (data.aktif !== undefined) updateData.aktif = data.aktif;
const updated = await prisma.supplier.update({
where: { id },
data: updateData,
});
const dataBaru = {
nama: updated.nama,
kontak: updated.kontak,
nomor_hp: updated.nomor_hp,
alamat: updated.alamat,
hutang: Number(updated.hutang),
aktif: updated.aktif,
};
await catatAudit({
userId: actorId,
aksi: 'update',
entitas: 'supplier',
entitasId: updated.id,
dataLama,
dataBaru,
ipAddress: ip,
userAgent,
});
return updated;
}
static async delete(id: number, actorId: number, ip: string, userAgent: string) {
const supplier = await this.getSupplierById(id);
await moveToTrash({
instance: supplier,
entityType: 'supplier',
actorId,
});
await catatAudit({
userId: actorId,
aksi: 'delete',
entitas: 'supplier',
entitasId: supplier.id,
dataLama: { nama: supplier.nama, aktif: 1 },
dataBaru: { nama: supplier.nama, aktif: 0 },
ipAddress: ip,
userAgent,
});
return true;
}
}