using AutoMapper; using Project.Application.DTOs.Incoming; using Project.Application.DTOs.Outgoing; using Project.Application.Interfaces; using Project.Domain.Entities; using Project.Infrastructure.Interfaces; namespace Project.Application.Services { public class ProductService : IProductService { // FIELDS FOR CTOR private readonly IProductRepository _productRepository; private readonly IMapper _mapper; // CTOR public ProductService(IProductRepository productRepository, IMapper mapper) { _productRepository = productRepository; _mapper = mapper; } // CREATE public async Task AddProductAsync(CreatingProductDto creatingProductDto) { var product = _mapper.Map(creatingProductDto); var created = await _productRepository.AddAsync(product); return created; } // READ ALL public async Task> GetAllAsync() { var products = await _productRepository.GetAllAsync(); var readDto = _mapper.Map>(products); return readDto; } // READ BY ID public async Task GetByIdAsync(int id) { var product = await _productRepository.GetByIdAsync(id); var readDto = _mapper.Map(product); return readDto; } // READ BY NAME public async Task GetByNameAsync(string name) { var product = await _productRepository.GetByNameAsync(name); var readDto = _mapper.Map(product); return readDto; } // UPDATE public async Task UpdateProductAsync(UpdatingProductDto updatingProductDto) { var product = _mapper.Map(updatingProductDto); bool idUpdated = await _productRepository.UpdateAsync(product); return idUpdated; } // DELETE public async Task DeleteProductAsync(int id) { Product? product = await _productRepository.GetByIdAsync(id); if (product is null) return false; bool isDeleted = await _productRepository.DeleteAsync(product); return isDeleted; } } }