Signalements

GET /api/reports

Obtenir les signalements.

Scope : reports:read

Rôle minimum: Modérateur

Exemple de requêtes :

  • sans paramètres :

GET /api/reports/ HTTP/1.1
  • avec quelques paramètres de requête :

GET /api/reports?page=1&order=desc&order_by=created_at  HTTP/1.1

Exemple de réponses :

  • renvoyant au moins un signalement :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

  {
    "pagination": {
      "has_next": false,
      "has_prev": false,
      "page": 1,
      "pages": 1,
      "total": 1
    },
    "reports": [
      {
        "created_at": "Sun, 01 Dec 2024 18:17:30 GMT",
        "id": 1,
        "is_reported_user_warned": false,
        "note": "<REPORT NOTE>",
        "object_type": "user",
        "reported_by": {
          "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
          "email": "moderator@example.com",
          "followers": 0,
          "following": 0,
          "is_active": true,
          "nb_workouts": 0,
          "picture": false,
          "role": "moderator",
          "suspended_at": null,
          "username": "moderator"
        },
        "reported_comment": null,
        "reported_user": {
          "blocked": false,
          "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
          "email": "sam@example.com",
          "followers": 0,
          "following": 0,
          "follows": "false",
          "is_active": true,
          "is_followed_by": "false",
          "nb_workouts": 1,
          "picture": false,
          "role": "user",
          "suspended_at": null,
          "username": "Sam"
        },
        "reported_workout": null,
        "resolved": false,
        "resolved_at": null,
        "resolved_by": null,
        "updated_at": null
      }
    ],
    "status": "success"
  }
  • renvoyant aucun signalement

HTTP/1.1 200 OK
Content-Type: application/json

  {
    "pagination": {
      "has_next": false,
      "has_prev": false,
      "page": 1,
      "pages": 0,
      "total": 0
    },
    "reports": [],
    "status": "success"
  }
Paramètres de requête:
  • object_type (integer) – type de contenu signalé (comment, user ou workout)

  • order (string) – ordre de tri : asc, desc (par défaut : desc)

  • order_by (string) – critère de tri: created_at ou updated_at

  • page (integer) – page si pagination (par défaut : 1)

  • reporter (boolean) – nom d’utilisateur du rapporteur

  • resolved (boolean) – filtrer sur le status des signalements

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 400 Bad Request

    • invalid payload

    • invalid 'order_by'

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

GET /api/reports/(int: report_id)

Obtenir un signalement.

Scope : reports:read

Rôle minimum: Modérateur

Exemple de requête :

GET /api/reports/1 HTTP/1.1

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

  {
    "report": {
      "comments": [],
      "created_at": "Sun, 01 Dec 2024 18:17:30 GMT",
      "id": 1,
      "is_reported_user_warned": false,
      "note": "<REPORT NOTE>",
      "object_type": "user",
      "report_actions": [],
      "reported_by": {
        "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
        "email": "moderator@example.com",
        "followers": 0,
        "following": 0,
        "is_active": true,
        "nb_workouts": 0,
        "picture": false,
        "role": "moderator",
        "suspended_at": null,
        "username": "moderator"
      },
      "reported_comment": null,
      "reported_user": {
        "blocked": false,
        "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
        "email": "sam@example.com",
        "followers": 0,
        "following": 0,
        "follows": "false",
        "is_active": true,
        "is_followed_by": "false",
        "nb_workouts": 1,
        "picture": false,
        "role": "user",
        "suspended_at": null,
        "username": "Sam"
      },
      "reported_workout": null,
      "resolved": false,
      "resolved_at": null,
      "resolved_by": null,
      "updated_at": null
    },
    "status": "success"
  }
En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 404 Not Found

    • report not found

GET /api/reports/unresolved

Obtenir si des signalements non résolus existent

Scope : reports:read

Rôle minimum: Modérateur

Exemple de requête :

POST /api/reports/unresolved HTTP/1.1

Exemple de réponse :

HTTP/1.1 201 SUCCESS
Content-Type: application/json

  {
    "status": "success",
    "unresolved": true
  }
En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 403 Forbidden

    • you do not have permissions

POST /api/reports

Modifier un signalement.

