using Microsoft.EntityFrameworkCore; using TaskTracker.Core.Entities; using TaskTracker.Core.Interfaces; using TaskTracker.Infrastructure.Data; namespace TaskTracker.Infrastructure.Repositories; public class AppMappingRepository(TaskTrackerDbContext db) : IAppMappingRepository { public async Task> GetAllAsync() { return await db.AppMappings.OrderBy(m => m.Category).ToListAsync(); } public async Task GetByIdAsync(int id) { return await db.AppMappings.FindAsync(id); } public async Task CreateAsync(AppMapping mapping) { db.AppMappings.Add(mapping); await db.SaveChangesAsync(); return mapping; } public async Task UpdateAsync(AppMapping mapping) { db.AppMappings.Update(mapping); await db.SaveChangesAsync(); } public async Task DeleteAsync(int id) { var mapping = await db.AppMappings.FindAsync(id); if (mapping is not null) { db.AppMappings.Remove(mapping); await db.SaveChangesAsync(); } } public async Task FindMatchAsync(string appName, string windowTitle, string? url) { var mappings = await db.AppMappings.ToListAsync(); return mappings.FirstOrDefault(m => m.MatchType switch { "ProcessName" => appName.Contains(m.Pattern, StringComparison.OrdinalIgnoreCase), "TitleContains" => windowTitle.Contains(m.Pattern, StringComparison.OrdinalIgnoreCase), "UrlContains" => url?.Contains(m.Pattern, StringComparison.OrdinalIgnoreCase) == true, _ => false }); } }