using System.Data.Common; using AnalyticsDAL.DTO.Analysis; using AnalyticsDAL.DTO.ExecutionRouting; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; namespace AnalyticsDAL.CustomCode.Analysis { public interface IAnalysisDAL { Task GetAnalysisHeader(int analysisId, LoginDTO login, CancellationToken ct); Task> GetAnalysisObjects(int analysisId, LoginDTO login, CancellationToken ct); Task> GetAnalysisFields(int analysisId, LoginDTO login, CancellationToken ct); Task GetSelectListAnalysis(int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct); /// Lightweight lookup so callers can resolve an execution route before calling /// DynamicOutput. Returns null if the query doesn't exist. Task GetAnalysisIdForQuery(int analysisQueryId, LoginDTO login, CancellationToken ct); /// route=null (the default) executes against the current tenant's own DB exactly /// as before this parameter was added. route.IsExternal=true executes the generated report /// SQL against a SqlWorkbench-managed external client database instead. Task>> DynamicOutput(int analysisQueryId, int reportViewId, int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct, ExecutionRouteDTO? route = null); Task SaveAnalysis(AnalysisDTO analysisDTO, LoginDTO loginDTO, DbTransaction dbTransaction); Task UpdateAnalysis(AnalysisDTO analysisDTO, LoginDTO loginDTO, DbTransaction dbTransaction); Task DeleteAnalysis(int analysisId, LoginDTO login, CancellationToken ct); /// Unscoped by TenantId — returns null if the analysis doesn't exist. Used only by the ownership visibility guard. Task GetAnalysisTenantId(int analysisId, LoginDTO login, CancellationToken ct); } }