Files
TaskTracker/TaskTracker.Infrastructure/Repositories/AppMappingRepository.cs
AJ Isaacs e12f78c479 chore: initial commit of TaskTracker project
Existing ASP.NET API with vanilla JS SPA, WindowWatcher, Chrome extension, and MCP server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 22:08:45 -05:00

56 lines
1.7 KiB
C#

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<List<AppMapping>> GetAllAsync()
{
return await db.AppMappings.OrderBy(m => m.Category).ToListAsync();
}
public async Task<AppMapping?> GetByIdAsync(int id)
{
return await db.AppMappings.FindAsync(id);
}
public async Task<AppMapping> 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<AppMapping?> 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
});
}
}