Enhance event model and management: Add new fields for room, time, and maxPlaces to the Event model in Prisma schema. Update API routes and UI components to support these fields, improving event details and user interaction in event management and registration processes.
This commit is contained in:
@@ -16,7 +16,7 @@ export async function PUT(
|
||||
|
||||
const { id } = await params;
|
||||
const body = await request.json();
|
||||
const { date, name, description, type, status } = body;
|
||||
const { date, name, description, type, status, room, time, maxPlaces } = body;
|
||||
|
||||
// Vérifier que l'événement existe
|
||||
const existingEvent = await prisma.event.findUnique({
|
||||
@@ -36,6 +36,9 @@ export async function PUT(
|
||||
description?: string;
|
||||
type?: EventType;
|
||||
status?: EventStatus;
|
||||
room?: string | null;
|
||||
time?: string | null;
|
||||
maxPlaces?: number | null;
|
||||
} = {};
|
||||
|
||||
if (date !== undefined) updateData.date = date;
|
||||
@@ -59,6 +62,9 @@ export async function PUT(
|
||||
}
|
||||
updateData.status = status as EventStatus;
|
||||
}
|
||||
if (room !== undefined) updateData.room = room || null;
|
||||
if (time !== undefined) updateData.time = time || null;
|
||||
if (maxPlaces !== undefined) updateData.maxPlaces = maxPlaces ? parseInt(maxPlaces) : null;
|
||||
|
||||
const event = await prisma.event.update({
|
||||
where: { id },
|
||||
|
||||
@@ -22,6 +22,9 @@ export async function GET() {
|
||||
description: true,
|
||||
type: true,
|
||||
status: true,
|
||||
room: true,
|
||||
time: true,
|
||||
maxPlaces: true,
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
_count: {
|
||||
@@ -40,6 +43,9 @@ export async function GET() {
|
||||
description: event.description,
|
||||
type: event.type,
|
||||
status: event.status,
|
||||
room: event.room,
|
||||
time: event.time,
|
||||
maxPlaces: event.maxPlaces,
|
||||
createdAt: event.createdAt.toISOString(),
|
||||
updatedAt: event.updatedAt.toISOString(),
|
||||
registrationsCount: event._count.registrations,
|
||||
@@ -64,7 +70,7 @@ export async function POST(request: Request) {
|
||||
}
|
||||
|
||||
const body = await request.json();
|
||||
const { date, name, description, type, status } = body;
|
||||
const { date, name, description, type, status, room, time, maxPlaces } = body;
|
||||
|
||||
if (!date || !name || !description || !type || !status) {
|
||||
return NextResponse.json(
|
||||
@@ -95,6 +101,9 @@ export async function POST(request: Request) {
|
||||
description,
|
||||
type: type as EventType,
|
||||
status: status as EventStatus,
|
||||
room: room || null,
|
||||
time: time || null,
|
||||
maxPlaces: maxPlaces ? parseInt(maxPlaces) : null,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -7,8 +7,11 @@ interface Event {
|
||||
date: string;
|
||||
name: string;
|
||||
description: string;
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION";
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION" | "CODE_KATA";
|
||||
status: "UPCOMING" | "LIVE" | "PAST";
|
||||
room?: string | null;
|
||||
time?: string | null;
|
||||
maxPlaces?: number | null;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
registrationsCount?: number;
|
||||
@@ -18,8 +21,11 @@ interface EventFormData {
|
||||
date: string;
|
||||
name: string;
|
||||
description: string;
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION";
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION" | "CODE_KATA";
|
||||
status: "UPCOMING" | "LIVE" | "PAST";
|
||||
room?: string;
|
||||
time?: string;
|
||||
maxPlaces?: number;
|
||||
}
|
||||
|
||||
const eventTypes: Event["type"][] = [
|
||||
@@ -27,6 +33,7 @@ const eventTypes: Event["type"][] = [
|
||||
"LAUNCH",
|
||||
"FESTIVAL",
|
||||
"COMPETITION",
|
||||
"CODE_KATA",
|
||||
];
|
||||
const eventStatuses: Event["status"][] = ["UPCOMING", "LIVE", "PAST"];
|
||||
|
||||
@@ -40,6 +47,8 @@ const getEventTypeLabel = (type: Event["type"]) => {
|
||||
return "Festival";
|
||||
case "COMPETITION":
|
||||
return "Compétition";
|
||||
case "CODE_KATA":
|
||||
return "Code Kata";
|
||||
default:
|
||||
return type;
|
||||
}
|
||||
@@ -70,6 +79,9 @@ export default function EventManagement() {
|
||||
description: "",
|
||||
type: "SUMMIT",
|
||||
status: "UPCOMING",
|
||||
room: "",
|
||||
time: "",
|
||||
maxPlaces: undefined,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
@@ -99,6 +111,9 @@ export default function EventManagement() {
|
||||
description: "",
|
||||
type: "SUMMIT",
|
||||
status: "UPCOMING",
|
||||
room: "",
|
||||
time: "",
|
||||
maxPlaces: undefined,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -111,6 +126,9 @@ export default function EventManagement() {
|
||||
description: event.description,
|
||||
type: event.type,
|
||||
status: event.status,
|
||||
room: event.room || "",
|
||||
time: event.time || "",
|
||||
maxPlaces: event.maxPlaces || undefined,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -146,6 +164,9 @@ export default function EventManagement() {
|
||||
description: "",
|
||||
type: "SUMMIT",
|
||||
status: "UPCOMING",
|
||||
room: "",
|
||||
time: "",
|
||||
maxPlaces: undefined,
|
||||
});
|
||||
} else {
|
||||
const error = await response?.json();
|
||||
@@ -190,6 +211,9 @@ export default function EventManagement() {
|
||||
description: "",
|
||||
type: "SUMMIT",
|
||||
status: "UPCOMING",
|
||||
room: "",
|
||||
time: "",
|
||||
maxPlaces: undefined,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -298,6 +322,55 @@ export default function EventManagement() {
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label className="block text-sm text-gray-300 mb-1">
|
||||
Salle
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.room || ""}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, room: e.target.value })
|
||||
}
|
||||
placeholder="Ex: Nautilus"
|
||||
className="w-full px-3 py-2 bg-black/60 border border-pixel-gold/30 rounded text-white text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-sm text-gray-300 mb-1">
|
||||
Heure
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.time || ""}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, time: e.target.value })
|
||||
}
|
||||
placeholder="Ex: 11h-12h"
|
||||
className="w-full px-3 py-2 bg-black/60 border border-pixel-gold/30 rounded text-white text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-sm text-gray-300 mb-1">
|
||||
Places max
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
value={formData.maxPlaces || ""}
|
||||
onChange={(e) =>
|
||||
setFormData({
|
||||
...formData,
|
||||
maxPlaces: e.target.value
|
||||
? parseInt(e.target.value)
|
||||
: undefined,
|
||||
})
|
||||
}
|
||||
placeholder="Ex: 25"
|
||||
className="w-full px-3 py-2 bg-black/60 border border-pixel-gold/30 rounded text-white text-sm"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
onClick={handleSave}
|
||||
@@ -352,10 +425,25 @@ export default function EventManagement() {
|
||||
<p className="text-gray-400 text-sm mb-2">
|
||||
{event.description}
|
||||
</p>
|
||||
<div className="flex items-center gap-4 mt-2">
|
||||
<div className="flex flex-wrap items-center gap-4 mt-2">
|
||||
<p className="text-gray-500 text-xs">
|
||||
Date: {new Date(event.date).toLocaleDateString("fr-FR")}
|
||||
</p>
|
||||
{event.room && (
|
||||
<p className="text-gray-500 text-xs">
|
||||
📍 Salle: {event.room}
|
||||
</p>
|
||||
)}
|
||||
{event.time && (
|
||||
<p className="text-gray-500 text-xs">
|
||||
🕐 Heure: {event.time}
|
||||
</p>
|
||||
)}
|
||||
{event.maxPlaces && (
|
||||
<p className="text-gray-500 text-xs">
|
||||
👥 Places: {event.maxPlaces}
|
||||
</p>
|
||||
)}
|
||||
<span className="px-2 py-1 bg-blue-900/30 border border-blue-500/50 text-blue-400 text-xs rounded">
|
||||
{event.registrationsCount || 0} inscrit
|
||||
{event.registrationsCount !== 1 ? "s" : ""}
|
||||
|
||||
@@ -9,8 +9,11 @@ interface Event {
|
||||
date: string;
|
||||
name: string;
|
||||
description: string;
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION";
|
||||
type: "SUMMIT" | "LAUNCH" | "FESTIVAL" | "COMPETITION" | "CODE_KATA";
|
||||
status: "UPCOMING" | "LIVE" | "PAST";
|
||||
room?: string | null;
|
||||
time?: string | null;
|
||||
maxPlaces?: number | null;
|
||||
}
|
||||
|
||||
interface EventsPageSectionProps {
|
||||
@@ -29,6 +32,8 @@ const getEventTypeColor = (type: Event["type"]) => {
|
||||
return "from-pixel-gold to-orange-500";
|
||||
case "COMPETITION":
|
||||
return "from-red-600 to-orange-500";
|
||||
case "CODE_KATA":
|
||||
return "from-green-600 to-emerald-500";
|
||||
default:
|
||||
return "from-gray-600 to-gray-500";
|
||||
}
|
||||
@@ -44,6 +49,8 @@ const getEventTypeLabel = (type: Event["type"]) => {
|
||||
return "Festival";
|
||||
case "COMPETITION":
|
||||
return "Compétition";
|
||||
case "CODE_KATA":
|
||||
return "Code Kata";
|
||||
default:
|
||||
return type;
|
||||
}
|
||||
@@ -84,6 +91,7 @@ export default function EventsPageSection({
|
||||
const [loading, setLoading] = useState<Record<string, boolean>>({});
|
||||
const [error, setError] = useState<string>("");
|
||||
const [currentMonth, setCurrentMonth] = useState(new Date());
|
||||
const [selectedEvent, setSelectedEvent] = useState<Event | null>(null);
|
||||
|
||||
// Déterminer si on a des données initiales valides
|
||||
const hasInitialData = useMemo(
|
||||
@@ -338,10 +346,16 @@ export default function EventsPageSection({
|
||||
);
|
||||
};
|
||||
|
||||
const truncateDescription = (text: string, maxLength: number = 150) => {
|
||||
if (text.length <= maxLength) return text;
|
||||
return text.substring(0, maxLength).trim() + "...";
|
||||
};
|
||||
|
||||
const renderEventCard = (event: Event) => (
|
||||
<div
|
||||
key={event.id}
|
||||
className="bg-black/60 border border-pixel-gold/30 rounded-lg overflow-hidden backdrop-blur-sm hover:border-pixel-gold/50 transition group"
|
||||
onClick={() => setSelectedEvent(event)}
|
||||
className="bg-black/60 border border-pixel-gold/30 rounded-lg overflow-hidden backdrop-blur-sm hover:border-pixel-gold/50 transition group cursor-pointer"
|
||||
>
|
||||
{/* Event Header */}
|
||||
<div
|
||||
@@ -368,17 +382,52 @@ export default function EventsPageSection({
|
||||
{event.name}
|
||||
</h3>
|
||||
|
||||
{/* Description */}
|
||||
{/* Event Details */}
|
||||
{(event.room || event.time || event.maxPlaces) && (
|
||||
<div className="flex flex-wrap gap-3 mb-4 text-sm">
|
||||
{event.room && (
|
||||
<div className="flex items-center gap-1.5 text-gray-300">
|
||||
<span className="text-pixel-gold">📍</span>
|
||||
<span className="font-semibold">Salle:</span>
|
||||
<span>{event.room}</span>
|
||||
</div>
|
||||
)}
|
||||
{event.time && (
|
||||
<div className="flex items-center gap-1.5 text-gray-300">
|
||||
<span className="text-pixel-gold">🕐</span>
|
||||
<span className="font-semibold">Heure:</span>
|
||||
<span>{event.time}</span>
|
||||
</div>
|
||||
)}
|
||||
{event.maxPlaces && (
|
||||
<div className="flex items-center gap-1.5 text-gray-300">
|
||||
<span className="text-pixel-gold">👥</span>
|
||||
<span className="font-semibold">Places:</span>
|
||||
<span>{event.maxPlaces}</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Description (truncated) */}
|
||||
<p className="text-gray-400 text-sm leading-relaxed mb-4">
|
||||
{event.description}
|
||||
{truncateDescription(event.description)}
|
||||
</p>
|
||||
{event.description.length > 150 && (
|
||||
<p className="text-pixel-gold text-xs mb-4 italic">
|
||||
Cliquez pour voir plus...
|
||||
</p>
|
||||
)}
|
||||
|
||||
{/* Action Button */}
|
||||
{event.status === "UPCOMING" && (
|
||||
<>
|
||||
{registrations[event.id] ? (
|
||||
<button
|
||||
onClick={() => handleUnregister(event.id)}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleUnregister(event.id);
|
||||
}}
|
||||
disabled={loading[event.id]}
|
||||
className="w-full px-4 py-2 border border-green-500/50 bg-green-900/20 text-green-400 uppercase text-xs tracking-widest rounded hover:bg-green-900/30 transition disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
@@ -386,7 +435,10 @@ export default function EventsPageSection({
|
||||
</button>
|
||||
) : (
|
||||
<button
|
||||
onClick={() => handleRegister(event.id)}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleRegister(event.id);
|
||||
}}
|
||||
disabled={loading[event.id]}
|
||||
className="w-full px-4 py-2 border border-pixel-gold/50 bg-black/40 text-white uppercase text-xs tracking-widest rounded hover:bg-pixel-gold/10 hover:border-pixel-gold transition disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
@@ -557,6 +609,160 @@ export default function EventsPageSection({
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Event Modal */}
|
||||
{selectedEvent && (
|
||||
<div
|
||||
className="fixed inset-0 z-[200] flex items-center justify-center p-4 bg-black/80 backdrop-blur-sm"
|
||||
onClick={() => setSelectedEvent(null)}
|
||||
>
|
||||
<div
|
||||
className="bg-black border-2 border-pixel-gold/70 rounded-lg max-w-3xl w-full max-h-[90vh] overflow-y-auto shadow-2xl"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<div className="p-8">
|
||||
{/* Header */}
|
||||
<div className="flex items-center justify-between mb-6">
|
||||
<div className="flex-1">
|
||||
<div className="flex items-center gap-3 mb-2">
|
||||
{getStatusBadge(selectedEvent.status)}
|
||||
<span className="px-3 py-1 bg-pixel-gold/20 border border-pixel-gold/50 text-pixel-gold text-xs uppercase rounded">
|
||||
{getEventTypeLabel(selectedEvent.type)}
|
||||
</span>
|
||||
</div>
|
||||
<h2 className="text-3xl font-bold text-white uppercase tracking-wide">
|
||||
{selectedEvent.name}
|
||||
</h2>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => setSelectedEvent(null)}
|
||||
className="text-gray-400 hover:text-pixel-gold text-3xl font-bold transition ml-4"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Event Header Color Bar */}
|
||||
<div
|
||||
className={`h-1 bg-gradient-to-r ${getEventTypeColor(
|
||||
selectedEvent.type
|
||||
)} mb-6 rounded`}
|
||||
></div>
|
||||
|
||||
{/* Date */}
|
||||
<div className="text-white text-lg font-bold uppercase tracking-widest mb-4">
|
||||
{selectedEvent.date}
|
||||
</div>
|
||||
|
||||
{/* Event Details */}
|
||||
{(selectedEvent.room ||
|
||||
selectedEvent.time ||
|
||||
selectedEvent.maxPlaces) && (
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
|
||||
{selectedEvent.room && (
|
||||
<div className="flex items-center gap-2 text-gray-300 bg-black/40 p-3 rounded border border-pixel-gold/20">
|
||||
<span className="text-pixel-gold text-xl">📍</span>
|
||||
<div>
|
||||
<div className="text-xs text-gray-400 uppercase tracking-wider">
|
||||
Salle
|
||||
</div>
|
||||
<div className="font-semibold">
|
||||
{selectedEvent.room}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{selectedEvent.time && (
|
||||
<div className="flex items-center gap-2 text-gray-300 bg-black/40 p-3 rounded border border-pixel-gold/20">
|
||||
<span className="text-pixel-gold text-xl">🕐</span>
|
||||
<div>
|
||||
<div className="text-xs text-gray-400 uppercase tracking-wider">
|
||||
Heure
|
||||
</div>
|
||||
<div className="font-semibold">
|
||||
{selectedEvent.time}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{selectedEvent.maxPlaces && (
|
||||
<div className="flex items-center gap-2 text-gray-300 bg-black/40 p-3 rounded border border-pixel-gold/20">
|
||||
<span className="text-pixel-gold text-xl">👥</span>
|
||||
<div>
|
||||
<div className="text-xs text-gray-400 uppercase tracking-wider">
|
||||
Places
|
||||
</div>
|
||||
<div className="font-semibold">
|
||||
{selectedEvent.maxPlaces}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Full Description */}
|
||||
<div className="mb-6">
|
||||
<h3 className="text-pixel-gold text-sm uppercase tracking-widest mb-3">
|
||||
Description
|
||||
</h3>
|
||||
<p className="text-gray-300 text-sm leading-relaxed whitespace-pre-line">
|
||||
{selectedEvent.description}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Action Button */}
|
||||
{selectedEvent.status === "UPCOMING" && (
|
||||
<div className="pt-4 border-t border-pixel-gold/20">
|
||||
{registrations[selectedEvent.id] ? (
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleUnregister(selectedEvent.id);
|
||||
setSelectedEvent(null);
|
||||
}}
|
||||
disabled={loading[selectedEvent.id]}
|
||||
className="w-full px-4 py-3 border border-green-500/50 bg-green-900/20 text-green-400 uppercase text-sm tracking-widest rounded hover:bg-green-900/30 transition disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
{loading[selectedEvent.id]
|
||||
? "Annulation..."
|
||||
: "Se désinscrire"}
|
||||
</button>
|
||||
) : (
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleRegister(selectedEvent.id);
|
||||
setSelectedEvent(null);
|
||||
}}
|
||||
disabled={loading[selectedEvent.id]}
|
||||
className="w-full px-4 py-3 border border-pixel-gold/50 bg-pixel-gold/10 text-white uppercase text-sm tracking-widest rounded hover:bg-pixel-gold/20 hover:border-pixel-gold transition disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
{loading[selectedEvent.id]
|
||||
? "Inscription..."
|
||||
: "S'inscrire maintenant"}
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
{selectedEvent.status === "LIVE" && (
|
||||
<div className="pt-4 border-t border-pixel-gold/20">
|
||||
<button className="w-full px-4 py-3 border border-red-500/50 bg-red-900/20 text-red-400 uppercase text-sm tracking-widest rounded hover:bg-red-900/30 transition animate-pulse">
|
||||
Rejoindre en direct
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
{selectedEvent.status === "PAST" && (
|
||||
<div className="pt-4 border-t border-pixel-gold/20">
|
||||
<button className="w-full px-4 py-3 border border-gray-600/50 bg-gray-900/20 text-gray-500 uppercase text-sm tracking-widest rounded cursor-not-allowed">
|
||||
Événement terminé
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -181,6 +181,17 @@ export type EnumEventStatusFilter<$PrismaModel = never> = {
|
||||
not?: Prisma.NestedEnumEventStatusFilter<$PrismaModel> | $Enums.EventStatus
|
||||
}
|
||||
|
||||
export type IntNullableFilter<$PrismaModel = never> = {
|
||||
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
|
||||
in?: number[] | null
|
||||
notIn?: number[] | null
|
||||
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null
|
||||
}
|
||||
|
||||
export type EnumEventTypeWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.EventType | Prisma.EnumEventTypeFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.EventType[]
|
||||
@@ -201,6 +212,22 @@ export type EnumEventStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
_max?: Prisma.NestedEnumEventStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
|
||||
in?: number[] | null
|
||||
notIn?: number[] | null
|
||||
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
|
||||
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
|
||||
_sum?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedStringFilter<$PrismaModel = never> = {
|
||||
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||
in?: string[]
|
||||
@@ -405,4 +432,31 @@ export type NestedEnumEventStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
_max?: Prisma.NestedEnumEventStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
|
||||
in?: number[] | null
|
||||
notIn?: number[] | null
|
||||
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
|
||||
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
|
||||
_sum?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedIntNullableFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedFloatNullableFilter<$PrismaModel = never> = {
|
||||
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
|
||||
in?: number[] | null
|
||||
notIn?: number[] | null
|
||||
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||
gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,8 @@ export const EventType = {
|
||||
SUMMIT: 'SUMMIT',
|
||||
LAUNCH: 'LAUNCH',
|
||||
FESTIVAL: 'FESTIVAL',
|
||||
COMPETITION: 'COMPETITION'
|
||||
COMPETITION: 'COMPETITION',
|
||||
CODE_KATA: 'CODE_KATA'
|
||||
} as const
|
||||
|
||||
export type EventType = (typeof EventType)[keyof typeof EventType]
|
||||
|
||||
@@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
|
||||
"clientVersion": "7.1.0",
|
||||
"engineVersion": "ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba",
|
||||
"activeProvider": "sqlite",
|
||||
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum EventType {\n SUMMIT\n LAUNCH\n FESTIVAL\n COMPETITION\n}\n\nenum EventStatus {\n UPCOMING\n LIVE\n PAST\n}\n\nenum CharacterClass {\n WARRIOR\n MAGE\n ROGUE\n RANGER\n PALADIN\n ENGINEER\n MERCHANT\n SCHOLAR\n BERSERKER\n NECROMANCER\n}\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String\n username String @unique\n role Role @default(USER)\n score Int @default(0)\n level Int @default(1)\n hp Int @default(1000)\n maxHp Int @default(1000)\n xp Int @default(0)\n maxXp Int @default(5000)\n avatar String?\n bio String?\n characterClass CharacterClass?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n preferences UserPreferences?\n eventRegistrations EventRegistration[]\n\n @@index([score])\n @@index([email])\n}\n\nmodel UserPreferences {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n // Background images for each page\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n\n // Other UI preferences can be added here\n theme String? @default(\"default\")\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Event {\n id String @id @default(cuid())\n date String\n name String\n description String\n type EventType\n status EventStatus\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n registrations EventRegistration[]\n\n @@index([status])\n @@index([date])\n}\n\nmodel EventRegistration {\n id String @id @default(cuid())\n userId String\n eventId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@unique([userId, eventId])\n @@index([userId])\n @@index([eventId])\n}\n\nmodel SitePreferences {\n id String @id @default(\"global\")\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n",
|
||||
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum EventType {\n SUMMIT\n LAUNCH\n FESTIVAL\n COMPETITION\n CODE_KATA\n}\n\nenum EventStatus {\n UPCOMING\n LIVE\n PAST\n}\n\nenum CharacterClass {\n WARRIOR\n MAGE\n ROGUE\n RANGER\n PALADIN\n ENGINEER\n MERCHANT\n SCHOLAR\n BERSERKER\n NECROMANCER\n}\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String\n username String @unique\n role Role @default(USER)\n score Int @default(0)\n level Int @default(1)\n hp Int @default(1000)\n maxHp Int @default(1000)\n xp Int @default(0)\n maxXp Int @default(5000)\n avatar String?\n bio String?\n characterClass CharacterClass?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n preferences UserPreferences?\n eventRegistrations EventRegistration[]\n\n @@index([score])\n @@index([email])\n}\n\nmodel UserPreferences {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n // Background images for each page\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n\n // Other UI preferences can be added here\n theme String? @default(\"default\")\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Event {\n id String @id @default(cuid())\n date String\n name String\n description String\n type EventType\n status EventStatus\n room String?\n time String?\n maxPlaces Int?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n registrations EventRegistration[]\n\n @@index([status])\n @@index([date])\n}\n\nmodel EventRegistration {\n id String @id @default(cuid())\n userId String\n eventId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@unique([userId, eventId])\n @@index([userId])\n @@index([eventId])\n}\n\nmodel SitePreferences {\n id String @id @default(\"global\")\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n",
|
||||
"runtimeDataModel": {
|
||||
"models": {},
|
||||
"enums": {},
|
||||
@@ -28,7 +28,7 @@ const config: runtime.GetPrismaClientConfig = {
|
||||
}
|
||||
}
|
||||
|
||||
config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"level\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxHp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"xp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxXp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"characterClass\",\"kind\":\"enum\",\"type\":\"CharacterClass\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"preferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"eventRegistrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventRegistrationToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"theme\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"EventStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventToEventRegistration\"}],\"dbName\":null},\"EventRegistration\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventRegistrationToUser\"},{\"name\":\"event\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToEventRegistration\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SitePreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
|
||||
config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"level\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxHp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"xp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxXp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"characterClass\",\"kind\":\"enum\",\"type\":\"CharacterClass\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"preferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"eventRegistrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventRegistrationToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"theme\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"EventStatus\"},{\"name\":\"room\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"time\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"maxPlaces\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventToEventRegistration\"}],\"dbName\":null},\"EventRegistration\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventRegistrationToUser\"},{\"name\":\"event\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToEventRegistration\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SitePreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
|
||||
|
||||
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
|
||||
const { Buffer } = await import('node:buffer')
|
||||
|
||||
@@ -857,6 +857,9 @@ export const EventScalarFieldEnum = {
|
||||
description: 'description',
|
||||
type: 'type',
|
||||
status: 'status',
|
||||
room: 'room',
|
||||
time: 'time',
|
||||
maxPlaces: 'maxPlaces',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
@@ -114,6 +114,9 @@ export const EventScalarFieldEnum = {
|
||||
description: 'description',
|
||||
type: 'type',
|
||||
status: 'status',
|
||||
room: 'room',
|
||||
time: 'time',
|
||||
maxPlaces: 'maxPlaces',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
@@ -20,10 +20,20 @@ export type EventModel = runtime.Types.Result.DefaultSelection<Prisma.$EventPayl
|
||||
|
||||
export type AggregateEvent = {
|
||||
_count: EventCountAggregateOutputType | null
|
||||
_avg: EventAvgAggregateOutputType | null
|
||||
_sum: EventSumAggregateOutputType | null
|
||||
_min: EventMinAggregateOutputType | null
|
||||
_max: EventMaxAggregateOutputType | null
|
||||
}
|
||||
|
||||
export type EventAvgAggregateOutputType = {
|
||||
maxPlaces: number | null
|
||||
}
|
||||
|
||||
export type EventSumAggregateOutputType = {
|
||||
maxPlaces: number | null
|
||||
}
|
||||
|
||||
export type EventMinAggregateOutputType = {
|
||||
id: string | null
|
||||
date: string | null
|
||||
@@ -31,6 +41,9 @@ export type EventMinAggregateOutputType = {
|
||||
description: string | null
|
||||
type: $Enums.EventType | null
|
||||
status: $Enums.EventStatus | null
|
||||
room: string | null
|
||||
time: string | null
|
||||
maxPlaces: number | null
|
||||
createdAt: Date | null
|
||||
updatedAt: Date | null
|
||||
}
|
||||
@@ -42,6 +55,9 @@ export type EventMaxAggregateOutputType = {
|
||||
description: string | null
|
||||
type: $Enums.EventType | null
|
||||
status: $Enums.EventStatus | null
|
||||
room: string | null
|
||||
time: string | null
|
||||
maxPlaces: number | null
|
||||
createdAt: Date | null
|
||||
updatedAt: Date | null
|
||||
}
|
||||
@@ -53,12 +69,23 @@ export type EventCountAggregateOutputType = {
|
||||
description: number
|
||||
type: number
|
||||
status: number
|
||||
room: number
|
||||
time: number
|
||||
maxPlaces: number
|
||||
createdAt: number
|
||||
updatedAt: number
|
||||
_all: number
|
||||
}
|
||||
|
||||
|
||||
export type EventAvgAggregateInputType = {
|
||||
maxPlaces?: true
|
||||
}
|
||||
|
||||
export type EventSumAggregateInputType = {
|
||||
maxPlaces?: true
|
||||
}
|
||||
|
||||
export type EventMinAggregateInputType = {
|
||||
id?: true
|
||||
date?: true
|
||||
@@ -66,6 +93,9 @@ export type EventMinAggregateInputType = {
|
||||
description?: true
|
||||
type?: true
|
||||
status?: true
|
||||
room?: true
|
||||
time?: true
|
||||
maxPlaces?: true
|
||||
createdAt?: true
|
||||
updatedAt?: true
|
||||
}
|
||||
@@ -77,6 +107,9 @@ export type EventMaxAggregateInputType = {
|
||||
description?: true
|
||||
type?: true
|
||||
status?: true
|
||||
room?: true
|
||||
time?: true
|
||||
maxPlaces?: true
|
||||
createdAt?: true
|
||||
updatedAt?: true
|
||||
}
|
||||
@@ -88,6 +121,9 @@ export type EventCountAggregateInputType = {
|
||||
description?: true
|
||||
type?: true
|
||||
status?: true
|
||||
room?: true
|
||||
time?: true
|
||||
maxPlaces?: true
|
||||
createdAt?: true
|
||||
updatedAt?: true
|
||||
_all?: true
|
||||
@@ -128,6 +164,18 @@ export type EventAggregateArgs<ExtArgs extends runtime.Types.Extensions.Internal
|
||||
* Count returned Events
|
||||
**/
|
||||
_count?: true | EventCountAggregateInputType
|
||||
/**
|
||||
* {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
|
||||
*
|
||||
* Select which fields to average
|
||||
**/
|
||||
_avg?: EventAvgAggregateInputType
|
||||
/**
|
||||
* {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
|
||||
*
|
||||
* Select which fields to sum
|
||||
**/
|
||||
_sum?: EventSumAggregateInputType
|
||||
/**
|
||||
* {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
|
||||
*
|
||||
@@ -161,6 +209,8 @@ export type EventGroupByArgs<ExtArgs extends runtime.Types.Extensions.InternalAr
|
||||
take?: number
|
||||
skip?: number
|
||||
_count?: EventCountAggregateInputType | true
|
||||
_avg?: EventAvgAggregateInputType
|
||||
_sum?: EventSumAggregateInputType
|
||||
_min?: EventMinAggregateInputType
|
||||
_max?: EventMaxAggregateInputType
|
||||
}
|
||||
@@ -172,9 +222,14 @@ export type EventGroupByOutputType = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room: string | null
|
||||
time: string | null
|
||||
maxPlaces: number | null
|
||||
createdAt: Date
|
||||
updatedAt: Date
|
||||
_count: EventCountAggregateOutputType | null
|
||||
_avg: EventAvgAggregateOutputType | null
|
||||
_sum: EventSumAggregateOutputType | null
|
||||
_min: EventMinAggregateOutputType | null
|
||||
_max: EventMaxAggregateOutputType | null
|
||||
}
|
||||
@@ -204,6 +259,9 @@ export type EventWhereInput = {
|
||||
description?: Prisma.StringFilter<"Event"> | string
|
||||
type?: Prisma.EnumEventTypeFilter<"Event"> | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFilter<"Event"> | $Enums.EventStatus
|
||||
room?: Prisma.StringNullableFilter<"Event"> | string | null
|
||||
time?: Prisma.StringNullableFilter<"Event"> | string | null
|
||||
maxPlaces?: Prisma.IntNullableFilter<"Event"> | number | null
|
||||
createdAt?: Prisma.DateTimeFilter<"Event"> | Date | string
|
||||
updatedAt?: Prisma.DateTimeFilter<"Event"> | Date | string
|
||||
registrations?: Prisma.EventRegistrationListRelationFilter
|
||||
@@ -216,6 +274,9 @@ export type EventOrderByWithRelationInput = {
|
||||
description?: Prisma.SortOrder
|
||||
type?: Prisma.SortOrder
|
||||
status?: Prisma.SortOrder
|
||||
room?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
time?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
maxPlaces?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
createdAt?: Prisma.SortOrder
|
||||
updatedAt?: Prisma.SortOrder
|
||||
registrations?: Prisma.EventRegistrationOrderByRelationAggregateInput
|
||||
@@ -231,6 +292,9 @@ export type EventWhereUniqueInput = Prisma.AtLeast<{
|
||||
description?: Prisma.StringFilter<"Event"> | string
|
||||
type?: Prisma.EnumEventTypeFilter<"Event"> | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFilter<"Event"> | $Enums.EventStatus
|
||||
room?: Prisma.StringNullableFilter<"Event"> | string | null
|
||||
time?: Prisma.StringNullableFilter<"Event"> | string | null
|
||||
maxPlaces?: Prisma.IntNullableFilter<"Event"> | number | null
|
||||
createdAt?: Prisma.DateTimeFilter<"Event"> | Date | string
|
||||
updatedAt?: Prisma.DateTimeFilter<"Event"> | Date | string
|
||||
registrations?: Prisma.EventRegistrationListRelationFilter
|
||||
@@ -243,11 +307,16 @@ export type EventOrderByWithAggregationInput = {
|
||||
description?: Prisma.SortOrder
|
||||
type?: Prisma.SortOrder
|
||||
status?: Prisma.SortOrder
|
||||
room?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
time?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
maxPlaces?: Prisma.SortOrderInput | Prisma.SortOrder
|
||||
createdAt?: Prisma.SortOrder
|
||||
updatedAt?: Prisma.SortOrder
|
||||
_count?: Prisma.EventCountOrderByAggregateInput
|
||||
_avg?: Prisma.EventAvgOrderByAggregateInput
|
||||
_max?: Prisma.EventMaxOrderByAggregateInput
|
||||
_min?: Prisma.EventMinOrderByAggregateInput
|
||||
_sum?: Prisma.EventSumOrderByAggregateInput
|
||||
}
|
||||
|
||||
export type EventScalarWhereWithAggregatesInput = {
|
||||
@@ -260,6 +329,9 @@ export type EventScalarWhereWithAggregatesInput = {
|
||||
description?: Prisma.StringWithAggregatesFilter<"Event"> | string
|
||||
type?: Prisma.EnumEventTypeWithAggregatesFilter<"Event"> | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusWithAggregatesFilter<"Event"> | $Enums.EventStatus
|
||||
room?: Prisma.StringNullableWithAggregatesFilter<"Event"> | string | null
|
||||
time?: Prisma.StringNullableWithAggregatesFilter<"Event"> | string | null
|
||||
maxPlaces?: Prisma.IntNullableWithAggregatesFilter<"Event"> | number | null
|
||||
createdAt?: Prisma.DateTimeWithAggregatesFilter<"Event"> | Date | string
|
||||
updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Event"> | Date | string
|
||||
}
|
||||
@@ -271,6 +343,9 @@ export type EventCreateInput = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room?: string | null
|
||||
time?: string | null
|
||||
maxPlaces?: number | null
|
||||
createdAt?: Date | string
|
||||
updatedAt?: Date | string
|
||||
registrations?: Prisma.EventRegistrationCreateNestedManyWithoutEventInput
|
||||
@@ -283,6 +358,9 @@ export type EventUncheckedCreateInput = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room?: string | null
|
||||
time?: string | null
|
||||
maxPlaces?: number | null
|
||||
createdAt?: Date | string
|
||||
updatedAt?: Date | string
|
||||
registrations?: Prisma.EventRegistrationUncheckedCreateNestedManyWithoutEventInput
|
||||
@@ -295,6 +373,9 @@ export type EventUpdateInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
registrations?: Prisma.EventRegistrationUpdateManyWithoutEventNestedInput
|
||||
@@ -307,6 +388,9 @@ export type EventUncheckedUpdateInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
registrations?: Prisma.EventRegistrationUncheckedUpdateManyWithoutEventNestedInput
|
||||
@@ -319,6 +403,9 @@ export type EventCreateManyInput = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room?: string | null
|
||||
time?: string | null
|
||||
maxPlaces?: number | null
|
||||
createdAt?: Date | string
|
||||
updatedAt?: Date | string
|
||||
}
|
||||
@@ -330,6 +417,9 @@ export type EventUpdateManyMutationInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
}
|
||||
@@ -341,6 +431,9 @@ export type EventUncheckedUpdateManyInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
}
|
||||
@@ -352,10 +445,17 @@ export type EventCountOrderByAggregateInput = {
|
||||
description?: Prisma.SortOrder
|
||||
type?: Prisma.SortOrder
|
||||
status?: Prisma.SortOrder
|
||||
room?: Prisma.SortOrder
|
||||
time?: Prisma.SortOrder
|
||||
maxPlaces?: Prisma.SortOrder
|
||||
createdAt?: Prisma.SortOrder
|
||||
updatedAt?: Prisma.SortOrder
|
||||
}
|
||||
|
||||
export type EventAvgOrderByAggregateInput = {
|
||||
maxPlaces?: Prisma.SortOrder
|
||||
}
|
||||
|
||||
export type EventMaxOrderByAggregateInput = {
|
||||
id?: Prisma.SortOrder
|
||||
date?: Prisma.SortOrder
|
||||
@@ -363,6 +463,9 @@ export type EventMaxOrderByAggregateInput = {
|
||||
description?: Prisma.SortOrder
|
||||
type?: Prisma.SortOrder
|
||||
status?: Prisma.SortOrder
|
||||
room?: Prisma.SortOrder
|
||||
time?: Prisma.SortOrder
|
||||
maxPlaces?: Prisma.SortOrder
|
||||
createdAt?: Prisma.SortOrder
|
||||
updatedAt?: Prisma.SortOrder
|
||||
}
|
||||
@@ -374,10 +477,17 @@ export type EventMinOrderByAggregateInput = {
|
||||
description?: Prisma.SortOrder
|
||||
type?: Prisma.SortOrder
|
||||
status?: Prisma.SortOrder
|
||||
room?: Prisma.SortOrder
|
||||
time?: Prisma.SortOrder
|
||||
maxPlaces?: Prisma.SortOrder
|
||||
createdAt?: Prisma.SortOrder
|
||||
updatedAt?: Prisma.SortOrder
|
||||
}
|
||||
|
||||
export type EventSumOrderByAggregateInput = {
|
||||
maxPlaces?: Prisma.SortOrder
|
||||
}
|
||||
|
||||
export type EventScalarRelationFilter = {
|
||||
is?: Prisma.EventWhereInput
|
||||
isNot?: Prisma.EventWhereInput
|
||||
@@ -391,6 +501,14 @@ export type EnumEventStatusFieldUpdateOperationsInput = {
|
||||
set?: $Enums.EventStatus
|
||||
}
|
||||
|
||||
export type NullableIntFieldUpdateOperationsInput = {
|
||||
set?: number | null
|
||||
increment?: number
|
||||
decrement?: number
|
||||
multiply?: number
|
||||
divide?: number
|
||||
}
|
||||
|
||||
export type EventCreateNestedOneWithoutRegistrationsInput = {
|
||||
create?: Prisma.XOR<Prisma.EventCreateWithoutRegistrationsInput, Prisma.EventUncheckedCreateWithoutRegistrationsInput>
|
||||
connectOrCreate?: Prisma.EventCreateOrConnectWithoutRegistrationsInput
|
||||
@@ -412,6 +530,9 @@ export type EventCreateWithoutRegistrationsInput = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room?: string | null
|
||||
time?: string | null
|
||||
maxPlaces?: number | null
|
||||
createdAt?: Date | string
|
||||
updatedAt?: Date | string
|
||||
}
|
||||
@@ -423,6 +544,9 @@ export type EventUncheckedCreateWithoutRegistrationsInput = {
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room?: string | null
|
||||
time?: string | null
|
||||
maxPlaces?: number | null
|
||||
createdAt?: Date | string
|
||||
updatedAt?: Date | string
|
||||
}
|
||||
@@ -450,6 +574,9 @@ export type EventUpdateWithoutRegistrationsInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
}
|
||||
@@ -461,6 +588,9 @@ export type EventUncheckedUpdateWithoutRegistrationsInput = {
|
||||
description?: Prisma.StringFieldUpdateOperationsInput | string
|
||||
type?: Prisma.EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType
|
||||
status?: Prisma.EnumEventStatusFieldUpdateOperationsInput | $Enums.EventStatus
|
||||
room?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
time?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||
maxPlaces?: Prisma.NullableIntFieldUpdateOperationsInput | number | null
|
||||
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||
}
|
||||
@@ -503,6 +633,9 @@ export type EventSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs =
|
||||
description?: boolean
|
||||
type?: boolean
|
||||
status?: boolean
|
||||
room?: boolean
|
||||
time?: boolean
|
||||
maxPlaces?: boolean
|
||||
createdAt?: boolean
|
||||
updatedAt?: boolean
|
||||
registrations?: boolean | Prisma.Event$registrationsArgs<ExtArgs>
|
||||
@@ -516,6 +649,9 @@ export type EventSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensi
|
||||
description?: boolean
|
||||
type?: boolean
|
||||
status?: boolean
|
||||
room?: boolean
|
||||
time?: boolean
|
||||
maxPlaces?: boolean
|
||||
createdAt?: boolean
|
||||
updatedAt?: boolean
|
||||
}, ExtArgs["result"]["event"]>
|
||||
@@ -527,6 +663,9 @@ export type EventSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensi
|
||||
description?: boolean
|
||||
type?: boolean
|
||||
status?: boolean
|
||||
room?: boolean
|
||||
time?: boolean
|
||||
maxPlaces?: boolean
|
||||
createdAt?: boolean
|
||||
updatedAt?: boolean
|
||||
}, ExtArgs["result"]["event"]>
|
||||
@@ -538,11 +677,14 @@ export type EventSelectScalar = {
|
||||
description?: boolean
|
||||
type?: boolean
|
||||
status?: boolean
|
||||
room?: boolean
|
||||
time?: boolean
|
||||
maxPlaces?: boolean
|
||||
createdAt?: boolean
|
||||
updatedAt?: boolean
|
||||
}
|
||||
|
||||
export type EventOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "date" | "name" | "description" | "type" | "status" | "createdAt" | "updatedAt", ExtArgs["result"]["event"]>
|
||||
export type EventOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "date" | "name" | "description" | "type" | "status" | "room" | "time" | "maxPlaces" | "createdAt" | "updatedAt", ExtArgs["result"]["event"]>
|
||||
export type EventInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
|
||||
registrations?: boolean | Prisma.Event$registrationsArgs<ExtArgs>
|
||||
_count?: boolean | Prisma.EventCountOutputTypeDefaultArgs<ExtArgs>
|
||||
@@ -562,6 +704,9 @@ export type $EventPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs
|
||||
description: string
|
||||
type: $Enums.EventType
|
||||
status: $Enums.EventStatus
|
||||
room: string | null
|
||||
time: string | null
|
||||
maxPlaces: number | null
|
||||
createdAt: Date
|
||||
updatedAt: Date
|
||||
}, ExtArgs["result"]["event"]>
|
||||
@@ -994,6 +1139,9 @@ export interface EventFieldRefs {
|
||||
readonly description: Prisma.FieldRef<"Event", 'String'>
|
||||
readonly type: Prisma.FieldRef<"Event", 'EventType'>
|
||||
readonly status: Prisma.FieldRef<"Event", 'EventStatus'>
|
||||
readonly room: Prisma.FieldRef<"Event", 'String'>
|
||||
readonly time: Prisma.FieldRef<"Event", 'String'>
|
||||
readonly maxPlaces: Prisma.FieldRef<"Event", 'Int'>
|
||||
readonly createdAt: Prisma.FieldRef<"Event", 'DateTime'>
|
||||
readonly updatedAt: Prisma.FieldRef<"Event", 'DateTime'>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Event" ADD COLUMN "maxPlaces" INTEGER;
|
||||
ALTER TABLE "Event" ADD COLUMN "room" TEXT;
|
||||
ALTER TABLE "Event" ADD COLUMN "time" TEXT;
|
||||
@@ -20,6 +20,7 @@ enum EventType {
|
||||
LAUNCH
|
||||
FESTIVAL
|
||||
COMPETITION
|
||||
CODE_KATA
|
||||
}
|
||||
|
||||
enum EventStatus {
|
||||
@@ -89,6 +90,9 @@ model Event {
|
||||
description String
|
||||
type EventType
|
||||
status EventStatus
|
||||
room String?
|
||||
time String?
|
||||
maxPlaces Int?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
registrations EventRegistration[]
|
||||
|
||||
@@ -148,7 +148,7 @@ async function main() {
|
||||
// Créer des événements (vérifier s'ils existent déjà)
|
||||
const eventData = [
|
||||
{
|
||||
date: "18 NOVEMBRE 2023",
|
||||
date: "2023-11-18",
|
||||
name: "Sommet de l'Innovation Tech",
|
||||
description:
|
||||
"Rejoignez les leaders de l'industrie et les innovateurs pour une journée de discussions sur les technologies de pointe, les percées de l'IA et des opportunités de networking.",
|
||||
@@ -156,7 +156,7 @@ async function main() {
|
||||
status: EventStatus.PAST,
|
||||
},
|
||||
{
|
||||
date: "3 DÉCEMBRE 2023",
|
||||
date: "2023-12-03",
|
||||
name: "Lancement de la Révolution IA",
|
||||
description:
|
||||
"Assistez au lancement de systèmes d'IA révolutionnaires qui vont remodeler le paysage du gaming. Aperçus exclusifs et opportunités d'accès anticipé.",
|
||||
@@ -164,7 +164,7 @@ async function main() {
|
||||
status: EventStatus.PAST,
|
||||
},
|
||||
{
|
||||
date: "22 DÉCEMBRE 2023",
|
||||
date: "2023-12-22",
|
||||
name: "Festival du Code d'Hiver",
|
||||
description:
|
||||
"Une célébration de l'excellence en programmation avec des hackathons, des défis de codage et des prix. Montrez vos compétences et rivalisez avec les meilleurs développeurs.",
|
||||
@@ -172,7 +172,7 @@ async function main() {
|
||||
status: EventStatus.PAST,
|
||||
},
|
||||
{
|
||||
date: "15 JANVIER 2024",
|
||||
date: "2024-01-15",
|
||||
name: "Expo Informatique Quantique",
|
||||
description:
|
||||
"Explorez l'avenir de l'informatique quantique dans le gaming. Démonstrations interactives, conférences d'experts et ateliers pratiques pour tous les niveaux.",
|
||||
@@ -180,7 +180,7 @@ async function main() {
|
||||
status: EventStatus.UPCOMING,
|
||||
},
|
||||
{
|
||||
date: "8 FÉVRIER 2024",
|
||||
date: "2024-02-08",
|
||||
name: "Championnat Cyber Arena",
|
||||
description:
|
||||
"L'événement de gaming compétitif ultime. Compétissez pour la gloire, des récompenses exclusives et le titre de Champion Cyber Arena. Inscriptions ouvertes.",
|
||||
@@ -188,13 +188,24 @@ async function main() {
|
||||
status: EventStatus.UPCOMING,
|
||||
},
|
||||
{
|
||||
date: "12 MARS 2024",
|
||||
date: "2024-03-12",
|
||||
name: "Gala Tech du Printemps",
|
||||
description:
|
||||
"Une soirée élégante célébrant les réalisations technologiques. Cérémonie de remise de prix, networking et annonces exclusives des plus grandes entreprises tech.",
|
||||
type: EventType.FESTIVAL,
|
||||
status: EventStatus.UPCOMING,
|
||||
},
|
||||
{
|
||||
date: "2024-12-15",
|
||||
name: "Builder pattern : construction et refactoring",
|
||||
description:
|
||||
"Lors de cet atelier, nous utiliserons le design pattern Builder pour structurer pas à pas la création d'objets complexes… sans transformer notre code en film digne de Red Is Dead.\n\nVous découvrirez comment ce pattern permet de découpler proprement la logique de construction, d'améliorer la lisibilité et de faciliter l'évolution du code — notamment lors de phases de refactoring où les responsabilités se mélangent plus vite que la foule au Palais des Festivals.\n\nL'objectif : poser les fondations pour introduire un vrai modèle, sans rien casser du comportement existant.\n\nQue vous souhaitiez renforcer vos compétences en conception, préparer votre prochain refactoring, ou simplement coder avec plus de style que Serge Karamazov dansant la carioca, venez construire avec nous.",
|
||||
type: EventType.CODE_KATA,
|
||||
status: EventStatus.UPCOMING,
|
||||
room: "Nautilus",
|
||||
time: "11h-12h",
|
||||
maxPlaces: 25,
|
||||
},
|
||||
];
|
||||
|
||||
const events = await Promise.all(
|
||||
@@ -202,7 +213,12 @@ async function main() {
|
||||
const existing = await prisma.event.findFirst({
|
||||
where: { name: data.name },
|
||||
});
|
||||
if (existing) return existing;
|
||||
if (existing) {
|
||||
return prisma.event.update({
|
||||
where: { id: existing.id },
|
||||
data,
|
||||
});
|
||||
}
|
||||
return prisma.event.create({ data });
|
||||
})
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user