using Extrudex.Domain.Entities; using Extrudex.Domain.Enums; using Extrudex.Domain.Interfaces; using Extrudex.Infrastructure.Data; using Microsoft.EntityFrameworkCore; namespace Extrudex.Infrastructure.Services; /// /// Implementation of that persists usage entries /// to the usage_logs table via EF Core. /// public class UsageLogService : IUsageLogService { private readonly ExtrudexDbContext _dbContext; /// /// Initializes a new instance of the class. /// /// The EF Core database context for data persistence. public UsageLogService(ExtrudexDbContext dbContext) { _dbContext = dbContext; } /// public async Task RecordUsageAsync( Guid spoolId, decimal gramsUsed, DataSource dataSource, Guid? printerId = null, Guid? printJobId = null, decimal? mmExtruded = null, DateTime? usageTimestamp = null, string? notes = null) { var entry = new UsageLog { SpoolId = spoolId, GramsUsed = gramsUsed, DataSource = dataSource, PrinterId = printerId, PrintJobId = printJobId, MmExtruded = mmExtruded, UsageTimestamp = usageTimestamp ?? DateTime.UtcNow, Notes = notes }; _dbContext.UsageLogs.Add(entry); await _dbContext.SaveChangesAsync(); return entry; } /// public async Task> GetBySpoolAsync(Guid spoolId, CancellationToken cancellationToken = default) { return await _dbContext.UsageLogs .Where(u => u.SpoolId == spoolId) .OrderByDescending(u => u.UsageTimestamp) .ToListAsync(cancellationToken); } /// public async Task> GetByPrinterAsync(Guid printerId, CancellationToken cancellationToken = default) { return await _dbContext.UsageLogs .Where(u => u.PrinterId == printerId) .OrderByDescending(u => u.UsageTimestamp) .ToListAsync(cancellationToken); } /// public async Task> GetByPrintJobAsync(Guid printJobId, CancellationToken cancellationToken = default) { return await _dbContext.UsageLogs .Where(u => u.PrintJobId == printJobId) .OrderByDescending(u => u.UsageTimestamp) .ToListAsync(cancellationToken); } }