"add PartyEvent API endpoints with service layer and test cases"
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
// src/app/services/party-event.service.ts
|
||||
//
|
||||
// PURPOSE:
|
||||
// - Service for handling EventItem (PartyEvent) Record
|
||||
//
|
||||
|
||||
import type { EventItem } from '@prisma/client';
|
||||
|
||||
import prisma from '../lib/prisma';
|
||||
|
||||
type CreateEvent = {
|
||||
name: string;
|
||||
title: string;
|
||||
eventDate: Date;
|
||||
location: string;
|
||||
duration_m: number;
|
||||
ageBottom?: number;
|
||||
ageTop?: number;
|
||||
currency?: string;
|
||||
price?: number;
|
||||
priceSale?: number;
|
||||
coverUrl?: string;
|
||||
images?: string[];
|
||||
description?: string;
|
||||
subDescription?: string;
|
||||
publish?: string;
|
||||
category?: string;
|
||||
tags?: string[];
|
||||
joinMembers?: any[];
|
||||
};
|
||||
|
||||
type UpdateEvent = {
|
||||
name?: string;
|
||||
title?: string;
|
||||
eventDate?: Date;
|
||||
location?: string;
|
||||
duration_m?: number;
|
||||
ageBottom?: number;
|
||||
ageTop?: number;
|
||||
currency?: string;
|
||||
price?: number;
|
||||
priceSale?: number;
|
||||
coverUrl?: string;
|
||||
images?: string[];
|
||||
description?: string;
|
||||
subDescription?: string;
|
||||
publish?: string;
|
||||
category?: string;
|
||||
tags?: string[];
|
||||
joinMembers?: any[];
|
||||
};
|
||||
|
||||
async function listEvents(): Promise<EventItem[]> {
|
||||
return prisma.eventItem.findMany({
|
||||
include: { reviews: true },
|
||||
});
|
||||
}
|
||||
|
||||
async function getEvent(eventId: string): Promise<EventItem | null> {
|
||||
return prisma.eventItem.findUnique({
|
||||
where: { id: eventId },
|
||||
include: { reviews: true },
|
||||
});
|
||||
}
|
||||
|
||||
async function getEventByNameOrTitle(searchText: string): Promise<EventItem[] | null> {
|
||||
return prisma.eventItem.findMany({
|
||||
where: {
|
||||
OR: [{ name: { contains: searchText, mode: 'insensitive' } }, { title: { contains: searchText, mode: 'insensitive' } }],
|
||||
},
|
||||
include: { reviews: true },
|
||||
});
|
||||
}
|
||||
|
||||
async function createEvent(eventData: any) {
|
||||
return await prisma.eventItem.create({ data: eventData });
|
||||
}
|
||||
|
||||
async function updateEvent(eventId: string, updateForm: UpdateEvent) {
|
||||
return prisma.eventItem.update({
|
||||
where: { id: eventId },
|
||||
data: updateForm,
|
||||
});
|
||||
}
|
||||
|
||||
async function deleteEvent(eventId: string) {
|
||||
return prisma.eventItem.delete({
|
||||
where: { id: eventId },
|
||||
});
|
||||
}
|
||||
|
||||
export { getEvent, listEvents, createEvent, updateEvent, deleteEvent, getEventByNameOrTitle, type CreateEvent, type UpdateEvent };
|
Reference in New Issue
Block a user