Table des matières

Spécification OpenAPI 3.1

Objectif

Cette spécification constitue le contrat officiel entre :

Elle permet :


Convention API

Base URL

https://api.location-platform.com/api/v1

Format

application/json

Encodage

UTF-8

Versionning

/api/v1
/api/v2

Authentification

JWT

Header obligatoire :

Authorization: Bearer <access_token>

Schéma OpenAPI

components:

  securitySchemes:

    bearerAuth:

      type: http

      scheme: bearer

      bearerFormat: JWT

Structure des réponses

Succès

{
  "success": true,
  "data": {},
  "meta": {},
  "links": {}
}

Erreur

{
  "success": false,
  "error": {
    "code": "PROPERTY_NOT_FOUND",
    "message": "Property not found"
  }
}

Pagination

Paramètres

?page=1
?pageSize=20

Réponse

{
  "success": true,
  "data": [],
  "meta": {
    "page": 1,
    "pageSize": 20,
    "total": 245,
    "pages": 13
  }
}

Tri

Paramètres

?sort=createdAt

?sort=-createdAt

?sort=price

?sort=-price

Filtrage

Exemple

GET /properties

?city=Montpellier
&status=PUBLISHED
&minPrice=100
&maxPrice=300

DTO Standards

UUID

Uuid:
  type: string
  format: uuid

Money

Money:
  type: number
  format: double

Date

Date:
  type: string
  format: date

DateTime

DateTime:
  type: string
  format: date-time

Module Auth

Login

Request

POST /auth/login

Body :

{
  "email": "john@example.com",
  "password": "secret"
}

Response

{
  "success": true,
  "data": {
    "accessToken": "...",
    "refreshToken": "...",
    "expiresIn": 3600
  }
}

Register

POST /auth/register

Refresh Token

POST /auth/refresh

Logout

POST /auth/logout

Module Users

User DTO

User:

  type: object

  properties:

    id:
      $ref: '#/components/schemas/Uuid'

    email:
      type: string

    status:
      type: string

    profile:
      $ref: '#/components/schemas/UserProfile'

UserProfile DTO

UserProfile:

  type: object

  properties:

    firstName:
      type: string

    lastName:
      type: string

    phone:
      type: string

Endpoints

GET    /users/me
 
PUT    /users/me
 
GET    /users/{id}
 
GET    /users
 
DELETE /users/{id}

Module Properties

Property DTO

Property:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    title:
      type: string

    status:
      type: string

    surface:
      type: number

    roomCount:
      type: integer

    bedroomCount:
      type: integer

    bathroomCount:
      type: integer

    capacity:
      type: integer

    address:
      $ref: '#/components/schemas/PropertyAddress'

PropertyAddress DTO

PropertyAddress:

  type: object

  properties:

    address1:
      type: string

    city:
      type: string

    postalCode:
      type: string

    country:
      type: string

    latitude:
      type: number

    longitude:
      type: number

Recherche de biens

GET /properties

Paramètres :

city
status
minPrice
maxPrice
bedrooms
bathrooms
capacity
page
pageSize
sort

Création

POST /properties

Consultation

GET /properties/{id}

Modification

PUT /properties/{id}

Suppression

DELETE /properties/{id}

Module Reservations

Reservation DTO

Reservation:

  type: object

  properties:

    id:
      type: string

    reservationNumber:
      type: string

    status:
      type: string

    startDate:
      type: string

    endDate:
      type: string

    totalAmount:
      type: number

Création réservation

POST /reservations

Body :

{
  "propertyId": "uuid",
  "startDate": "2026-07-01",
  "endDate": "2026-07-15",
  "guestCount": 4
}

Consultation

GET /reservations/{id}

Modification

PUT /reservations/{id}

Annulation

POST /reservations/{id}/cancel

Module Contracts

Contract DTO

Contract:

  type: object

  properties:

    id:
      type: string

    contractNumber:
      type: string

    status:
      type: string

    signedAt:
      type: string

Génération

POST /contracts/generate

Signature

POST /contracts/{id}/sign

Téléchargement

GET /contracts/{id}/download

Module Payments

Payment DTO

Payment:

  type: object

  properties:

    id:
      type: string

    amount:
      type: number

    status:
      type: string

    paymentDate:
      type: string

Paiement

POST /payments

Historique

GET /payments
 
GET /payments/{id}

Remboursement

POST /payments/{id}/refund

Module CRM

Leads

GET /crm/leads
 
POST /crm/leads
 
PUT /crm/leads/{id}
 
DELETE /crm/leads/{id}

Activités

GET /crm/activities
 
POST /crm/activities

Module Messaging

Conversations

GET /conversations
 
POST /conversations
 
GET /conversations/{id}

Messages

GET /conversations/{id}/messages
 
POST /conversations/{id}/messages

Module Reporting

Dashboard

GET /reports/dashboard

KPI

GET /reports/kpis

Export

POST /reports/export

Validation métier

Property

title:
  minLength: 5
  maxLength: 255

surface:
  minimum: 1

capacity:
  minimum: 1

Reservation

startDate:
  required: true

endDate:
  required: true

guestCount:
  minimum: 1

Payment

amount:
  minimum: 0.01

Codes erreurs

Code HTTP Description
VALIDATION_ERROR 400 Données invalides
UNAUTHORIZED 401 Authentification requise
FORBIDDEN 403 Accès refusé
NOT_FOUND 404 Ressource inexistante
CONFLICT 409 Conflit métier
INTERNAL_ERROR 500 Erreur serveur

Swagger

Configuration NestJS

const config =
  new DocumentBuilder()
    .setTitle('Rental API')
    .setDescription('Rental Platform API')
    .setVersion('1.0')
    .addBearerAuth()
    .build();

URL Swagger

https://api.location-platform.com/docs

Volume estimé

Domaine Endpoints
Auth 15
Users 20
Owners 20
Properties 40
Reservations 35
Contracts 15
Payments 20
CRM 25
Messaging 15
Reporting 20
Administration 25

Total estimé : environ 250 endpoints REST.


Livrables générés


Étape suivante

À partir de cette spécification OpenAPI, nous pouvons désormais produire :

Le prochain livrable recommandé est :

Backlog Agile détaillé (Epics → Features → User Stories → Tasks)

Ce document deviendra la base du pilotage projet et des futurs sprints Scrum.

DokuWiki Appliance - Powered by TurnKey Linux