Commodités
diff --git a/src/app/espace-hote/carbets/actions.ts b/src/app/espace-hote/carbets/actions.ts
index 8964376..ba29ac4 100644
--- a/src/app/espace-hote/carbets/actions.ts
+++ b/src/app/espace-hote/carbets/actions.ts
@@ -9,7 +9,7 @@ import { prisma } from "@/lib/prisma";
import { ensureUniqueCarbetSlug } from "@/lib/slug";
import { deleteObject } from "@/lib/storage";
import { Prisma } from "@/generated/prisma/client";
-import { CarbetStatus } from "@/generated/prisma/enums";
+import { CarbetStatus, Electricity, RoadAccess } from "@/generated/prisma/enums";
import type { CarbetFormState } from "./form-types";
@@ -22,10 +22,26 @@ type ParsedCarbet = {
embarkPoint: string;
pirogueDurationMin: number;
capacity: number;
+ roadAccess: RoadAccess | null;
+ electricity: Electricity | null;
+ gsmAtCarbet: boolean;
+ gsmExitDistanceKm: number | null;
status: CarbetStatus;
amenities: string[];
};
+function isRoadAccess(v: string): v is RoadAccess {
+ return v === RoadAccess.NONE || v === RoadAccess.DRY_SEASON_ONLY || v === RoadAccess.ALL_YEAR;
+}
+function isElectricity(v: string): v is Electricity {
+ return (
+ v === Electricity.NONE ||
+ v === Electricity.SOLAR ||
+ v === Electricity.GENERATOR_READY ||
+ v === Electricity.EDF
+ );
+}
+
function isCarbetStatus(value: string): value is CarbetStatus {
return (Object.values(CarbetStatus) as string[]).includes(value);
}
@@ -107,6 +123,29 @@ function parseCarbetForm(formData: FormData): {
const status = isCarbetStatus(statusRaw) ? statusRaw : CarbetStatus.DRAFT;
+ // Critères opérationnels
+ const roadAccessRaw = String(formData.get("roadAccess") ?? "").trim();
+ const roadAccess = isRoadAccess(roadAccessRaw) ? roadAccessRaw : null;
+
+ const electricityRaw = String(formData.get("electricity") ?? "").trim();
+ const electricity = isElectricity(electricityRaw) ? electricityRaw : null;
+
+ const gsmAtCarbet = String(formData.get("gsmAtCarbet") ?? "no") === "yes";
+
+ const gsmExitRaw = String(formData.get("gsmExitDistanceKm") ?? "").trim();
+ let gsmExitDistanceKm: number | null = null;
+ if (gsmExitRaw) {
+ const n = Number(gsmExitRaw);
+ if (Number.isFinite(n) && n >= 0 && n <= 50) {
+ gsmExitDistanceKm = n;
+ } else {
+ errors.gsmExitDistanceKm = "Distance invalide (0 à 50 km).";
+ }
+ }
+
+ // Cohérence : si GSM au carbet, on ignore la distance
+ const finalGsmExitDistanceKm = gsmAtCarbet ? null : gsmExitDistanceKm;
+
return {
data: {
title,
@@ -117,6 +156,10 @@ function parseCarbetForm(formData: FormData): {
embarkPoint,
pirogueDurationMin,
capacity,
+ roadAccess,
+ electricity,
+ gsmAtCarbet,
+ gsmExitDistanceKm: finalGsmExitDistanceKm,
status,
amenities,
},
@@ -183,6 +226,10 @@ export async function createCarbet(
embarkPoint: data.embarkPoint,
pirogueDurationMin: data.pirogueDurationMin,
capacity: data.capacity,
+ roadAccess: data.roadAccess,
+ electricity: data.electricity,
+ gsmAtCarbet: data.gsmAtCarbet,
+ gsmExitDistanceKm: data.gsmExitDistanceKm,
status: CarbetStatus.DRAFT,
},
select: { id: true },
@@ -239,6 +286,10 @@ export async function updateCarbet(
embarkPoint: data.embarkPoint,
pirogueDurationMin: data.pirogueDurationMin,
capacity: data.capacity,
+ roadAccess: data.roadAccess,
+ electricity: data.electricity,
+ gsmAtCarbet: data.gsmAtCarbet,
+ gsmExitDistanceKm: data.gsmExitDistanceKm,
status: data.status,
},
});