service layer WIP

This commit is contained in:
2025-05-03 23:23:29 +08:00
parent fe89ec9a2b
commit be0eef39c2
8 changed files with 221 additions and 24 deletions

13
src/lib/prisma/client.ts Normal file
View File

@@ -0,0 +1,13 @@
import {PrismaClient} from "@prisma/client";
const globalForPrisma = global as unknown as { prisma: PrismaClient | undefined };
export const prisma =
globalForPrisma.prisma ||
new PrismaClient({
log: ["query", "info", "warn", "error"],
});
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}

View File

@@ -0,0 +1,32 @@
import {prisma} from '@/lib/prisma/client';
import {Pembelian} from "@prisma/client";
export const BeliSawitService = {
createPembelian: (beli: Pembelian) => {
return prisma.pembelian.create({
data: {
...beli,
createdAt: new Date(),
},
})
},
getPembelianById: (id: number) => {
return prisma.pembelian.findUnique({
where: {
id: id,
},
})
},
pembelianExist : (id: number) : boolean => {
const pembelian = prisma.pembelian.findFirst({
where: {
id: id,
},
})
return pembelian !== null
}
}

View File

@@ -0,0 +1,27 @@
import {prisma} from '@/lib/prisma/client';
import {HargaBeli} from "@prisma/client";
export const HargaBeliService = {
// get harga beli. Pass null buat dapatein harga hari ini
getHargaBeli: (tanggal: Date) => {
return prisma.hargaBeli.findFirst({
where: {
tanggal: {
equals: new Date(tanggal.setHours(0,0,0))
|| new Date().setHours(0, 0, 0, 0),
},
},
})
},
create : (harga: HargaBeli)=>{
return prisma.hargaBeli.create({
data: {
...harga,
createdAt: new Date(),
},
})
}
}

View File

@@ -0,0 +1,33 @@
import {prisma} from '@/lib/prisma/client';
import {Petani} from "@prisma/client";
export const PetaniService = {
create: (petani: Petani) => {
return prisma.petani.create({
data: {
...petani,
createdAt: new Date(),
},
})
},
edit: (petani: Petani) => {
return prisma.petani.update({
where: {
id: petani.id,
},
data: {
...petani,
updatedAt: new Date(),
},
})
},
getPetaniById: (id: number) => {
return prisma.petani.findUnique({
where: {
id: id,
},
})
},
}

View File

@@ -0,0 +1,31 @@
import {BeliSawitService} from '@/lib/services/beliSawitService';
import {TimbangService} from '@/lib/services/timbanganService';
import {Timbang} from "@prisma/client";
export const TimbangSawitService = {
timbangSawit : async (timbangan: Timbang) => {
// check if pembelian exist
if (!BeliSawitService.getPembelianById(timbangan.id)) {
throw new Error('Pembelian tidak ditemukan')
}
const listOfTimbang = await TimbangService.listTimbangByPembelianId(timbangan.pembelian_id);
listOfTimbang.push(timbangan);
// check untuk negative selisih timbangan
listOfTimbang.map((row : Timbang, i: number) =>{
const beratSekarang = row.berat;
const beratSelanjutnya = i+1 < listOfTimbang.length ? listOfTimbang[i+1].berat : 0;
const selisih = beratSekarang - beratSelanjutnya;
if (selisih<0){
throw new Error('Timbangan melebihi berat timbangan sebelumnya')
}
})
// all good, create new timbang
return TimbangService.create(timbangan);
},
}

View File

@@ -0,0 +1,42 @@
import {BeliSawitService} from '@/lib/services/beliSawitService';
import {prisma} from '@/lib/prisma/client';
import {Timbang} from "@prisma/client";
export const TimbangService = {
create: (timbang: Timbang) => {
if (!BeliSawitService.pembelianExist(timbang.pembelian_id)){
throw new Error('Pembelian tidak ditemukan')
}
return prisma.timbang.create({
data: {
...timbang,
createdAt: new Date(),
},
})
},
edit: (timbang: Timbang) => {
return prisma.timbang.update({
where: {
id: timbang.id,
},
data: {
...timbang,
updatedAt: new Date(),
},
})
},
// get list timbang by pembelian id
listTimbangByPembelianId: (id: number) => {
return prisma.timbang.findMany({
where: {
pembelian_id: id,
},
orderBy: {
waktu: "asc",
},
})
},
}