using Azaion.Common.Database; using Azaion.Common.Entities; using Azaion.Common.Requests; using LinqToDB; namespace Azaion.Services; public interface IDetectionClassService { Task Create(CreateDetectionClassRequest request, CancellationToken ct = default); Task Update(int id, UpdateDetectionClassRequest request, CancellationToken ct = default); Task Delete(int id, CancellationToken ct = default); } public class DetectionClassService(IDbFactory dbFactory) : IDetectionClassService { public async Task Create(CreateDetectionClassRequest request, CancellationToken ct = default) => await dbFactory.RunAdmin(async db => { var entity = new DetectionClass { Name = request.Name, ShortName = request.ShortName, Color = request.Color, MaxSizeM = request.MaxSizeM, PhotoMode = request.PhotoMode, CreatedAt = DateTime.UtcNow }; var newId = await db.InsertWithInt32IdentityAsync(entity, token: ct); entity.Id = newId; return entity; }); public async Task Update(int id, UpdateDetectionClassRequest request, CancellationToken ct = default) => await dbFactory.RunAdmin(async db => { var existing = await db.DetectionClasses.FirstOrDefaultAsync(x => x.Id == id, token: ct); if (existing == null) return null; if (request.Name != null) existing.Name = request.Name; if (request.ShortName != null) existing.ShortName = request.ShortName; if (request.Color != null) existing.Color = request.Color; if (request.MaxSizeM.HasValue) existing.MaxSizeM = request.MaxSizeM.Value; if (request.PhotoMode != null) existing.PhotoMode = request.PhotoMode; await db.UpdateAsync(existing, token: ct); return existing; }); public async Task Delete(int id, CancellationToken ct = default) => await dbFactory.RunAdmin(async db => { var deleted = await db.DetectionClasses.DeleteAsync(x => x.Id == id, token: ct); return deleted > 0; }); }