import { prisma } from './prisma'; export class TrackService { static async listTracks(organizationId: string) { return prisma.track.findMany({ where: { organizationId }, include: { _count: { select: { days: true, enrollments: true } } }, orderBy: { createdAt: 'desc' } }); } static async getTrack(organizationId: string, trackId: string) { return prisma.track.findFirst({ where: { id: trackId, organizationId }, include: { days: { orderBy: { dayNumber: 'asc' } } } }); } static async createTrack(organizationId: string, data: any) { return prisma.track.create({ data: { ...data, organizationId } }); } static async updateTrack(organizationId: string, trackId: string, data: any) { return prisma.track.update({ where: { id: trackId, organizationId }, data }); } static async deleteTrack(organizationId: string, trackId: string) { const track = await prisma.track.findFirst({ where: { id: trackId, organizationId } }); if (!track) return false; await prisma.trackDay.deleteMany({ where: { trackId, organizationId } }); await prisma.track.delete({ where: { id: trackId, organizationId } }); return true; } // Days management static async listDays(organizationId: string, trackId: string) { return prisma.trackDay.findMany({ where: { trackId, organizationId }, orderBy: { dayNumber: 'asc' } }); } static async createDay(organizationId: string, trackId: string, data: any) { return prisma.trackDay.create({ data: { ...data, trackId, organizationId, audioUrl: data.audioUrl || null, buttonsJson: data.buttonsJson ? data.buttonsJson : undefined } }); } static async updateDay(organizationId: string, dayId: string, data: any) { return prisma.trackDay.update({ where: { id: dayId, organizationId }, data: { ...data, audioUrl: data.audioUrl === '' ? null : data.audioUrl } }); } static async deleteDay(organizationId: string, dayId: string) { await prisma.trackDay.delete({ where: { id: dayId, organizationId } }); } }