AlfyChat
Langage :
Référence REST/Messages & Conversations

Messages & Conversations

Messages DM, conversations groupe, réactions, participants, notifications et archive P2P.

Messages — /api/messages

GET
/api/messages

Lister les messages — query: conversationId (required), limit (50 par défaut), before (curseur UUID)

POST
/api/messages

Envoyer un message — body: { conversationId, content, replyToId? }

PATCH
/api/messages/:id

Modifier — body: { content } (auteur uniquement)

DELETE
/api/messages/:id

Supprimer (auteur ou admin)

POST
/api/messages/:id/reactions

Ajouter une réaction — body: { emoji }

DELETE
/api/messages/:id/reactions/:emoji

Retirer une réaction (URL-encode l'emoji si nécessaire)

Charger l'historique + pagination
js
// Page 1
const res = await fetch(
  'https://gateway.alfychat.app/api/messages?conversationId=dm_abc&limit=50',
  { headers: { 'Authorization': `Bearer ${token}` } }
);
const { messages } = await res.json();

// Page 2 (pagination par curseur)
const older = await fetch(
  `https://gateway.alfychat.app/api/messages?conversationId=dm_abc&limit=50&before=${messages.at(-1).id}`,
  { headers: { 'Authorization': `Bearer ${token}` } }
);
Réponse POST /api/messages
json
{
  "id":             "m1a2b3c4-...",
  "conversationId": "dm_user1_user2",
  "senderId":       "u1a2b3c4-...",
  "content":        "Salut !",
  "replyToId":      null,
  "createdAt":      "2026-04-02T10:00:00.000Z",
  "isEdited":       false,
  "reactions":      []
}

Conversations — /api/conversations

GET
/api/conversations

Lister toutes les conversations de l'utilisateur (DM + groupes)

POST
/api/conversations

Créer — body: { type: 'dm'|'group', participantIds[], name? }

PATCH
/api/conversations/:id

Modifier — body: { name?, avatarUrl? } (groupes uniquement)

DELETE
/api/conversations/:id

Supprimer (admin / propriétaire)

POST
/api/conversations/:id/participants

Ajouter un participant — body: { userId }

DELETE
/api/conversations/:id/participants/:uid

Retirer un participant du groupe

POST
/api/conversations/:id/leave

Quitter un groupe (désabonnement propre)

Notifications — /api/notifications

GET
/api/notifications

Liste des notifications non-lues (DMs, demandes d'ami, mentions)

PATCH
/api/notifications/read

Marquer toutes les notifications comme lues

Archive DM (système hybride) — /api/archive

GET
/api/archive/status/:convId

Statut d'archivage d'une conversation

GET
/api/archive/stats/:convId

Messages archivés, quota utilisé

GET
/api/archive/quota/:convId

Vérifier le quota disponible avant archivage

POST
/api/archive/confirm

Confirmer la réception d'une archive P2P — body: { conversationId, archiveLogId }

GET
/api/archive/message/:id

Récupérer un message archivé depuis le cache serveur

POST
/api/archive/cache

Mettre en cache des messages archivés — body: { messages[] }

Système hybride DM

Les messages récents sont en base de données. Les anciens sont archivés côté client et échangeables entre pairs via les events WebSocket DM_ARCHIVE_REQUEST / DM_ARCHIVE_PEER_RESPONSE. Le serveur ne stocke que les métadonnées et un cache limité.