using LctMonolith.Database.UnitOfWork; using LctMonolith.Models.Database; using LctMonolith.Services.Interfaces; using Microsoft.EntityFrameworkCore; using Serilog; namespace LctMonolith.Services { public class MissionCategoryService : IMissionCategoryService { private readonly IUnitOfWork _uow; public MissionCategoryService(IUnitOfWork uow) { _uow = uow; } public async Task GetCategoryByIdAsync(Guid categoryId) { try { return await _uow.MissionCategories.GetByIdAsync(categoryId); } catch (Exception ex) { Log.Error(ex, "GetCategoryByIdAsync failed {CategoryId}", categoryId); throw; } } public async Task GetCategoryByTitleAsync(string title) { try { return await _uow.MissionCategories.Query(c => c.Title == title).FirstOrDefaultAsync(); } catch (Exception ex) { Log.Error(ex, "GetCategoryByTitleAsync failed {Title}", title); throw; } } public async Task> GetAllCategoriesAsync() { try { return await _uow.MissionCategories.Query().OrderBy(c => c.Title).ToListAsync(); } catch (Exception ex) { Log.Error(ex, "GetAllCategoriesAsync failed"); throw; } } public async Task CreateCategoryAsync(MissionCategory category) { try { category.Id = Guid.NewGuid(); await _uow.MissionCategories.AddAsync(category); await _uow.SaveChangesAsync(); return category; } catch (Exception ex) { Log.Error(ex, "CreateCategoryAsync failed {Title}", category.Title); throw; } } public async Task UpdateCategoryAsync(MissionCategory category) { try { _uow.MissionCategories.Update(category); await _uow.SaveChangesAsync(); return category; } catch (Exception ex) { Log.Error(ex, "UpdateCategoryAsync failed {Id}", category.Id); throw; } } public async Task DeleteCategoryAsync(Guid categoryId) { try { var c = await _uow.MissionCategories.GetByIdAsync(categoryId); if (c == null) { return false; } _uow.MissionCategories.Remove(c); await _uow.SaveChangesAsync(); return true; } catch (Exception ex) { Log.Error(ex, "DeleteCategoryAsync failed {CategoryId}", categoryId); throw; } } } }