53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
using WyvernInventory.Core.Interfaces.Repos;
|
|
using WyvernInventory.Core.Models;
|
|
|
|
namespace WyvernInventory.Infrastructure.Repos;
|
|
|
|
public class GenericInventoryItemRepo : IDbObjectRepo<GenericInventoryItem>
|
|
{
|
|
private List<GenericInventoryItem> _genericItemList = [];
|
|
|
|
public async Task<List<GenericInventoryItem>> GetAsync(Predicate<GenericInventoryItem>? filter = null)
|
|
{
|
|
List<GenericInventoryItem> result = [];
|
|
|
|
if (filter is null) return _genericItemList;
|
|
|
|
result.AddRange(_genericItemList.Where(item => filter(item)));
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<(int created, int updated)> UpsertAsync(List<GenericInventoryItem> items)
|
|
{
|
|
int created = 0;
|
|
int updated = 0;
|
|
foreach (var item in items)
|
|
{
|
|
if (item.Id is not null && _genericItemList.Any(_ => _.Id == item.Id))
|
|
{
|
|
int index = _genericItemList.IndexOf(_genericItemList.Find(_ => _.Id == item.Id));
|
|
_genericItemList[index] = item;
|
|
|
|
updated++;
|
|
}
|
|
else
|
|
{
|
|
item.Id = _genericItemList.Count;
|
|
_genericItemList.Add(item);
|
|
|
|
created++;
|
|
}
|
|
}
|
|
|
|
return (created, updated);
|
|
}
|
|
|
|
public async Task DeleteAsync(List<GenericInventoryItem> items)
|
|
{
|
|
foreach (var item in items)
|
|
{
|
|
_genericItemList.Remove(_genericItemList.Find(_ => _.Id == item.Id));
|
|
}
|
|
}
|
|
} |