Module - Rendez-vous

Le module de rendez-vous permet de gérer les visites pour les propriétés immobilières. Il facilite la prise de rendez-vous entre les clients et les propriétaires, avec possibilité d'intervention d'un administrateur.

Statuts des rendez-vous

Endpoints

GET
/appointments

Récupérer la liste des rendez-vous avec filtrage possible

Paramètres de requête

  • userId : ID de l'utilisateur (client)
  • ownerId : ID du propriétaire
  • propertyId : ID de la propriété
  • status : Statut du rendez-vous
  • date : Date du rendez-vous

Exemple de réponse

[
  {
    "id": "apt123",
    "date": "2023-10-15T14:00:00Z",
    "duration": 30,
    "status": "CONFIRMED",
    "notes": "Rdv pour visite villa moderne",
    "property": {
      "id": "cm5p90ics0001v2zzx604cd5p",
      "title": "Villa moderne avec piscine"
    },
    "user": {
      "id": "cm2y6lhu50000fspuentp5fx2",
      "name": "Jean Dupont"
    },
    "owner": {
      "id": "own123",
      "userId": "cm2y6lhu50000fspuentp5fx2"
    }
  }
]
POST
/appointments

Créer un nouveau rendez-vous

Corps de la requête

{
  "date": "2023-10-15T14:00:00Z",
  "duration": 30,
  "propertyId": "cm5p90ics0001v2zzx604cd5p",
  "userId": "cm2y6lhu50000fspuentp5fx2",
  "ownerId": "own123",
  "notes": "Rdv pour visite villa moderne"
}
PATCH
/appointments/:id

Mettre à jour un rendez-vous (modifier la date, le statut, etc.)

Corps de la requête

{
  "status": "CONFIRMED",
  "date": "2023-10-16T15:00:00Z"
}
DELETE
/appointments/:id

Annuler un rendez-vous

Modèle de données

model Appointment {
  id                String              @id @default(cuid())
  date              DateTime
  duration          Int?                @default(30) // en minutes
  status            AppointmentStatus   @default(PENDING)
  notes             String?
  propertyId        String
  property          Property            @relation(fields: [propertyId], references: [id], onDelete: Cascade)
  userId            String
  user              User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  ownerId           String
  owner             Owner               @relation(fields: [ownerId], references: [id], onDelete: Cascade)
  adminId           String?
  admin             Admin?              @relation(fields: [adminId], references: [id])
  createdAt         DateTime            @default(now())
  updatedAt         DateTime            @updatedAt
}

Énumération AppointmentStatus

enum AppointmentStatus {
  PENDING
  CONFIRMED
  CANCELLED
  COMPLETED
}