Aller au contenu principal

Engagement API

Endpoints pour les interactions utilisateur : reactions, vues, favoris et historique de visionnage.

Base URL : /api/v2

Vue d'ensemble

FeatureDescription
ReactionsLike/Dislike sur le contenu
ViewsSuivi des vues avec anti-abus
FavoritesBookmarks utilisateur
Watch HistoryHistorique de visionnage avec progression

Reactions

Endpoints

MethodeEndpointDescriptionAuth
POST/reactionsAjouter une reaction (toggle)Oui
DELETE/reactions/:mediaType/:mediaIdSupprimer une reactionOui
GET/reactions/:mediaType/:mediaIdObtenir la reaction de l'utilisateurOui
GET/reactions/userToutes les reactions de l'utilisateurOui
POST/reactions/toggleToggle reaction (like/dislike)Oui
GET/reactions/myMes reactionsOui

POST /reactions

Ajouter ou modifier une reaction.

POST /api/v2/reactions
Authorization: Bearer <token>
Content-Type: application/json

{
"mediaId": "uuid",
"mediaType": "MOVIE",
"type": "LIKE"
}

Reponse 201 Created (nouvelle reaction)

{
"id": "uuid",
"mediaId": "uuid",
"mediaType": "MOVIE",
"type": "LIKE",
"createdAt": "2025-01-15T10:30:00.000Z"
}

Comportement toggle :

  • Meme reaction = supprime la reaction
  • Reaction differente = change la reaction (LIKE vers DISLIKE ou inversement)

Views

Endpoints

MethodeEndpointDescriptionAuth
POST/viewsEnregistrer une vueNon*
GET/views/count/:mediaType/:mediaIdStats de vuesNon
GET/views/stats/:mediaType/:mediaIdStats de vuesNon

*Auth optionnelle, mais recommandee pour un tracking precis.

POST /views

Enregistrer une vue de contenu.

POST /api/v2/views
Authorization: Bearer <token>
Content-Type: application/json

{
"mediaId": "uuid",
"mediaType": "MOVIE"
}

Reponse 201 Created (nouvelle vue)

{
"counted": true,
"viewCount": 125001
}

Reponse 200 OK (cooldown actif)

{
"counted": false,
"reason": "COOLDOWN",
"cooldownRemaining": 1800
}

Protection anti-abus

ProtectionDescription
Cooldown30 minutes entre vues du meme contenu
User trackinguserId, sessionId, ipAddress, userAgent
DeduplicationCombinaison unique des identifiants

Favorites

Endpoints

MethodeEndpointDescriptionAuth
GET/favoritesLister les favorisOui
POST/favoritesAjouter un favoriOui
DELETE/favorites/:mediaType/:mediaIdSupprimer un favoriOui
DELETE/favorites/:idSupprimer un favori par IDOui
GET/favorites/check/:mediaType/:mediaIdVerifier si favoriOui

GET /favorites

Liste des favoris de l'utilisateur.

GET /api/v2/favorites?page=1&limit=10&mediaType=MOVIE
Authorization: Bearer <token>

Reponse 200 OK

{
"data": [
{
"id": "uuid",
"mediaId": "uuid",
"mediaType": "MOVIE",
"media": {
"id": "uuid",
"title": "Inception",
"posterUrl": "https://..."
},
"createdAt": "2025-01-15T10:30:00.000Z"
}
],
"meta": {
"page": 1,
"limit": 10,
"total": 45
}
}

GET /favorites/check/:mediaType/:mediaId

Verifier si un contenu est en favori.

GET /api/v2/favorites/check/MOVIE/uuid
Authorization: Bearer <token>

Reponse 200 OK

{
"isFavorite": true,
"favoriteId": "uuid"
}

Watch History

Endpoints

MethodeEndpointDescriptionAuth
GET/watch-historyHistorique de visionnageOui
POST/watch-historyAjouter/mettre a jour l'historiqueOui
GET/watch-history/continueContenu "Continuer a regarder"Oui
PATCH/watch-history/:idMettre a jour la progressionOui
DELETE/watch-history/:idSupprimer de l'historiqueOui
DELETE/watch-historyVider tout l'historiqueOui

POST /watch-history

Ajouter ou mettre a jour l'historique de visionnage.

POST /api/v2/watch-history
Authorization: Bearer <token>
Content-Type: application/json

{
"mediaId": "uuid",
"mediaType": "EPISODE",
"progress": 1250,
"duration": 2400
}

GET /watch-history/continue

Contenu "Continuer a regarder" (reprise de lecture).

GET /api/v2/watch-history/continue
Authorization: Bearer <token>

Reponse 200 OK

{
"data": [
{
"mediaId": "uuid",
"mediaType": "EPISODE",
"media": {
"title": "Breaking Bad S1E3",
"posterUrl": "https://..."
},
"progress": 1250,
"duration": 2400,
"progressPercent": 52,
"lastWatchedAt": "2025-01-15T10:30:00.000Z"
}
]
}

Types de media supportes

enum MediaType {
MOVIE // Film
SERIES // Serie
EPISODE // Episode
LIVETV // Chaine TV
RADIO // Station radio
PODCAST // Podcast
NEWS // Article
EVENT // Evenement live
REPLAY // Replay
}

Codes d'erreur

CodeMessageDescription
404Content not foundContenu introuvable
409Already existsFavori deja existant
429Cooldown activeTrop de vues (attendre 30 min)