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 } });
}
}
|