Mettre en œuvre le premier domaine métier central de la plateforme :
la gestion complète des biens immobiliers.
À l'issue du Sprint 3 :
Ce sprint constitue le premier incrément métier visible du produit.
PropertiesModule PropertyMediaModule PropertyFeaturesModule PropertyAvailabilityModule PropertyRatesModule PropertySearchModule
En tant que gestionnaire
Je souhaite créer un bien
Afin de le proposer à la location.
POST /properties
Référence Titre Type Catégorie Adresse Capacité Surface Description
PUT /properties/{id}
GET /properties/{id}
Informations générales Adresse Photos Équipements Disponibilités Tarifs
DELETE /properties/{id}
Soft Delete
POST /properties/{id}/publish
Titre renseigné Description renseignée Adresse renseignée Photo principale présente Tarif actif présent
DRAFT ↓ PUBLISHED ↓ RENTED ↓ ARCHIVED
POST /properties/{id}/photos
jpg jpeg png webp
20 Mo
POST /properties/{id}/photos/{photoId}/cover
DELETE /properties/{id}/photos/{photoId}
PUT /properties/{id}/features
Wifi Piscine Climatisation Parking Terrasse Balcon Jardin Barbecue Cuisine équipée Lave-vaisselle Lave-linge Télévision Fibre Animaux autorisés
POST /properties/{id}/availability
Date début Date fin Statut
AVAILABLE UNAVAILABLE MAINTENANCE BLOCKED
Travaux Occupation propriétaire Maintenance
POST /properties/{id}/rates
Nom Prix nuit Prix semaine Prix mois Taxe séjour Caution
Basse saison Moyenne saison Haute saison Très haute saison
POST /properties/{id}/seasons
GET /search/properties
Ville Prix min Prix max Capacité Chambres Équipements
GET /public/properties/{slug}
Titre Description Galerie Équipements Tarifs Disponibilités
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?
}
model PropertyPhoto {
id String @id @default(uuid())
propertyId String
fileName String
storagePath String
isCover Boolean
displayOrder Int
}
model Feature {
id String @id @default(uuid())
code String @unique
label String
}
model PropertyAvailability {
id String @id @default(uuid())
propertyId String
startDate DateTime
endDate DateTime
status String
}
model PropertyRate {
id String @id @default(uuid())
propertyId String
nightlyRate Decimal
weeklyRate Decimal?
monthlyRate Decimal?
}
src/modules/properties ├── properties │ ├── media │ ├── features │ ├── availability │ ├── rates │ ├── search │ └── public
Properties PropertyMedia PropertyFeatures PropertyAvailability PropertyRates PropertySearch
Environ :
35 endpoints
Pages :
/properties /properties/create /properties/[id] /properties/[id]/photos /properties/[id]/availability /properties/[id]/rates
Pages :
/search /property/[slug]
PropertyForm PropertyCard PropertyGallery PropertyAvailabilityCalendar PropertyRatesTable PropertyFeatureSelector
PropertyService PropertyRateService PropertyAvailabilityService PropertyMediaService
Create Property ↓ Upload Photos ↓ Add Features ↓ Add Availability ↓ Publish
Gestionnaire ↓ Créer bien ↓ Ajouter photo ↓ Ajouter tarif ↓ Publier ↓ Visible sur site public
Le Sprint 3 est terminé lorsque :
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
Objectif :
Permettre aux clients de réserver un bien.
Modules concernés :
ReservationsModule ReservationCalendarModule ReservationGuestModule PricingModule
Fonctionnalités :
À l'issue du Sprint 4, un client pourra effectuer une réservation complète depuis le Front Office.