import prisma from '../config/database'; import { Prisma, PaymentStatus } from '@prisma/client'; export class PaymentRepository { async create(data: Prisma.PaymentCreateInput) { return prisma.payment.create({ data }); } async findById(id: string) { return prisma.payment.findUnique({ where: { id } }); } async findByInvoiceNumber(invoiceNumber: string) { return prisma.payment.findUnique({ where: { invoiceNumber } }); } async findByUserId(userId: string, page: number, limit: number) { const [payments, total] = await Promise.all([ prisma.payment.findMany({ where: { userId }, skip: (page - 1) * limit, take: limit, orderBy: { createdAt: 'desc' }, }), prisma.payment.count({ where: { userId } }), ]); return { payments, total, page, limit, totalPages: Math.ceil(total / limit) }; } async update(id: string, data: Prisma.PaymentUpdateInput) { return prisma.payment.update({ where: { id }, data }); } async updateByInvoice(invoiceNumber: string, data: Prisma.PaymentUpdateInput) { return prisma.payment.update({ where: { invoiceNumber }, data }); } async getMonthlyRevenue(months = 12) { const startDate = new Date(); startDate.setMonth(startDate.getMonth() - months); return prisma.payment.findMany({ where: { status: PaymentStatus.PAID, paidAt: { gte: startDate }, }, orderBy: { paidAt: 'asc' }, }); } } export default new PaymentRepository();