Existing ASP.NET API with vanilla JS SPA, WindowWatcher, Chrome extension, and MCP server. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.7 KiB
C#
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
|
|
});
|
|
}
|
|
}
|