using GB5Shared.DTO.Framework.Login; using GB5Shared.Telemetry; using Microsoft.Extensions.Logging; using PERMBLL.Interfaces; using PERMDAL.DTOs; using PERMDAL.Interfaces; using System.Text.Json; namespace PERMBLL.Implementations; public class TrendBLL : ITrendBLL { private readonly ITrendDAL _dal; private readonly ILogger _logger; public TrendBLL(ITrendDAL dal, ILogger logger) { _dal = dal; _logger = logger; } public async Task GetPerformanceTrendAsync( int employeeId, int lastNCycles, LoginDTO login, CancellationToken ct) { try { GB5Trace.Step("get-performance-trend", new { employeeId, lastNCycles }); var cycles = lastNCycles > 0 ? lastNCycles : 5; var points = await _dal.GetTrendPointsAsync(employeeId, cycles, login, ct).ConfigureAwait(false); var result = new PerformanceTrendDTO { EmployeeId = employeeId, Points = points.ToList() }; return JsonSerializer.Serialize(result); } catch (Exception ex) { GB5Trace.MarkFailed("get-performance-trend-failed", ex); _logger.LogError(ex, "GetPerformanceTrend failed for EmployeeId {EmployeeId}", employeeId); throw; } } }