====== Sprint 3 — Catalogue Immobilier ====== ===== Objectif du Sprint ===== Mettre en œuvre le premier domaine métier central de la plateforme : **la gestion complète des biens immobiliers.** À l'issue du Sprint 3 : * Un gestionnaire peut créer un bien * Un gestionnaire peut modifier un bien * Un gestionnaire peut publier un bien * Un gestionnaire peut gérer les médias * Un gestionnaire peut gérer les équipements * Un gestionnaire peut gérer les disponibilités * Un gestionnaire peut gérer les tarifs * Un visiteur peut consulter une annonce publique Ce sprint constitue le premier incrément métier visible du produit. ---- ====== Périmètre ====== ===== Modules concernés ===== PropertiesModule PropertyMediaModule PropertyFeaturesModule PropertyAvailabilityModule PropertyRatesModule PropertySearchModule ---- ====== User Stories ====== ===== US-301 : Créer un bien ===== **En tant que gestionnaire** Je souhaite créer un bien Afin de le proposer à la location. ---- ===== Endpoint ===== POST /properties ---- ===== Données obligatoires ===== Référence Titre Type Catégorie Adresse Capacité Surface Description ---- ===== Critères ===== * Référence unique * Validation des données * Création en statut DRAFT * Historisation ---- ====== US-302 : Modifier un bien ====== ===== Endpoint ===== PUT /properties/{id} ---- ===== Critères ===== * Mise à jour complète * Historisation * Audit ---- ====== US-303 : Consulter un bien ====== ===== Endpoint ===== GET /properties/{id} ---- ===== Informations retournées ===== Informations générales Adresse Photos Équipements Disponibilités Tarifs ---- ====== US-304 : Archiver un bien ====== ===== Endpoint ===== DELETE /properties/{id} ---- ===== Comportement ===== Soft Delete ---- ====== US-305 : Publier un bien ====== ===== Endpoint ===== POST /properties/{id}/publish ---- ===== Conditions ===== Titre renseigné Description renseignée Adresse renseignée Photo principale présente Tarif actif présent ---- ===== Workflow ===== DRAFT ↓ PUBLISHED ↓ RENTED ↓ ARCHIVED ---- ====== Gestion des médias ====== ===== US-306 : Ajouter une photo ===== ===== Endpoint ===== POST /properties/{id}/photos ---- ===== Formats autorisés ===== jpg jpeg png webp ---- ===== Taille maximale ===== 20 Mo ---- ====== US-307 : Définir la photo principale ===== ===== Endpoint ===== POST /properties/{id}/photos/{photoId}/cover ---- ====== US-308 : Supprimer une photo ===== ===== Endpoint ===== DELETE /properties/{id}/photos/{photoId} ---- ====== Gestion des équipements ====== ===== US-309 : Associer des équipements ===== ===== Endpoint ===== PUT /properties/{id}/features ---- ===== Liste initiale ===== Wifi Piscine Climatisation Parking Terrasse Balcon Jardin Barbecue Cuisine équipée Lave-vaisselle Lave-linge Télévision Fibre Animaux autorisés ---- ====== Gestion des disponibilités ====== ===== US-310 : Créer une période ===== ===== Endpoint ===== POST /properties/{id}/availability ---- ===== Données ===== Date début Date fin Statut ---- ===== Statuts ===== AVAILABLE UNAVAILABLE MAINTENANCE BLOCKED ---- ====== US-311 : Bloquer une période ===== ===== Cas d'usage ===== Travaux Occupation propriétaire Maintenance ---- ====== Gestion tarifaire ====== ===== US-312 : Créer un tarif ===== ===== Endpoint ===== POST /properties/{id}/rates ---- ===== Champs ===== Nom Prix nuit Prix semaine Prix mois Taxe séjour Caution ---- ====== US-313 : Tarification saisonnière ===== ===== Exemple ===== Basse saison Moyenne saison Haute saison Très haute saison ---- ===== Endpoint ===== POST /properties/{id}/seasons ---- ====== Consultation publique ====== ===== US-314 : Recherche publique ===== ===== Endpoint ===== GET /search/properties ---- ===== Critères ===== Ville Prix min Prix max Capacité Chambres Équipements ---- ====== US-315 : Consultation fiche publique ===== ===== Endpoint ===== GET /public/properties/{slug} ---- ===== Données exposées ===== Titre Description Galerie Équipements Tarifs Disponibilités ---- ====== Modèle Prisma ====== ===== Property ===== model Property { id String @id @default(uuid()) propertyCode String @unique title String slug String @unique status PropertyStatus surface Decimal? roomCount Int? bedroomCount Int? bathroomCount Int? maxCapacity Int? descriptionShort String? descriptionLong String? } ---- ===== PropertyPhoto ===== model PropertyPhoto { id String @id @default(uuid()) propertyId String fileName String storagePath String isCover Boolean displayOrder Int } ---- ===== Feature ===== model Feature { id String @id @default(uuid()) code String @unique label String } ---- ===== PropertyAvailability ===== model PropertyAvailability { id String @id @default(uuid()) propertyId String startDate DateTime endDate DateTime status String } ---- ===== PropertyRate ===== model PropertyRate { id String @id @default(uuid()) propertyId String nightlyRate Decimal weeklyRate Decimal? monthlyRate Decimal? } ---- ====== Architecture Backend ====== src/modules/properties ├── properties │ ├── media │ ├── features │ ├── availability │ ├── rates │ ├── search │ └── public ---- ====== Swagger ====== ===== Tags ===== Properties PropertyMedia PropertyFeatures PropertyAvailability PropertyRates PropertySearch ---- ===== Volume API ===== Environ : 35 endpoints ---- ====== Frontend ====== ===== Back Office ===== Pages : /properties /properties/create /properties/[id] /properties/[id]/photos /properties/[id]/availability /properties/[id]/rates ---- ===== Front Office ===== Pages : /search /property/[slug] ---- ===== Composants ===== PropertyForm PropertyCard PropertyGallery PropertyAvailabilityCalendar PropertyRatesTable PropertyFeatureSelector ---- ====== Tests ====== ===== Unitaires ===== PropertyService PropertyRateService PropertyAvailabilityService PropertyMediaService ---- ===== Intégration ===== Create Property ↓ Upload Photos ↓ Add Features ↓ Add Availability ↓ Publish ---- ===== E2E ===== Gestionnaire ↓ Créer bien ↓ Ajouter photo ↓ Ajouter tarif ↓ Publier ↓ Visible sur site public ---- ====== Définition de terminé ====== Le Sprint 3 est terminé lorsque : * CRUD Bien fonctionnel * Photos fonctionnelles * Équipements fonctionnels * Disponibilités fonctionnelles * Tarifs fonctionnels * Publication fonctionnelle * Recherche publique fonctionnelle * Swagger à jour * Tests verts * CI verte ---- ====== Livrables ====== * PropertiesModule * PropertyMediaModule * PropertyFeaturesModule * PropertyAvailabilityModule * PropertyRatesModule * PropertySearchModule * Migrations Prisma * DTO * Swagger * Tests ---- ====== Démonstration Sprint ====== Scénario métier : 1. Création d'un bien 2. Ajout de photos 3. Ajout d'équipements 4. Définition des disponibilités 5. Définition des tarifs 6. Publication 7. Recherche publique 8. Consultation fiche publique ---- ====== Sprint suivant ====== ===== Sprint 4 — Réservation & Calendrier ===== Objectif : Permettre aux clients de réserver un bien. Modules concernés : ReservationsModule ReservationCalendarModule ReservationGuestModule PricingModule Fonctionnalités : * Vérification disponibilité * Création réservation * Gestion des voyageurs * Calcul tarifaire * Blocage calendrier * Confirmation réservation À l'issue du Sprint 4, un client pourra effectuer une réservation complète depuis le Front Office.