service layer WIP
This commit is contained in:
13
src/lib/prisma/client.ts
Normal file
13
src/lib/prisma/client.ts
Normal 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;
|
||||
}
|
||||
32
src/lib/services/beliSawitService.ts
Normal file
32
src/lib/services/beliSawitService.ts
Normal 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
|
||||
}
|
||||
|
||||
}
|
||||
27
src/lib/services/hargaService.ts
Normal file
27
src/lib/services/hargaService.ts
Normal 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(),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
33
src/lib/services/petaniService.ts
Normal file
33
src/lib/services/petaniService.ts
Normal 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,
|
||||
},
|
||||
})
|
||||
},
|
||||
}
|
||||
31
src/lib/services/timbangSawitService.ts
Normal file
31
src/lib/services/timbangSawitService.ts
Normal 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);
|
||||
},
|
||||
}
|
||||
42
src/lib/services/timbanganService.ts
Normal file
42
src/lib/services/timbanganService.ts
Normal 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",
|
||||
},
|
||||
})
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user