100 lines
4.1 KiB
C#
100 lines
4.1 KiB
C#
using AutoMapper;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using SessionCompanion.Database.Repositories.Base;
|
|
using SessionCompanion.Database.Tables;
|
|
using SessionCompanion.Extensions.EitherType;
|
|
using SessionCompanion.Services.Base;
|
|
using SessionCompanion.Services.Interfaces;
|
|
using SessionCompanion.ViewModels.ApiResponses;
|
|
using SessionCompanion.ViewModels.ShopkeeperViewModels;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SessionCompanion.Services.Services
|
|
{
|
|
public class ShopkeeperService : ServiceBase<ShopkeeperViewModel, Shopkeeper>, IShopkeeperService
|
|
{
|
|
public ShopkeeperService(IMapper mapper, IRepository<Shopkeeper> repository) : base(mapper, repository)
|
|
{ }
|
|
|
|
/// <summary>
|
|
/// Funkcja zmienia status sprzedawcy
|
|
/// </summary>
|
|
/// <param name="shopkeeperId"></param>
|
|
/// <param name="availability"></param>
|
|
/// <returns>SuccesResponse/ErrorResponse</returns>
|
|
public async Task<Either<SuccessResponse, ErrorResponse>> ChangeShopkeeperStatus(int shopkeeperId, bool availability)
|
|
{
|
|
try
|
|
{
|
|
var shopkeepers = await Repository.Get().ToListAsync();
|
|
if (availability)
|
|
{
|
|
foreach (var shopkeeper in shopkeepers)
|
|
{
|
|
if (shopkeeper.Id.Equals(shopkeeperId))
|
|
shopkeeper.IsAvailable = true;
|
|
else
|
|
shopkeeper.IsAvailable = false;
|
|
await Repository.Update(shopkeeper);
|
|
}
|
|
await Repository.Save();
|
|
return new SuccessResponse(200, "Shopkeepers updated");
|
|
}
|
|
|
|
var newActiveShopkeeper = shopkeepers.Where(c => c.Id.Equals(shopkeeperId)).Single();
|
|
newActiveShopkeeper.IsAvailable = false;
|
|
await Repository.Update(newActiveShopkeeper);
|
|
await Repository.Save();
|
|
return new SuccessResponse(200, "Shopkeepers updated");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return new ErrorResponse() { StatusCode = 500, Message = e.Message };
|
|
}
|
|
}
|
|
|
|
public async Task<Either<SuccessResponse, ErrorResponse>> CreateNewShopKeeper(ShopkeeperWithItemsViewModel shopkeeperWithItemsViewModel)
|
|
{
|
|
try
|
|
{
|
|
var activeShopkeeper = await Repository.Get(c => c.IsAvailable.Equals(true)).FirstOrDefaultAsync();
|
|
if (activeShopkeeper != null && shopkeeperWithItemsViewModel.IsAvailable)
|
|
{
|
|
activeShopkeeper.IsAvailable = false;
|
|
await Repository.Update(activeShopkeeper);
|
|
}
|
|
var result = Mapper.Map<Shopkeeper>(shopkeeperWithItemsViewModel);
|
|
await Repository.Create(result);
|
|
await Repository.Save();
|
|
return new SuccessResponse("New shopkeeper created");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return new ErrorResponse() { StatusCode = 500, Message = e.Message };
|
|
}
|
|
}
|
|
|
|
public async Task<Either<ShopkeeperWithItemsDetailsViewModel, ErrorResponse>> GetActiveShkopkeeperWithItems()
|
|
{
|
|
try
|
|
{
|
|
var activeShopkeeper = await Repository.Get(c => c.IsAvailable.Equals(true))
|
|
.Include(t => t.ShopkeeperItems)
|
|
.ThenInclude(t => t.Armor)
|
|
.Include(t => t.ShopkeeperItems)
|
|
.ThenInclude(t => t.Weapon).FirstOrDefaultAsync();
|
|
var result = Mapper.Map<ShopkeeperWithItemsDetailsViewModel>(activeShopkeeper);
|
|
return result;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return new ErrorResponse() { StatusCode = 500, Message = e.Message };
|
|
}
|
|
}
|
|
}
|
|
}
|