Module - Notifications

Le module de notifications permet d'envoyer et de gérer les notifications destinées aux utilisateurs de la plateforme. Les notifications peuvent être liées à des propriétés spécifiques et avoir différents statuts.

Types de notifications

Statuts possibles pour les notifications :

Endpoints

GET
/notifications

Récupérer la liste des notifications avec filtrage possible

Paramètres de requête

  • userId : ID de l'utilisateur destinataire
  • propertyId : ID de la propriété associée
  • status : Statut de la notification (SUCCESS, ERROR, WARNING, INFO)
  • read : État de lecture (true/false)
  • page : Numéro de page (pagination)
  • limit : Nombre d'éléments par page

Exemple de réponse

{
  "data": [
    {
      "id": "notif123",
      "status": "SUCCESS",
      "title": "Nouvelle propriété disponible",
      "message": "Une nouvelle propriété correspondant à vos critères est disponible",
      "read": false,
      "createdAt": "2023-09-15T14:30:00Z",
      "propertyId": "cm5p90ics0001v2zzx604cd5p",
      "userId": "cm2y6lhu50000fspuentp5fx2",
      "property": {
        "id": "cm5p90ics0001v2zzx604cd5p",
        "title": "Villa moderne avec piscine",
        "images": [
          {
            "id": "img123",
            "url": "https://example.com/image1.jpg"
          }
        ]
      }
    }
  ],
  "pagination": {
    "total": 24,
    "page": 1,
    "limit": 10,
    "pages": 3
  }
}
GET
/notifications/:id

Récupérer les détails d'une notification spécifique

Exemple de réponse

{
  "id": "notif123",
  "status": "SUCCESS",
  "title": "Nouvelle propriété disponible",
  "message": "Une nouvelle propriété correspondant à vos critères est disponible",
  "read": false,
  "createdAt": "2023-09-15T14:30:00Z",
  "propertyId": "cm5p90ics0001v2zzx604cd5p",
  "userId": "cm2y6lhu50000fspuentp5fx2",
  "property": {
    "id": "cm5p90ics0001v2zzx604cd5p",
    "title": "Villa moderne avec piscine",
    "price": 1200000,
    "transactionType": "SALE",
    "images": [
      {
        "id": "img123",
        "url": "https://example.com/image1.jpg"
      }
    ]
  },
  "user": {
    "id": "cm2y6lhu50000fspuentp5fx2",
    "name": "Jean Dupont",
    "email": "jean.dupont@example.com"
  }
}
POST
/notifications

Créer une nouvelle notification

Corps de la requête

{
  "status": "SUCCESS",
  "title": "Nouvelle notification",
  "message": "Vous avez une nouvelle notification",
  "propertyId": "cm5p90ics0001v2zzx604cd5p",
  "userId": "cm2y6lhu50000fspuentp5fx2"
}
POST
/notifications/bulk

Envoyer des notifications à plusieurs utilisateurs

Corps de la requête

{
  "status": "INFO",
  "title": "Nouvelle propriété",
  "message": "Une nouvelle propriété est disponible",
  "propertyId": "cm5p90ics0001v2zzx604cd5p",
  "userIds": ["cm2y6lhu50000fspuentp5fx2", "usr456", "usr789"]
}
PATCH
/notifications/:id

Mettre à jour une notification (marquer comme lue, etc.)

Corps de la requête

{
  "read": true
}
PATCH
/notifications/mark-all-read

Marquer toutes les notifications d'un utilisateur comme lues

Corps de la requête

{
  "userId": "cm2y6lhu50000fspuentp5fx2"
}
DELETE
/notifications/:id

Supprimer une notification

Modèle de données

Voici la structure du modèle Notification :

model Notification {
  id                String              @id @default(cuid())
  status            NotificationStatus  @default(SUCCESS)
  title             String
  message           String
  read              Boolean?            @default(false)
  createdAt         DateTime?           @default(now())
  propertyId        String
  userId            String
  user              User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  property          Property            @relation(fields: [propertyId], references: [id], onDelete: Cascade)
}

Énumération NotificationStatus

enum NotificationStatus {
  SUCCESS
  ERROR
  WARNING
  INFO
}

Webhooks pour notifications

Le système de notifications prend également en charge les webhooks pour l'intégration avec des systèmes tiers:

POST
/notifications/webhook/register

Enregistrer un nouveau webhook pour les notifications

Corps de la requête

{
  "url": "https://example.com/webhook",
  "events": ["property.created", "property.updated", "appointment.confirmed"],
  "secret": "your-secret-key"
}