Interface propriétaire sous /espace-hote/carbets : - Liste, création, édition et suppression de carbets (formulaire complet : présentation, localisation, accès pirogue, commodités). - Upload photos/vidéos vers S3/MinIO (route handler multipart), réordonnancement et suppression des médias, photo de couverture. - Statut de publication (brouillon / publié / archivé) avec garde « au moins un média avant publication ». Réutilise le schéma Prisma (SYS-2) et l'authentification NextAuth (SYS-3) : gating via requireRole([OWNER, ADMIN]) et contrôle de propriété sur chaque mutation. Stockage objet configurable par variables S3_* (compatible MinIO). Co-Authored-By: Paperclip <noreply@paperclip.ing>
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
export type AmenityDefinition = {
|
|
key: string;
|
|
label: string;
|
|
description?: string;
|
|
};
|
|
|
|
// Catalogue de commodités adapté aux carbets fluviaux de Guyane.
|
|
// Les lignes Amenity sont créées à la demande (upsert par `key`) lors de
|
|
// l'enregistrement d'un carbet, ce qui évite un script de seed dédié.
|
|
export const AMENITY_CATALOG: AmenityDefinition[] = [
|
|
{ key: "hamac", label: "Hamacs fournis" },
|
|
{ key: "moustiquaire", label: "Moustiquaires" },
|
|
{ key: "eau_potable", label: "Eau potable" },
|
|
{ key: "electricite_solaire", label: "Électricité solaire" },
|
|
{ key: "groupe_electrogene", label: "Groupe électrogène" },
|
|
{ key: "toilettes_seches", label: "Toilettes sèches" },
|
|
{ key: "douche", label: "Douche" },
|
|
{ key: "cuisine_equipee", label: "Cuisine équipée" },
|
|
{ key: "rechaud_gaz", label: "Réchaud à gaz" },
|
|
{ key: "glaciere", label: "Glacière / réfrigérateur" },
|
|
{ key: "carbet_couvert", label: "Carbet couvert" },
|
|
{ key: "baignade_riviere", label: "Baignade en rivière" },
|
|
{ key: "materiel_peche", label: "Matériel de pêche" },
|
|
{ key: "kayak_canoe", label: "Kayak / canoë" },
|
|
{ key: "barbecue", label: "Barbecue / foyer" },
|
|
{ key: "guide_local", label: "Guide local disponible" },
|
|
];
|
|
|
|
const CATALOG_BY_KEY = new Map(AMENITY_CATALOG.map((a) => [a.key, a]));
|
|
|
|
export function isKnownAmenityKey(key: string): boolean {
|
|
return CATALOG_BY_KEY.has(key);
|
|
}
|
|
|
|
export function amenityLabel(key: string): string {
|
|
return CATALOG_BY_KEY.get(key)?.label ?? key;
|
|
}
|