Part A — MedioId → ProductTypeId rename across all C# layers:
Domain, Application, Infrastructure, API, all test projects.
Solution was non-compilable after BD refactor (5c1675e); now compiles clean (0 errors).
Part B — PATCH /api/v1/admin/chargeable-chars/{id}/reactivate:
ReactivateChargeableCharConfigCommand/Handler, SP guard maps 50410/50411/50412
→ ChargeableCharConfigReactivationNotAllowedException(Reason) → HTTP 409.
Part C — DELETE /api/v1/admin/chargeable-chars/{id}:
DeleteChargeableCharConfigCommand/Handler, physical DELETE on SYSTEM_VERSIONED table.
KeyNotFoundException → 404 via ExceptionFilter.
Tests: +30 unit tests (TDD RED→GREEN). All 1266 unit tests pass.
30 lines
965 B
C#
30 lines
965 B
C#
using SIGCM2.Domain.Exceptions;
|
|
|
|
namespace SIGCM2.Domain.Pricing.Exceptions;
|
|
|
|
/// <summary>
|
|
/// PRC-001 — Thrown when a reactivation attempt is blocked by a guard rule.
|
|
/// Maps to HTTP 409.
|
|
///
|
|
/// Reason codes:
|
|
/// ALREADY_ACTIVE — target row is currently active (50410)
|
|
/// VIGENTE_EXISTS — a different active row exists for (ProductTypeId, Symbol) (50411)
|
|
/// POSTERIOR_ROWS_EXIST — rows with higher ValidFrom exist after the target row (50412)
|
|
/// </summary>
|
|
public sealed class ChargeableCharConfigReactivationNotAllowedException : DomainException
|
|
{
|
|
public long Id { get; }
|
|
|
|
/// <summary>
|
|
/// "ALREADY_ACTIVE" | "VIGENTE_EXISTS" | "POSTERIOR_ROWS_EXIST"
|
|
/// </summary>
|
|
public string Reason { get; }
|
|
|
|
public ChargeableCharConfigReactivationNotAllowedException(long id, string reason)
|
|
: base($"Reactivation not allowed for config {id}: {reason}")
|
|
{
|
|
Id = id;
|
|
Reason = reason;
|
|
}
|
|
}
|