Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
62 lines (49 loc) · 1.77 KB
/
Copy pathProgram.cs
File metadata and controls
62 lines (49 loc) · 1.77 KB
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
using FinanceCalculator;
using FinanceCalculator.Entities;
using FinanceCalculator.Modules;
using FinanceCalculator.Modules.MonoAPI;
using FinanceCalculator.Modules.RestAPI;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TimeOptions>(
builder.Configuration.GetSection(TimeOptions.SectionName));
builder.Services.AddDbContext<AppDbContext>(opt =>
opt.UseSqlite(builder.Configuration.GetConnectionString("Default")));
builder.Services.Configure<MonoSyncOptions>(
builder.Configuration.GetSection(MonoSyncOptions.SectionName));
builder.Services.AddSingleton<MonoRateLimiter>();
builder.Services.AddHttpClient<MonoClient>(client =>
{
client.BaseAddress = new Uri("https://api.monobank.ua/");
client.DefaultRequestHeaders.Add("X-Token",
builder.Configuration["Monobank:Token"]);
});
builder.Services.AddScoped<MonoSyncService>();
builder.Services.AddHostedService<MonoAutoSyncService>();
var app = builder.Build();
// миграции + WAL + авто-создание счёта «Наличные»
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
db.Database.Migrate();
db.Database.ExecuteSqlRaw("PRAGMA journal_mode=WAL;");
var cash = db.Accounts.FirstOrDefault(a => a.MonoAccountId == "");
if (cash is null)
{
db.Accounts.Add(new Account
{
Id = Guid.NewGuid(),
MonoAccountId = "",
Type = "cash",
MaskedPan = "Наличные",
CurrencyCode = 980,
Balance = 0,
LastSyncedAt = DateTime.UtcNow
});
db.SaveChanges();
}
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.MapRestApi();
app.Run();