KoogleV4/GameData/Repository/ExpenseRepository.cs

63 lines
1.8 KiB
C#

using GameModel;
using GameModel.Contract;
using GameModel.Settings;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GameData.Repository
{
public class ExpenseRepository : IExpenseRepository
{
readonly ILogger<ExpenseRepository>? _log;
private ApiClient _apiClient;
string UrlExpense => "items/expense";
string UrlPlayerExpense => "items/playerexpense";
List<PlayerExpense> _memberExpenses = new List<PlayerExpense>();
private List<Expense> _expenses = null;
public ExpenseRepository(ILogger<ExpenseRepository> log, ApiClient apiClient)
{
_log = log;
_apiClient = apiClient;
_log?.LogDebug("creating ExpenseRepository");
}
public async Task<IEnumerable<Expense>> GetAll()
{
if (_expenses == null)
{
_log?.LogDebug("loading expenses from api");
var res = await _apiClient.Get<Expense>(UrlExpense);
_expenses = new List<Expense> { };
_expenses.AddRange(res);
}
else
{
_log?.LogDebug("returning expenses from cache");
}
return _expenses;
}
public async Task<PlayerExpense> Save(PlayerExpense memberExpense)
{
return await _apiClient.Post<PlayerExpense>(memberExpense, UrlPlayerExpense);
}
public async Task Delete(IEnumerable<PlayerExpense> items)
{
dynamic keys = new JObject();
keys.keys = new JArray(items.Select(_ => _.Id));
await _apiClient.Delete(keys, UrlPlayerExpense);
}
}
}