using Dapper; using Microsoft.AspNetCore.JsonPatch; using MisIngredientesVue.Core.Exceptions; using MisIngredientesVue.Core.Extensions; using MisIngredientesVue.Core.Models; 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 IMarketplaceService { Task> SearchProducts(string q); Task GetProduct(int id); Task AddProductToMyList(int id); Task> GetMyProductList(); } public class MarketplaceService : IMarketplaceService { public static List _cache = new List(); private readonly IRepository _repository; public MarketplaceService(IRepository repository) { _repository = repository; } public async Task AddProductToMyList(int id) { var product = await GetProduct(id); _cache.Add(product); } public async Task> GetMyProductList() { var resultsQuery = $@"SELECT * FROM products JOIN units on products.UnitId = units.id WHERE products.isactive = True LIMIT 20"; return await _repository.Query(async (dbConnection) => { return await dbConnection.QueryAsync( resultsQuery, (product, unit) => { product.Unit = unit; return product; }); }); } public async Task GetProduct(int id) { var resultsQuery = $@"SELECT * FROM products JOIN units on products.UnitId = units.id WHERE products.id = @id"; var products = await _repository.Query(async (dbConnection) => { return await dbConnection.QueryAsync( resultsQuery, (product, unit) => { product.Unit = unit; return product; }, new { id }); }); return products.FirstOrDefault(); } public async Task> SearchProducts(string q) { q = q?.PrepareQuery(); var resultsQuery = $@"SELECT * FROM products JOIN units on products.UnitId = units.id WHERE products.name ~* @q AND products.isactive = True LIMIT 20"; return await _repository.Query(async (dbConnection) => { return await dbConnection.QueryAsync( resultsQuery, (product, unit) => { product.Unit = unit; return product; }, new { q }); }); } } }