File size: 2,407 Bytes
6dd9bad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 } });
    }
}