Scope : reports:write

Exemple de requête :

POST /api/reports HTTP/1.1
Content-Type: application/json

Exemple de réponse :

HTTP/1.1 201 CREATED
Content-Type: application/json
Objet JSON de requête:
  • note (string) – note décrivant le signalement

  • object_id (string) – identifiant du contenu signalé

  • object_type (string) – type du content signalé (comment, workout ou user)

En-têtes de requête:
Codes d’état:
  • 201 Created – signalement créé

  • 400 Bad Request

    • invalid payload

    • users can not report their own comment

    • users can not report their own profile

    • users can not report their own workout

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 403 Forbidden

    • you do not have permissions

    • you do not have permissions, your account is suspended

  • 404 Not Found

    • comment not found

    • user not found

    • workout not found

  • 500 Internal Server ErrorError during comment save.

PATCH /api/reports/(int: report_id)

Modifier un signalement.

Scope : reports:write

Rôle minimum: Modérateur

Exemple de requête :

PATCH /api/reports/1 HTTP/1.1

Exemple de réponse (signalement sur un profil utilisateur):

HTTP/1.1 200 SUCCESS
Content-Type: application/json

  {
    "report": {
      "comments": [
        {
          "comment": "<REPORT COMMENT>",
          "created_at": "Sun, 01 Dec 2024 18:21:38 GMT",
          "id": 1,
          "report_id": 1,
          "user": {
            "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
            "email": "moderator@example.com",
            "followers": 0,
            "following": 0,
            "is_active": true,
            "nb_workouts": 0,
            "picture": false,
            "role": "moderator",
            "suspended_at": null,
            "username": "moderator"
          }
        }
      ],
      "created_at": "Sun, 01 Dec 2024 18:17:30 GMT",
      "id": 1,
      "is_reported_user_warned": false,
      "note": "<REPORT NOTE>",
      "object_type": "user",
      "report_actions": [],
      "reported_by": {
        "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
        "email": "moderator@example.com",
        "followers": 0,
        "following": 0,
        "is_active": true,
        "nb_workouts": 0,
        "picture": false,
        "role": "moderator",
        "suspended_at": null,
        "username": "moderator"
      },
      "reported_comment": null,
      "reported_user": {
        "blocked": false,
        "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
        "email": "sam@example.com",
        "followers": 0,
        "following": 0,
        "follows": "false",
        "is_active": true,
        "is_followed_by": "false",
        "nb_workouts": 1,
        "picture": false,
        "role": "user",
        "suspended_at": null,
        "username": "Sam"
      },
      "reported_workout": null,
      "resolved": false,
      "resolved_at": null,
      "resolved_by": null,
      "updated_at": "Sun, 01 Dec 2024 18:21:38 GMT"
    },
    "status": "success"
  }
Paramètres:
  • report_id (string) – identifiant du signalement

Objet JSON de requête:
  • notes (string) – commentaire du signalement (obligatoire)

  • resolved (boolean) – état du signalement

En-têtes de requête:
Codes d’état:
POST /api/reports/(int: report_id)/actions

Créer une action liée à un signalement.

Scope : reports:write

Rôle minimum: Modérateur

Exemple de requête :

POST /api/reports/1/actions HTTP/1.1

Exemple de réponse (signalement sur un profil utilisateur):

