====== 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.