Refactor event handling and user management: Replace direct database calls with service layer methods for events, user profiles, and preferences, enhancing code organization and maintainability. Update API routes to utilize new services for event registration, feedback, and user statistics, ensuring a consistent approach across the application.
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { auth } from "@/lib/auth";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { calculateEventStatus } from "@/lib/eventStatus";
|
||||
import { eventRegistrationService } from "@/services/events/event-registration.service";
|
||||
import {
|
||||
ValidationError,
|
||||
NotFoundError,
|
||||
ConflictError,
|
||||
} from "@/services/errors";
|
||||
|
||||
export async function POST(
|
||||
request: Request,
|
||||
@@ -19,50 +23,10 @@ export async function POST(
|
||||
|
||||
const { id: eventId } = await params;
|
||||
|
||||
// Vérifier si l'événement existe
|
||||
const event = await prisma.event.findUnique({
|
||||
where: { id: eventId },
|
||||
});
|
||||
|
||||
if (!event) {
|
||||
return NextResponse.json(
|
||||
{ error: "Événement introuvable" },
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
const eventStatus = calculateEventStatus(event.date);
|
||||
if (eventStatus !== "UPCOMING") {
|
||||
return NextResponse.json(
|
||||
{ error: "Vous ne pouvez vous inscrire qu'aux événements à venir" },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
// Vérifier si l'utilisateur est déjà inscrit
|
||||
const existingRegistration = await prisma.eventRegistration.findUnique({
|
||||
where: {
|
||||
userId_eventId: {
|
||||
userId: session.user.id,
|
||||
eventId: eventId,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (existingRegistration) {
|
||||
return NextResponse.json(
|
||||
{ error: "Vous êtes déjà inscrit à cet événement" },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
// Créer l'inscription
|
||||
const registration = await prisma.eventRegistration.create({
|
||||
data: {
|
||||
userId: session.user.id,
|
||||
eventId: eventId,
|
||||
},
|
||||
});
|
||||
const registration = await eventRegistrationService.validateAndRegisterUser(
|
||||
session.user.id,
|
||||
eventId
|
||||
);
|
||||
|
||||
return NextResponse.json(
|
||||
{ message: "Inscription réussie", registration },
|
||||
@@ -70,6 +34,17 @@ export async function POST(
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Registration error:", error);
|
||||
|
||||
if (
|
||||
error instanceof ValidationError ||
|
||||
error instanceof ConflictError
|
||||
) {
|
||||
return NextResponse.json({ error: error.message }, { status: 400 });
|
||||
}
|
||||
if (error instanceof NotFoundError) {
|
||||
return NextResponse.json({ error: error.message }, { status: 404 });
|
||||
}
|
||||
|
||||
return NextResponse.json(
|
||||
{ error: "Une erreur est survenue lors de l'inscription" },
|
||||
{ status: 500 }
|
||||
@@ -94,12 +69,10 @@ export async function DELETE(
|
||||
const { id: eventId } = await params;
|
||||
|
||||
// Supprimer l'inscription
|
||||
await prisma.eventRegistration.deleteMany({
|
||||
where: {
|
||||
userId: session.user.id,
|
||||
eventId: eventId,
|
||||
},
|
||||
});
|
||||
await eventRegistrationService.unregisterUserFromEvent(
|
||||
session.user.id,
|
||||
eventId
|
||||
);
|
||||
|
||||
return NextResponse.json({ message: "Inscription annulée" });
|
||||
} catch (error) {
|
||||
@@ -124,16 +97,12 @@ export async function GET(
|
||||
|
||||
const { id: eventId } = await params;
|
||||
|
||||
const registration = await prisma.eventRegistration.findUnique({
|
||||
where: {
|
||||
userId_eventId: {
|
||||
userId: session.user.id,
|
||||
eventId: eventId,
|
||||
},
|
||||
},
|
||||
});
|
||||
const isRegistered = await eventRegistrationService.checkUserRegistration(
|
||||
session.user.id,
|
||||
eventId
|
||||
);
|
||||
|
||||
return NextResponse.json({ registered: !!registration });
|
||||
return NextResponse.json({ registered: isRegistered });
|
||||
} catch (error) {
|
||||
console.error("Check registration error:", error);
|
||||
return NextResponse.json({ registered: false });
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { eventService } from "@/services/events/event.service";
|
||||
|
||||
export async function GET(
|
||||
request: Request,
|
||||
@@ -8,9 +8,7 @@ export async function GET(
|
||||
try {
|
||||
const { id } = await params;
|
||||
|
||||
const event = await prisma.event.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
const event = await eventService.getEventById(id);
|
||||
|
||||
if (!event) {
|
||||
return NextResponse.json(
|
||||
|
||||
Reference in New Issue
Block a user