-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBankService.cs
102 lines (83 loc) · 2.95 KB
/
BankService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace VendingMachine_Logic;
public class BankService
{
private readonly IMongoCollection<Bank> _banks;
public BankService(
IOptions<VendingMachineDatabaseSettings> dbSettings)
{
var mongoClient = new MongoClient(
dbSettings.Value.ConnectionString);
var mongoDatabase = mongoClient.GetDatabase(
dbSettings.Value.DatabaseName);
_banks = mongoDatabase.GetCollection<Bank>(
dbSettings.Value.BankCollectionName);
}
public async Task InitVendingMachineCollections()
{
var coins = await GetAsync("Coins");
if (coins == null)
{
Console.Out.WriteLine("creating collection for Coins");
await CreateAsync(new Bank("Coins") );
}
var bank = await GetAsync("Bank");
if (bank == null)
{
Console.Out.WriteLine("creating collection for Bank");
await CreateAsync(new Bank("Bank") );
}
var returns = await GetAsync("Returns");
if (returns == null)
{
Console.Out.WriteLine("creating collection for Returns");
await CreateAsync(new Bank("Returns"));
}
coins.Coins.Clear();
bank.Coins.Clear();
returns.Coins.Clear();
await UpdateAsync(coins.Id, coins);
await UpdateAsync(bank.Id, bank);
await UpdateAsync(returns.Id, returns);
}
public async Task AddCoinToCollection(int coin, string collection)
{
var bank = await GetAsync(collection);
if (bank != null)
{
bank.Coins.Add(coin);
await UpdateAsync(bank.Id, bank);
}
else
throw new Exception("Internal error: no bank with name " + collection);
}
private string format(List<int> value)
{
return "[" + string.Join(", ", value) + "]";
}
public async Task ClearCollection(string collection)
{
var coins = await GetAsync(collection);
if (coins == null)
return;
coins.Coins = new List<int>();
await UpdateAsync(coins.Id, coins);
}
public async Task RemoveCoinFromCollection(int coin, string name)
{
var coins = await GetAsync(name);
coins?.Coins.Remove(coin);
await UpdateAsync(coins.Id, coins);
}
public async Task<List<Bank>> GetAsync() =>
await _banks.Find(_ => true).ToListAsync();
public async Task<Bank?> GetAsync(string name) =>
await _banks.Find(x => x.CoinCollectionName == name).FirstOrDefaultAsync();
public async Task CreateAsync(Bank newBank) =>
await _banks.InsertOneAsync(newBank);
public async Task UpdateAsync(string id, Bank updatedBank) =>
await _banks.ReplaceOneAsync(x => x.Id == id, updatedBank);
public async Task RemoveAsync(string id) =>
await _banks.DeleteOneAsync(x => x.Id == id);
}