using System.Collections.Generic; using System.Data.Common; using System.Threading; using System.Threading.Tasks; using GB5Shared.GOP.Qualifier.DTOs; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; namespace GB5Shared.GOP.Qualifier { // ============================================================ // IQualifierDAL — Data access for the Qualifier Engine. // // All writes accept a DbTransaction — callers must manage the // transaction lifetime via IQueryExecutor.BeginTransactionAsync. // // Entity activation uses TWO queries (ArchiveActiveVersion + // ActivateVersion) that MUST be called inside the same transaction // to prevent dual-active-version on crash. // ============================================================ public interface IQualifierDAL { // ── Definition ──────────────────────────────────────────── Task SaveQualifierDefinition(QualifierDefinitionDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task UpdateQualifierDefinition(QualifierDefinitionDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task DeleteQualifierDefinition(int qualifierId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task GetQualifierById(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task GetQualifierByCode(string qualifierCode, LoginDTO loginDTO, CancellationToken ct = default); Task> GetQualifierList(LoginDTO loginDTO, CancellationToken ct = default); Task> GetSelectListQualifier(CriteriaDTO criteriaDTO, LoginDTO loginDTO, CancellationToken ct = default); Task> GetQualifierLibrary(LoginDTO loginDTO, CancellationToken ct = default); // ── Version ─────────────────────────────────────────────── Task SaveQualifierVersion(QualifierVersionDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); /// /// Archives any currently Active version for the qualifier, then activates the target version. /// Both operations run inside the provided transaction — caller must commit. /// Task ArchiveActiveVersion(int qualifierId, int modifiedById, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task ActivateVersion(int qualifierVersionId, string snapshotJson, int modifiedById, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task GetActiveQualifierPlan(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task> GetQualifierVersionList(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); /// Draft(0)/Active(1)/Archived(2) — used only to guard DeleteQualifierVersion. Task GetQualifierVersionStatus(int qualifierVersionId, LoginDTO loginDTO, CancellationToken ct = default); /// Soft-deletes a version (STATUS=2) — caller must have already confirmed it's a Draft. Task DeleteQualifierVersion(int qualifierVersionId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Entity (bindings) ───────────────────────────────────── Task SaveQualifierEntity(QualifierEntityDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task UpdateQualifierEntity(QualifierEntityDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetEntityBindings(string entityCode, byte stage, byte scope, LoginDTO loginDTO, CancellationToken ct = default); Task> GetEntityBindingsByQualifier(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); // ── Method ──────────────────────────────────────────────── Task SaveQualifierMethod(QualifierMethodDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetQualifierMethods(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierMethod(int qualifierMethodId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Rule Groups ─────────────────────────────────────────── Task SaveQualifierRuleGroup(QualifierRuleGroupDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetRuleGroups(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierRuleGroup(int ruleGroupId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Rule Conditions ─────────────────────────────────────── Task SaveQualifierRuleCondition(QualifierRuleConditionDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetRuleConditions(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierRuleCondition(int conditionId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Outputs ─────────────────────────────────────────────── Task SaveQualifierOutput(QualifierOutputDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetQualifierOutputs(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierOutput(int outputId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Dependencies ────────────────────────────────────────── Task SaveQualifierDependency(QualifierDependencyDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetQualifierDependencies(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task> GetDependenciesByEntity(string entityCode, byte stage, byte scope, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierDependency(int dependencyId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Scope ───────────────────────────────────────────────── Task SaveQualifierScope(QualifierScopeDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); Task> GetQualifierScopes(int qualifierId, LoginDTO loginDTO, CancellationToken ct = default); Task DeleteQualifierScope(int qualifierScopeId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default); // ── Entity code resolution ──────────────────────────────── Task GetEntityCodeById(int entityId, LoginDTO loginDTO, CancellationToken ct = default); } }