Distribution_GL Initialization
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
using General_Ledger_Service.Exceptions;
|
||||
using General_Ledger_Service.Interfaces.Repositories;
|
||||
|
||||
namespace General_Ledger_Service.Services
|
||||
{
|
||||
// Shared "resulting depth must not exceed the configured max" check, used by every
|
||||
// recursive-entity Service (Account, CostCenter, and any future one — see
|
||||
// 01_Full_Development_Plan.md Section 4.2). Not a generic base class (CLAUDE.md Rule 2) —
|
||||
// just the repeated system_config lookup + comparison + BadRequestException, extracted once.
|
||||
internal static class DepthGuard
|
||||
{
|
||||
public static async Task EnsureWithinMaxDepthAsync(
|
||||
ISystemConfigRepository systemConfigRepository,
|
||||
string maxDepthConfigKey,
|
||||
string? enforceConfigKey,
|
||||
int resultingDepth,
|
||||
string exceededMessage)
|
||||
{
|
||||
if (enforceConfigKey != null)
|
||||
{
|
||||
var enforceConfig = await systemConfigRepository.GetByKeyAsync(enforceConfigKey);
|
||||
if (enforceConfig?.ConfigValue != "TRUE")
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var maxDepthConfig = await systemConfigRepository.GetByKeyAsync(maxDepthConfigKey)
|
||||
?? throw new NotFoundException($"System config '{maxDepthConfigKey}' not found");
|
||||
var maxDepth = int.Parse(maxDepthConfig.ConfigValue);
|
||||
|
||||
if (resultingDepth > maxDepth)
|
||||
{
|
||||
throw new BadRequestException(exceededMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user