Project

General

Profile

Actions

Feature #1141

open
RA

Feature #1133: Implémenter une page de profil utilisateur avec gestion des crédits et des tiers d'abonnement

Backend — Modèle de données crédits/tiers, permissions et historique

Feature #1141: Backend — Modèle de données crédits/tiers, permissions et historique

Added by Redmine Admin about 2 months ago. Updated about 2 months ago.

Status:
QA
Priority:
Normal
Assignee:
-
Start date:
06/18/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:

issue:1133 — spec in epic + ticket description

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
deployed_at:
branch:
feat/1141-credits-tiers-backend
pr_url:
https://github.com/omdev-tech/PipeLiner-Client/pull/67
security_key:
severity:
paused:

Description

## Objectif
Poser les fondations backend (`api/`, architecture hexagonale : domain / application / infrastructure / presentation) pour les crédits, les tiers d'abonnement, leur historique et les permissions associées. Racine de l'épopée #1133 — les autres enfants en dépendent.

## Portée
- **Domaine** : entités `Tier` (Démarrage 2 500 €, Maintenance 4 200 €, Évolutions 9 700 €, Pilotage 16 000 € — crédits/flux/SLA par tier), `CreditBalance` (crédits restants par client), `AuditEntry` (modifications tier/crédits : qui, quoi, ancien→nouveau, quand).
- **Migration Alembic** + seed des définitions de tiers, synchronisées avec les offres commerciales.
- **Application** : use-cases lire profil/crédits/tier d'un client, modifier le tier, ajuster les crédits (delta + / -), lister l'historique. Chaque mutation émet un événement de domaine (tier changé, crédits ajustés, crédits bas <20 %) consommable par les notifications (enfant #2).
- **Permissions** : seuls les admins OmDev peuvent modifier tiers/crédits (les lectures restent ouvertes au client propriétaire). 403 sinon.
- **Présentation** : endpoints REST de lecture (profil/crédits/tier/historique) et d'écriture (édition tier, ajustement crédits) sous garde de permission.

## Acceptance criteria
- [ ] Les 4 tiers sont définis avec montant, crédits, flux, SLA, et seedés via une migration Alembic.
- [ ] Le solde de crédits d'un client est lisible via un endpoint authentifié (propriétaire ou admin).
- [ ] Modifier un tier ou ajuster des crédits écrit une entrée d'historique (auteur, ancien→nouveau, horodatage).
- [ ] L'historique est consultable via un endpoint (paginé, filtré par client).
- [ ] Toute mutation tier/crédits par un non-admin OmDev renvoie 403.
- [ ] Les mutations émettent les événements de domaine (tier changé, crédits ajustés, crédits bas <20 %).
- [ ] Tests pytest verts (TDD), `ruff check .` et `mypy src` propres.

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to Spec
  • spec_ref updated (diff)

RA Updated by Redmine Admin about 2 months ago Actions #2

  • Status changed from Spec to In development

RA Updated by Redmine Admin about 2 months ago Actions #3

  • Status changed from In development to QA
  • branch set to feat/1141-credits-tiers-backend
  • pr_url set to https://github.com/omdev-tech/PipeLiner-Client/pull/67

Backend implémenté et poussé en PR vers `dev` : https://github.com/omdev-tech/PipeLiner-Client/pull/67

Racine de l'épopée #1133 — contrat d'API et événements de domaine posés proprement pour les enfants (notamment #1142 notifications).

**Réalisé (architecture hexagonale, TDD)**
- Domaine : entités `Tier` / `CreditBalance` (ratio d'usage + seuil `is_low` <20 %) / `AuditEntry` ; enums `TierCode` + `AuditAction` ; les 4 tiers canoniques (Démarrage 2 500 € / Maintenance 4 200 € / Évolutions 9 700 € / Pilotage 16 000 €, chacun crédits/flux/SLA).
- Événements de domaine `TierChanged` / `CreditsAdjusted` / `LowCredits` + port `DomainEventPublisher` (le séparateur que #1142 implémentera). Charges utiles riches (client, ancien→nouveau tier + libellés, nouveau solde, indicateur de franchissement <20 %) → **#1142 sans changement de schéma**. Aucun envoi d'email ici (hors-périmètre).
- Use-cases : lecture profil/crédits/tier, changement de tier, ajustement crédits (+/-), historique paginé/filtré. Chaque mutation écrit l'historique et émet l'événement ; `LowCredits` une seule fois au franchissement descendant des 20 %.
- Migration Alembic 0012 : tables `tiers` / `credit_balances` / `billing_audit` + seed des 4 tiers.
- Présentation `/billing` : lectures (tiers, profil, crédits, tier, historique) ouvertes au propriétaire OU admin ; écritures (PUT tier, POST credits/adjust) réservées aux admins OmDev → 403 sinon.

**Portes vertes** : `pytest -q` 546 passés / 2 skippés (lancé 2× sur la même DB — idempotent), `ruff check .` propre, `mypy src` propre.

Passage en QA.

Actions

Also available in: PDF Atom