using Microsoft.EntityFrameworkCore; using LittleShop.Data; using LittleShop.Models; using LittleShop.DTOs; namespace LittleShop.Services; public class CategoryService : ICategoryService { private readonly LittleShopContext _context; public CategoryService(LittleShopContext context) { _context = context; } public async Task> GetAllCategoriesAsync() { return await _context.Categories .Include(c => c.Products) .Select(c => new CategoryDto { Id = c.Id, Name = c.Name, Description = c.Description, CreatedAt = c.CreatedAt, IsActive = c.IsActive, ProductCount = c.Products.Count(p => p.IsActive) }) .ToListAsync(); } public async Task GetCategoryByIdAsync(Guid id) { var category = await _context.Categories .Include(c => c.Products) .FirstOrDefaultAsync(c => c.Id == id); if (category == null) return null; return new CategoryDto { Id = category.Id, Name = category.Name, Description = category.Description, CreatedAt = category.CreatedAt, IsActive = category.IsActive, ProductCount = category.Products.Count(p => p.IsActive) }; } public async Task CreateCategoryAsync(CreateCategoryDto createCategoryDto) { var category = new Category { Id = Guid.NewGuid(), Name = createCategoryDto.Name, Description = createCategoryDto.Description, CreatedAt = DateTime.UtcNow, IsActive = true }; _context.Categories.Add(category); await _context.SaveChangesAsync(); return new CategoryDto { Id = category.Id, Name = category.Name, Description = category.Description, CreatedAt = category.CreatedAt, IsActive = category.IsActive, ProductCount = 0 }; } public async Task UpdateCategoryAsync(Guid id, UpdateCategoryDto updateCategoryDto) { var category = await _context.Categories.FindAsync(id); if (category == null) return false; if (!string.IsNullOrEmpty(updateCategoryDto.Name)) { category.Name = updateCategoryDto.Name; } if (updateCategoryDto.Description != null) { category.Description = updateCategoryDto.Description; } if (updateCategoryDto.IsActive.HasValue) { category.IsActive = updateCategoryDto.IsActive.Value; } await _context.SaveChangesAsync(); return true; } public async Task DeleteCategoryAsync(Guid id) { var category = await _context.Categories.FindAsync(id); if (category == null) return false; category.IsActive = false; await _context.SaveChangesAsync(); return true; } }