105 lines
3.3 KiB
C#
105 lines
3.3 KiB
C#
|
using Microsoft.EntityFrameworkCore;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using TestAppRuna.API;
|
|||
|
using TestAppRuna.Entities;
|
|||
|
|
|||
|
namespace TestAppRuna.Services
|
|||
|
{
|
|||
|
public class CartService : ICartService
|
|||
|
{
|
|||
|
public CartService(ShopDbContext shopDbContext)
|
|||
|
{
|
|||
|
this.DB = shopDbContext;
|
|||
|
}
|
|||
|
|
|||
|
public ShopDbContext DB { get; }
|
|||
|
|
|||
|
public async Task<bool> CreateOrUpdateCart(CartCreateUpdateModel model)
|
|||
|
{
|
|||
|
Cart cart = await DB.Carts
|
|||
|
.Where(Q => Q.CustomerID == model.CustomerID && Q.ProductID == model.ProductID)
|
|||
|
.FirstOrDefaultAsync();
|
|||
|
if (cart == null)
|
|||
|
{
|
|||
|
cart = new Cart
|
|||
|
{
|
|||
|
ProductID = model.ProductID,
|
|||
|
CustomerID = model.CustomerID,
|
|||
|
};
|
|||
|
DB.Carts.Add(cart);
|
|||
|
}
|
|||
|
cart.Quantity = model.Quantity;
|
|||
|
|
|||
|
await DB.SaveChangesAsync();
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<bool> DeleteCart(CartDeleteModel model)
|
|||
|
{
|
|||
|
var data = await DB.Carts
|
|||
|
.Where(Q => Q.CustomerID == model.CustomerID && Q.ProductID == model.ProductID)
|
|||
|
.FirstOrDefaultAsync();
|
|||
|
if (data == null)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
DB.Carts.Remove(data);
|
|||
|
await DB.SaveChangesAsync();
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<List<CartCustomerListItem>> Get()
|
|||
|
{
|
|||
|
var query = from cart
|
|||
|
in DB.Carts
|
|||
|
join product in DB.Products on cart.ProductID equals product.ProductID
|
|||
|
join customer in DB.Customers on cart.CustomerID equals customer.CustomerID
|
|||
|
select new CartCustomerListItem
|
|||
|
{
|
|||
|
ProductID = cart.ProductID,
|
|||
|
ProductName = product.Name,
|
|||
|
ProductPrice = product.Price,
|
|||
|
CustomerEmail = customer.Email,
|
|||
|
CustomerName = customer.Name,
|
|||
|
Quantity = cart.Quantity,
|
|||
|
};
|
|||
|
var data = await query.ToListAsync();
|
|||
|
return data;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<List<CartListItem>> GetFromCustomer(Guid customerId)
|
|||
|
{
|
|||
|
var data = await DB.Carts
|
|||
|
.AsNoTracking()
|
|||
|
.Where(Q => Q.CustomerID == customerId)
|
|||
|
.Select(Q => new CartListItem
|
|||
|
{
|
|||
|
ProductID = Q.ProductID,
|
|||
|
ProductName = Q.Product.Name,
|
|||
|
ProductPrice = Q.Product.Price,
|
|||
|
Quantity = Q.Quantity
|
|||
|
}).ToListAsync();
|
|||
|
return data;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<bool> HasCustomerID(Guid customerId)
|
|||
|
{
|
|||
|
return await DB.Customers
|
|||
|
.AsNoTracking()
|
|||
|
.Where(Q => Q.CustomerID == customerId)
|
|||
|
.AnyAsync();
|
|||
|
}
|
|||
|
|
|||
|
public async Task<bool> HasProductID(Guid productId)
|
|||
|
{
|
|||
|
return await DB.Products
|
|||
|
.AsNoTracking()
|
|||
|
.Where(Q => Q.ProductID == productId)
|
|||
|
.AnyAsync();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|