using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using OKRDAL.DTOs; using OKRDAL.Interfaces; using OKRDAL.QueryBuilders; namespace OKRDAL.Implementations; public class GoalTrackDAL : IGoalTrackDAL { private readonly IQueryExecutor _qe; public GoalTrackDAL(IQueryExecutor qe) => _qe = qe; public async Task> GetTrackHistoryAsync(int goalId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, GoalTrackQB.GET_TRACK_HISTORY, new { GoalId = goalId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); // INSERT-ONLY — never updates or deletes track history public async Task InsertTrackAsync(GoalTrackDTO dto, LoginDTO login, CancellationToken ct) { dto.TenantId = login.ClientId; await _qe.ExecuteAsync(login, GoalTrackQB.INSERT_TRACK, dto, cancellationToken: ct).ConfigureAwait(false); } }