a752a399c2
Build & Deploy / Build & Push Docker Image (push) Successful in 12m39s
Test / Type Check (all packages) (push) Successful in 5m8s
Build & Deploy / Deploy to VPS (push) Successful in 7s
Test / API Unit Tests (push) Failing after 4m24s
Test / Homepage Unit Tests (push) Successful in 3m27s
Test / Storefront Unit Tests (push) Successful in 4m48s
Test / Admin Unit Tests (push) Successful in 3m0s
Test / Dashboard Unit Tests (push) Successful in 4m18s
Test / API Integration Tests (push) Failing after 4m34s
99 lines
3.7 KiB
TypeScript
99 lines
3.7 KiB
TypeScript
import { prisma } from '../../lib/prisma'
|
|
|
|
export function findByCompany(companyId: string) {
|
|
return prisma.rentalPayment.findMany({
|
|
where: { companyId },
|
|
include: { reservation: { include: { customer: true, vehicle: true } } },
|
|
orderBy: { createdAt: 'desc' },
|
|
take: 100,
|
|
})
|
|
}
|
|
|
|
export function findByReservation(reservationId: string, companyId: string) {
|
|
return prisma.rentalPayment.findMany({ where: { reservationId, companyId }, orderBy: { createdAt: 'desc' } })
|
|
}
|
|
|
|
export function findByAmanpay(transactionId: string) {
|
|
return prisma.rentalPayment.findFirst({ where: { amanpayTransactionId: transactionId } })
|
|
}
|
|
|
|
export function findByPaypal(captureId: string) {
|
|
return prisma.rentalPayment.findFirst({ where: { paypalCaptureId: captureId } })
|
|
}
|
|
|
|
export function findByPaypalForCompany(paypalOrderId: string, companyId: string) {
|
|
return prisma.rentalPayment.findFirstOrThrow({ where: { paypalCaptureId: paypalOrderId, companyId } })
|
|
}
|
|
|
|
export function findPaymentOrThrow(paymentId: string, companyId: string, reservationId: string) {
|
|
return prisma.rentalPayment.findFirstOrThrow({ where: { id: paymentId, companyId, reservationId } })
|
|
}
|
|
|
|
export function findReservationOrThrow(id: string, companyId: string) {
|
|
return prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { vehicle: true, customer: true, rentalPayments: true },
|
|
})
|
|
}
|
|
|
|
export function findReservation(id: string, companyId: string) {
|
|
return prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { rentalPayments: true },
|
|
})
|
|
}
|
|
|
|
export function markPaymentSucceeded(id: string) {
|
|
return prisma.rentalPayment.update({ where: { id }, data: { status: 'SUCCEEDED', paidAt: new Date() } })
|
|
}
|
|
|
|
export function markPaymentFailed(query: { amanpayTransactionId?: string; paypalCaptureId?: string }) {
|
|
return prisma.rentalPayment.updateMany({ where: query, data: { status: 'FAILED' } })
|
|
}
|
|
|
|
export function incrementReservationPaid(reservationId: string, _amount: number) {
|
|
return prisma.$transaction(async (tx) => {
|
|
const reservation = await tx.reservation.findUniqueOrThrow({
|
|
where: { id: reservationId },
|
|
include: {
|
|
rentalPayments: {
|
|
where: { type: 'CHARGE', status: 'SUCCEEDED' },
|
|
select: { amount: true },
|
|
},
|
|
},
|
|
})
|
|
const paidAmount = reservation.rentalPayments.reduce((total, payment) => total + payment.amount, 0)
|
|
return tx.reservation.update({
|
|
where: { id: reservationId },
|
|
data: {
|
|
paidAmount,
|
|
paymentStatus: paidAmount >= reservation.totalAmount ? 'PAID' : 'PARTIAL',
|
|
},
|
|
})
|
|
})
|
|
}
|
|
|
|
export function createPayment(data: {
|
|
companyId: string; reservationId: string; amount: number; currency: string
|
|
status: string; type: string; paymentProvider: string
|
|
amanpayTransactionId?: string | null; paypalCaptureId?: string | null; paymentMethod?: string; paidAt?: Date
|
|
}) {
|
|
return prisma.rentalPayment.create({ data: data as any })
|
|
}
|
|
|
|
export function updatePaypalCapture(id: string, captureId: string) {
|
|
return prisma.rentalPayment.update({ where: { id }, data: { status: 'SUCCEEDED', paidAt: new Date(), paypalCaptureId: captureId } })
|
|
}
|
|
|
|
export function setReservationPaidAmount(reservationId: string, paidAmount: number, paymentStatus: string) {
|
|
return prisma.reservation.update({ where: { id: reservationId }, data: { paidAmount, paymentStatus: paymentStatus as any } })
|
|
}
|
|
|
|
export function setReservationRefunded(reservationId: string) {
|
|
return prisma.reservation.update({ where: { id: reservationId }, data: { paymentStatus: 'REFUNDED' } })
|
|
}
|
|
|
|
export function setPaymentRefunded(id: string, partial: boolean) {
|
|
return prisma.rentalPayment.update({ where: { id }, data: { status: partial ? 'PARTIALLY_REFUNDED' : 'REFUNDED' } })
|
|
}
|