merge: integrer feat/admin-offre-platinium
This commit is contained in:
commit
b235e3f382
@ -22,6 +22,10 @@ import { Subscription } from '@domain/entities/subscription.entity';
|
|||||||
import { License } from '@domain/entities/license.entity';
|
import { License } from '@domain/entities/license.entity';
|
||||||
import { SubscriptionPlan, SubscriptionPlanType } from '@domain/value-objects/subscription-plan.vo';
|
import { SubscriptionPlan, SubscriptionPlanType } from '@domain/value-objects/subscription-plan.vo';
|
||||||
import { SubscriptionStatus } from '@domain/value-objects/subscription-status.vo';
|
import { SubscriptionStatus } from '@domain/value-objects/subscription-status.vo';
|
||||||
|
import {
|
||||||
|
PLATFORM_ADMIN_ROLE,
|
||||||
|
effectivePlan as resolveEffectivePlan,
|
||||||
|
} from '@domain/services/subscription-access';
|
||||||
import {
|
import {
|
||||||
NoLicensesAvailableException,
|
NoLicensesAvailableException,
|
||||||
LicenseAlreadyAssignedException,
|
LicenseAlreadyAssignedException,
|
||||||
@ -83,9 +87,10 @@ export class SubscriptionService {
|
|||||||
subscription.id
|
subscription.id
|
||||||
);
|
);
|
||||||
|
|
||||||
// ADMIN users always have PLATINIUM plan with no expiration
|
// ADMIN users always have PLATINIUM plan with no expiration.
|
||||||
const isAdmin = userRole === 'ADMIN';
|
// La regle vit dans le domaine : l'assistant la lit au meme endroit.
|
||||||
const effectivePlan = isAdmin ? SubscriptionPlan.platinium() : subscription.plan;
|
const isAdmin = userRole === PLATFORM_ADMIN_ROLE;
|
||||||
|
const effectivePlan = resolveEffectivePlan(userRole, subscription.plan);
|
||||||
const maxLicenses = effectivePlan.maxLicenses;
|
const maxLicenses = effectivePlan.maxLicenses;
|
||||||
const availableLicenses = effectivePlan.isUnlimited()
|
const availableLicenses = effectivePlan.isUnlimited()
|
||||||
? -1
|
? -1
|
||||||
|
|||||||
28
apps/backend/src/domain/services/subscription-access.ts
Normal file
28
apps/backend/src/domain/services/subscription-access.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { SubscriptionPlan } from '../value-objects/subscription-plan.vo';
|
||||||
|
|
||||||
|
export const PLATFORM_ADMIN_ROLE = 'ADMIN';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Offre effective d'un utilisateur.
|
||||||
|
*
|
||||||
|
* Un compte ADMIN dispose de l'offre Platinium quelle que soit celle de son
|
||||||
|
* organisation : c'est deja ce que renvoie l'apercu d'abonnement, donc ce que
|
||||||
|
* lit toute l'interface (badge d'offre, licences illimitees, absence
|
||||||
|
* d'echeance).
|
||||||
|
*
|
||||||
|
* Cette regle vivait uniquement dans `SubscriptionService`. L'assistant, qui
|
||||||
|
* lisait l'abonnement brut, appliquait donc le quota Bronze de l'organisation a
|
||||||
|
* un administrateur a qui le produit affichait « Platinium » partout ailleurs.
|
||||||
|
* La regle est ici pour qu'un seul endroit la porte et que les deux lectures ne
|
||||||
|
* puissent plus diverger.
|
||||||
|
*
|
||||||
|
* @param role Role de l'utilisateur, tel qu'il figure dans le JWT.
|
||||||
|
* @param plan Offre de l'organisation, ou `null` sans abonnement exploitable.
|
||||||
|
*/
|
||||||
|
export function effectivePlan(
|
||||||
|
role: string | undefined,
|
||||||
|
plan: SubscriptionPlan | null
|
||||||
|
): SubscriptionPlan {
|
||||||
|
if (role === PLATFORM_ADMIN_ROLE) return SubscriptionPlan.platinium();
|
||||||
|
return plan ?? SubscriptionPlan.bronze();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user