session-companion/SessionCompanion/SessionCompanion.Services/Services/ShopkeeperService.cs

80 lines
3.3 KiB
C#
Raw Normal View History

2021-01-20 18:54:56 +01:00
using AutoMapper;
using Microsoft.EntityFrameworkCore;
2021-01-20 18:54:56 +01:00
using SessionCompanion.Database.Repositories.Base;
using SessionCompanion.Database.Tables;
using SessionCompanion.Extensions.EitherType;
2021-01-20 18:54:56 +01:00
using SessionCompanion.Services.Base;
using SessionCompanion.Services.Interfaces;
using SessionCompanion.ViewModels.ApiResponses;
2021-01-20 18:54:56 +01:00
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("Shopkeepers updated") { SuccessCode = 200 };
}
var newActiveShopkeeper = shopkeepers.Where(c => c.Id.Equals(shopkeeperId)).Single();
newActiveShopkeeper.IsAvailable = false;
await Repository.Update(newActiveShopkeeper);
await Repository.Save();
return new SuccessResponse("Shopkeepers updated") { SuccessCode = 200 };
}
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)).SingleAsync();
if (activeShopkeeper is not 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 };
}
}
2021-01-20 18:54:56 +01:00
}
}