Skip to content

feat(moderation): signaler un contenu (perso/scène/partie) (#150, PR 2/2) - #165

Merged
RebelliousSmile merged 2 commits into
mainfrom
claude/plan-derniere-issue-l94t6x
Jul 21, 2026
Merged

feat(moderation): signaler un contenu (perso/scène/partie) (#150, PR 2/2)#165
RebelliousSmile merged 2 commits into
mainfrom
claude/plan-derniere-issue-l94t6x

Conversation

@RebelliousSmile

Copy link
Copy Markdown
Owner

Deuxième et dernière PR de #150. Ferme l'issue.

Pourquoi

L'issue veut « retrouver rapidement un élément signalé (personnage, report, game) problématique ». Or rien ne permettait de signaler un contenu : le seul flux existant était « Signaler un utilisateur » (report_userUserReport, une personne). ContentReport (US-27) existe comme modèle mais aucun code ne le crée — abandonné au profit de UserReport (#136).

Option A (décision produit) : réutiliser la mécanique UserReport + la file gmh:reports existantes, plutôt qu'un second système parallèle sur ContentReport (règle Refactor Before Multiplying). UserReport porte déjà un GFK contexte (scène/personnage) prévu exactement pour ça.

Changements

  • Vue report_content(kind, pk) + route signaler-contenu/<kind>/<uuid:pk>/ : dépose un UserReport(reported_user=auteur, context=l'élément). Whitelist character / scene / game, contenu local uniquement, auto-signalement refusé, contenu inexistant/distant → 404.
    • scène → reported_user = report.author ; personnage → owner or creator ; partie → game.owner.
  • Bouton « Signaler » (icône flag) sur les pages détail perso / scène / partie, visible aux non-auteurs authentifiés. Formulaire dédié (report_content_form.html, réutilise les chaînes de report_user_form).
  • File admin enrichie (gmh:reports) : prefetch_related("context") + lien direct vers l'élément signalé (« Signalé (scène) : … »).
  • L'auteur signalé n'est jamais notifié (DEC-F6, inchangé). Bloquer depuis la file bannit l'auteur ET résout le signalement (comportement existant).
  • Aucune migration — on branche l'existant. ContentReport laissé tel quel (hors périmètre).

Tests & vérification

  • tests/core/test_moderation.py : dépôt scène/perso/partie + cible correcte + contexte GFK + auto-signalement refusé + 404 kind inconnu + login requis + lien de la file (47 passed).
  • manage.py check · makemigrations --check = No changes · ruff check . + ruff format --check . · mypy suddenly/ · design lint des 5 templates · render OK des pages détail.
  • i18n fr/en + .mo recompilés.

Closes #150

🤖 Generated with Claude Code


Generated by Claude Code

RebelliousSmile and others added 2 commits July 21, 2026 06:49
Rien ne permettait de signaler un contenu : seul « Signaler un
utilisateur » existait (UserReport). ContentReport (US-27) est un
modèle mort (aucun code ne le crée). L'issue veut retrouver vite un
élément signalé (personnage, report, game).

Option A : réutiliser UserReport + la file gmh:reports existantes,
plutôt qu'un second système parallèle sur ContentReport.

- Vue report_content(kind, pk) + route signaler-contenu/<kind>/<pk>/ :
  dépose un UserReport(reported_user=auteur, context=l'élément) via le
  GFK contexte déjà prévu. Whitelist character/scene/game, contenu
  local uniquement, auto-signalement refusé.
- Bouton « Signaler » (flag) sur les pages détail perso/scène/partie,
  visible aux non-auteurs authentifiés. Formulaire dédié.
- File admin enrichie : prefetch du contexte + lien direct vers
  l'élément signalé (« Signalé (scène) : … »).
- Auteur signalé jamais notifié (DEC-F6, inchangé). Aucune migration.
- Tests (dépose + cible + self-report + 404 + lien file) ; i18n fr/en.

Closes #150

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBRFVUtmBW3YSP8Yd2uNpB
The test_no_empty_msgstr_in_fr_po integrity check uses a line-based
parser that reads only the first `msgstr` line; a multi-line
`msgstr ""` continuation reads as an empty (untranslated) entry and
fails CI. Collapse the French translation onto one line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBRFVUtmBW3YSP8Yd2uNpB
@RebelliousSmile
RebelliousSmile merged commit fae8dbf into main Jul 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tableau de bord

1 participant