HTTP/1.1 201 SUCCESS
Content-Type: application/json

  {
    "report": {
      "comments": [
        {
          "comment": "<REPORT COMMENT>",
          "created_at": "Sun, 01 Dec 2024 18:21:38 GMT",
          "id": 1,
          "report_id": 1,
          "user": {
            "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
            "email": "moderator@example.com",
            "followers": 0,
            "following": 0,
            "is_active": true,
            "nb_workouts": 0,
            "picture": false,
            "role": "moderator",
            "suspended_at": null,
            "username": "moderator"
          }
        }
      ],
      "created_at": "Sun, 01 Dec 2024 18:17:30 GMT",
      "id": 1,
      "is_reported_user_warned": false,
      "note": "<REPORT NOTE>",
      "object_type": "user",
      "report_actions": [
        {
          "action_type": "user_warning",
          "appeal": null,
          "created_at": "Wed, 04 Dec 2024 09:12:25 GMT",
          "id": "Hv9KwVDtBHhyfvML7PHovq",
          "moderator": {
            "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
            "email": "moderator@example.com",
            "followers": 0,
            "following": 0,
            "is_active": true,
            "nb_workouts": 0,
            "picture": false,
            "role": "moderator",
            "suspended_at": null,
            "username": "moderator"
          },
          "reason": "<ACTION REASON>",
          "report_id": 1,
          "user": {
            "blocked": false,
            "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
            "email": "sam@example.com",
            "followers": 0,
            "following": 0,
            "follows": "false",
            "is_active": true,
            "is_followed_by": "false",
            "nb_workouts": 1,
            "picture": false,
            "role": "user",
            "suspended_at": null,
            "username": "Sam"
          }
        }
      ],
      "reported_by": {
        "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
        "email": "moderator@example.com",
        "followers": 0,
        "following": 0,
        "is_active": true,
        "nb_workouts": 0,
        "picture": false,
        "role": "moderator",
        "suspended_at": null,
        "username": "moderator"
      },
      "reported_comment": null,
      "reported_user": {
        "blocked": false,
        "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
        "email": "sam@example.com",
        "followers": 0,
        "following": 0,
        "follows": "false",
        "is_active": true,
        "is_followed_by": "false",
        "nb_workouts": 1,
        "picture": false,
        "role": "user",
        "suspended_at": null,
        "username": "Sam"
      },
      "reported_workout": null,
      "resolved": false,
      "resolved_at": null,
      "resolved_by": null,
      "updated_at": "Sun, 01 Dec 2024 18:21:38 GMT"
    },
    "status": "success"
  }
Paramètres:
  • report_id (string) – identifiant du signalement

Objet JSON de requête:
  • action_type (string) – action type (expected value: user_suspension, user_unsuspension, user_warning, comment_suspension, comment_unsuspension, workout_suspension, workout_unsuspension)

  • comment_id (string) – identifiant du commentaire concerné par l’action (type: comment_suspension, comment_suspension)

  • reason (string) – texte expliquent la raison de l’action

  • username (string) – nom de l’utilisateur concerné par l’action (type: comment_suspension, comment_suspension)

  • workout_id (string) – identifiant de la séance concernée par l’action (type: comment_suspension, comment_suspension)

En-têtes de requête:
Codes d’état:
PATCH /api/appeals/(string: appeal_id)

Gérer la demande d’appel.

Scope : users:write

Rôle minimum: Modérateur

Exemple de requête :

POST /api/appeals/Z2Ze5qZrnMVmnDejPphASk HTTP/1.1

Exemple de réponse (signalement sur un profil utilisateur):

HTTP/1.1 201 SUCCESS
Content-Type: application/json

  {
    "appeal": {
      "approved": true,
      "created_at": "Wed, 04 Dec 2024 09:29:18 GMT",
      "id": "Z2Ze5qZrnMVmnDejPphASk",
      "moderator": {
        "created_at": "Sun, 01 Dec 2024 17:27:56 GMT",
        "email": "moderator@example.com",
        "followers": 0,
        "following": 0,
        "is_active": true,
        "nb_workouts": 0,
        "picture": false,
        "role": "moderator",
        "suspended_at": null,
        "username": "moderator"
      },
      "reason": "<REASON>",
      "text": "<APPEAL TEXT>",
      "updated_at": "Wed, 04 Dec 2024 09:30:21 GMT",
      "user": {
        "blocked": false,
        "created_at": "Sun, 01 Dec 2024 17:27:49 GMT",
        "email": "sam@example.com",
        "followers": 0,
        "following": 0,
        "follows": "false",
        "is_active": true,
        "is_followed_by": "false",
        "nb_workouts": 1,
        "picture": false,
        "role": "user",
        "suspended_at": null,
        "username": "Sam"
      }
    },
    "status": "success"
  }
Paramètres:
  • appeal_id (string) – identifiant de l’appel

Objet JSON de requête:
  • approved (boolean) – true si l’appel est accepté, false si rejeté

  • reason (string) – text expliquant pourquoi l’appel est accepté ou rejeté

En-têtes de requête:
Codes d’état: