using Dapper; using HashidsNet; using Microsoft.AspNetCore.JsonPatch; using MisIngredientesVue.Core.Exceptions; using MisIngredientesVue.Core.Extensions; using MisIngredientesVue.Core.Models; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace MisIngredientesVue.Core.Services { public interface ISellersService { Task> GetSellers(int skip, int take, string sortBy, string sortOrder, string q); Task GetExcel(int offset, string sortBy, string sortOrder, string q); Task InsertSeller(Seller seller); Task UpdateSeller(Seller seller); Task DeleteSellers(int[] ids); Task GetSellerById(int id); Task> GetSellerEarnings(int id, int skip, int take, string sortBy, string sortOrder, string q); } public class SellersService : ISellersService { private readonly IRepository _repository; public SellersService(IRepository repository) { _repository = repository; } public async Task DeleteSellers(int[] ids) { await _repository.DeleteManyByIds("TODO", -1, ids); } public async Task GetExcel(int offset, string sortBy, string sortOrder, string q) { var filterExpression = GetFilterExpression(q); return await _repository.GetExcel("TODO", offset, filterExpression, sortBy, sortOrder); } public async Task GetSellerById(int id) { return await _repository.FindOneById("TODO", id); } public async Task> GetSellerEarnings(int id, int skip, int take, string sortBy, string sortOrder, string q) { var filterExpression = GetEarningsFilterExpression(id, q); return await _repository.Find("TODO", filterExpression, skip, take, sortBy, sortOrder); } public async Task> GetSellers(int skip, int take, string sortBy, string sortOrder, string q) { var filterExpression = GetFilterExpression(q); return await _repository.Find("TODO", filterExpression, skip, take, sortBy, sortOrder); } public async Task InsertSeller(Seller seller) { var newSeller = await _repository.Insert("TODO", null, seller, false); return newSeller; } public async Task UpdateSeller(Seller seller) { await _repository.Update("TODO", 0, seller); } private Expression> GetEarningsFilterExpression(int sellerId, string q) { return x => x.SellerId == sellerId; } private Expression> GetFilterExpression(string q) { return x => x.FirstName.Contains(q) || x.LastName.Contains(q) || x.Email.Contains(q); } } }