Files
2025-02-26 23:42:19 +01:00

194 lines
5.9 KiB
C#

using OpenWarehouse.warehouse.api.Common.Producer;
namespace OpenWarehouse.warehouse.api.Common.Item;
public class ItemManager(ApplicationDbContext context, IProducerManager producerManager) : IItemManager
{
public async Task<Data.Item?> FindItemByIdAsync(string id)
{
var result = await context.Items
.Include(item => item.ItemCategoryTags)
.Include(item => item.ItemClaims)
.FirstOrDefaultAsync(item => item.Id != null && item.Id.Equals(id));
return result;
}
public async Task<Data.Item?> FindItemByNameAsync(string producerName, string itemName)
{
var producer = await producerManager.FindProducerByName(producerName);
if (producer != null)
{
return await FindItemByNameAsync(producer, itemName);
}
return null;
}
public async Task<Data.Item?> FindItemByNameAsync(Producers producers, string itemName)
{
return await context.Items
.FirstOrDefaultAsync(item => item.Name != null &&
item.Producer == producers && item.Name.Equals(itemName));
}
public async Task<ActionResult> CreateAsync(Data.Item item)
{
context.Items.Add(item);
ActionResult? res = null;
var error = new Dictionary<string, string>();
try
{
res= new ActionResult((await context.SaveChangesAsync()) == 1);
}
catch (OperationCanceledException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateConcurrencyException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
return res ?? new ActionResult(false, error);
}
public async Task<List<Claim>> GetListOfClaims(Data.Item item)
{
var result = await context.ItemClaims.Where(claims => claims.Item == item)
.Select(claims => new Claim(claims.ClaimType ?? "Uknow", claims.ClaimValue ?? "Uknow"))
.ToListAsync();
return result;
}
public async Task<ActionResult> AddClaim(Data.Item item, Claim claim)
{
var newClaim = new ItemClaims(item, claim);
context.ItemClaims.Add(newClaim);
ActionResult? res = null;
var error = new Dictionary<string, string>();
try
{
res= new ActionResult((await context.SaveChangesAsync()) == 1);
}
catch (OperationCanceledException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateConcurrencyException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
return res ?? new ActionResult(false, error);
}
public async Task<ActionResult> UpdateClaim(Data.Item item, Claim claim)
{
var claimF = await context.ItemClaims
.FirstOrDefaultAsync(q => q.ClaimType.Equals(claim.Type) && q.ClaimIssuer.Equals(claim.Issuer)
&& q.Item == item);
var result = 0;
if (claimF == null)
{
result = (await AddClaim(item, claim)).IsSuccess ? 0 : 1;
}
else
{
claimF.ClaimValue = claim.Value;
result= await context.SaveChangesAsync();
}
return result > 0 ? new ActionResult(true, null) : new ActionResult(false, null);
}
public async Task<ActionResult> DeleteClaim(Data.Item item, string claimType)
{
ActionResult? res = null;
var error = new Dictionary<string, string>();
int delCount = 0;
try
{
delCount = await context.ItemClaims
.Where(claims => claims.ClaimType != null && claims.Item == item && claims.ClaimType.Equals(claimType))
.ExecuteDeleteAsync();
}
catch (OperationCanceledException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateConcurrencyException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
if (res == null)
{
res = new ActionResult(delCount == 1, error);
}
return res;
}
public async Task<ActionResult> EditClaim(Data.Item item, string claimType, string newValue)
{
ActionResult? res = null;
var error = new Dictionary<string, string>();
int editCount = 0;
try
{
var claim = await context.ItemClaims.FirstOrDefaultAsync(claims =>
claims.ClaimType != null && claims.Item == item && claims.ClaimType.Equals(claimType));
if (claim != null) claim.ClaimValue = newValue;
else
{
error["Database"] = $"Claim {item.Name}-{claimType} not found.";
}
editCount = await context.SaveChangesAsync();
}
catch (OperationCanceledException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateConcurrencyException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
catch (DbUpdateException e)
{
error[e.Source ?? "Unknown"] = e.Message;
}
if (res == null)
{
res = new ActionResult(editCount == 1, error);
}
return res;
}
}