Module - Propriétés
Le module de propriétés immobilières permet de gérer l'ensemble des biens immobiliers disponibles sur la plateforme. Il prend en charge différents types de propriétés (maisons, appartements, terrains, bureaux, etc.) avec leurs caractéristiques spécifiques.
Types de propriétés
- Maisons (House)
- Appartements (Apartment)
- Terrains (Land)
- Bureaux (Office)
- Locaux commerciaux (Commercial)
- Hôtels (Hotels)
- Projets immobiliers (Development)
Endpoints
/properties
Récupérer la liste des propriétés avec filtrage possible
Paramètres de requête
-
type: type de propriété (house, apartment, land, etc.) -
transactionType: type de transaction (SALE, RENT) minPrice: prix minimummaxPrice: prix maximummunicipality: ville/municipalitéownerId: ID du propriétairecategoryId: ID de la catégorie de propriété-
status: statut de la propriété (AVAILABLE, SOLD, RENTED, PENDING, SUSPENDED) -
page: numéro de page pour la pagination (défaut: 1) -
limit: nombre d'éléments par page (défaut: 10)
Exemple de réponse
{
"properties": [
{
"id": "cm5p90ics0001v2zzx604cd5p",
"title": "Villa moderne avec piscine",
"description": "Magnifique villa avec vue sur mer...",
"price": 1200000,
"transactionType": "SALE",
"status": "AVAILABLE",
"latitude": 43.7102,
"longitude": 7.2620,
"municipality": "Nice",
"address": "123 Avenue des Palmiers",
"area": 250,
"createdAt": "2023-09-15T14:30:00Z",
"updatedAt": "2023-09-15T14:30:00Z",
"ownerId": "cm2y6lhu50000fspuentp5fx2",
"categoryId": "cat123",
"images": [
{
"id": "img123",
"url": "https://example.com/image1.jpg"
}
],
"house": {
"id": "house123",
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"rooms": 6,
"bedrooms": 4,
"bathrooms": 3,
"swimmingPool": true,
"parkingSpace": true
}
}
],
"totalItems": 45,
"totalPages": 5,
"itemsPerPage": 10,
"currentPage": 1
}
/properties/:id
Récupérer les détails d'une propriété spécifique
Exemple de réponse
{
"id": "cm5p90ics0001v2zzx604cd5p",
"title": "Villa moderne avec piscine",
"description": "Magnifique villa avec vue sur mer...",
"price": 1200000,
"transactionType": "SALE",
"status": "AVAILABLE",
"latitude": 43.7102,
"longitude": 7.2620,
"municipality": "Nice",
"address": "123 Avenue des Palmiers",
"area": 250,
"createdAt": "2023-09-15T14:30:00Z",
"updatedAt": "2023-09-15T14:30:00Z",
"ownerId": "cm2y6lhu50000fspuentp5fx2",
"categoryId": "cat123",
"propertyCategory": {
"id": "cat123",
"name": "Villa",
"description": "Villas de luxe"
},
"owner": {
"id": "owner123",
"user": {
"id": "cm2y6lhu50000fspuentp5fx2",
"name": "Jean Dupont",
"email": "jean.dupont@example.com",
"phone": "+33612345678"
}
},
"images": [
{
"id": "img123",
"url": "https://example.com/image1.jpg",
"description": "Vue extérieure"
},
{
"id": "img124",
"url": "https://example.com/image2.jpg",
"description": "Salle de séjour"
}
],
"videos": [],
"house": {
"id": "house123",
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"rooms": 6,
"bedrooms": 4,
"bathrooms": 3,
"swimmingPool": true,
"parkingSpace": true
}
}
Création d'une propriété (processus en 2 étapes)
La création d'une propriété se fait en deux étapes distinctes :
- Étape 1 : Créer la propriété avec les informations communes
- Étape 2 : Ajouter les informations spécifiques selon le type de propriété
/properties
Étape 1 : Créer la propriété avec les informations communes
Corps de la requête
{
"title": "Villa moderne avec piscine",
"description": "Magnifique villa avec vue sur mer...",
"price": 1200000,
"transactionType": "SALE",
"latitude": 43.7102,
"longitude": 7.2620,
"municipality": "Nice",
"address": "123 Avenue des Palmiers",
"area": 250,
"ownerId": "cm2y6lhu50000fspuentp5fx2",
"categoryId": "cat123"
}
Réponse
{
"id": "cm5p90ics0001v2zzx604cd5p",
"title": "Villa moderne avec piscine",
"description": "Magnifique villa avec vue sur mer...",
"price": 1200000,
"transactionType": "SALE",
"latitude": 43.7102,
"longitude": 7.2620,
"municipality": "Nice",
"address": "123 Avenue des Palmiers",
"area": 250,
"status": "PENDING",
"ownerId": "cm2y6lhu50000fspuentp5fx2",
"categoryId": "cat123",
"createdAt": "2023-09-15T14:30:00Z",
"updatedAt": "2023-09-15T14:30:00Z"
}
Étape 2 : Ajouter les informations spécifiques selon le type de propriété
Une fois la propriété créée, vous devez ajouter les détails spécifiques en fonction du type de propriété.
/houses
Pour une maison (House)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"rooms": 6,
"bedrooms": 4,
"bathrooms": 3,
"swimmingPool": true,
"parkingSpace": true
}
/apartments
Pour un appartement (Apartment)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"parkingSpace": true,
"swimmingPool": false,
"floors": 3,
"balcony": true,
"elevator": true
}
/lands
Pour un terrain (Land)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"serviced": true,
"landType": "BUILDABLE"
}
/offices
Pour un bureau (Office)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"floors": 2,
"parkingSpace": true,
"elevators": true,
"typeOfActivity": "COMMERCIAL"
}
/commercials
Pour un local commercial (Commercial)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"floors": 1,
"elevators": false,
"parkingSpace": true,
"typeOfActivity": "RETAIL"
}
/hotels
Pour un hôtel (Hotels)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"rooms": 50,
"floors": 4,
"parkingSpace": true,
"swimmingPool": true
}
/developments
Pour un projet immobilier (Development)
Corps de la requête
{
"propertyId": "cm5p90ics0001v2zzx604cd5p",
"numberOfUnits": 25,
"typeOfActivity": "RESIDENTIAL"
}
/properties/:id
Mettre à jour les informations communes d'une propriété
Corps de la requête
{
"title": "Villa moderne avec piscine et jardin",
"price": 1250000,
"status": "AVAILABLE"
}
/houses/:id
Mettre à jour les informations spécifiques d'une maison
Corps de la requête
{
"swimmingPool": true,
"parkingSpace": true,
"rooms": 7
}
/properties/:id
Supprimer une propriété (supprime également les données spécifiques associées)
Modèles de données
Voici la structure de base du modèle Property :
model Property {
id String @id @default(cuid())
title String
description String
price Float
latitude Float
longitude Float
transactionType TransactionType
municipality String
address String
area Float
images Image[]
videos Video[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
status PropertyStatus @default(PENDING)
ownerId String
owner Owner @relation(fields: [ownerId], references: [id], onDelete: Cascade)
categoryId String
propertyCategory PropertyCategory @relation(fields: [categoryId], references: [id])
appointments Appointment[]
favorites Favorite[]
house House?
apartment Apartment?
land Land?
commercial Commercial?
office Office?
development Development?
hotels Hotels?
notification Notification[]
}
Énumération TransactionType
enum TransactionType {
RENT
SALE
}
Énumération PropertyStatus
enum PropertyStatus {
AVAILABLE
SOLD
RENTED
PENDING
SUSPENDED
}
Modèle House
model House {
id String @id @default(cuid())
propertyId String @unique
rooms Int
bedrooms Int
bathrooms Int
swimmingPool Boolean
parkingSpace Boolean
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
}
Modèle Apartment
model Apartment {
id String @id @default(cuid())
propertyId String @unique
rooms Int
bedrooms Int
bathrooms Int
parkingSpace Boolean
swimmingPool Boolean
floors Int
balcony Boolean
elevator Boolean
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
}