63 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|