import prisma from '../config/database'; import { Prisma, SubscriptionStatus } from '@prisma/client'; export class SubscriptionRepository { async create(data: Prisma.SubscriptionCreateInput) { return prisma.subscription.create({ data }); } async findById(id: string) { return prisma.subscription.findUnique({ where: { id }, include: { user: true, payments: true }, }); } async findActiveByUserId(userId: string) { return prisma.subscription.findFirst({ where: { userId, status: SubscriptionStatus.ACTIVE }, orderBy: { createdAt: 'desc' }, }); } async findByUserId(userId: string) { return prisma.subscription.findMany({ where: { userId }, orderBy: { createdAt: 'desc' }, include: { payments: true }, }); } async update(id: string, data: Prisma.SubscriptionUpdateInput) { return prisma.subscription.update({ where: { id }, data }); } async expireOverdue() { return prisma.subscription.updateMany({ where: { status: SubscriptionStatus.ACTIVE, endDate: { lt: new Date() }, }, data: { status: SubscriptionStatus.EXPIRED }, }); } async getActiveCount() { return prisma.subscription.count({ where: { status: SubscriptionStatus.ACTIVE }, }); } async getRevenueEstimate() { const payments = await prisma.payment.aggregate({ where: { status: 'PAID' }, _sum: { amount: true }, }); return payments._sum.amount || 0; } } export default new SubscriptionRepository();