70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
using CsvHelper;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using MoneyMap.Data;
|
|
using MoneyMap.Pages;
|
|
using MoneyMap.Services; // Add this for the services
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
builder.Services.AddRazorPages();
|
|
builder.Services.AddDbContext<MoneyMapContext>(options =>
|
|
options.UseSqlServer(builder.Configuration.GetConnectionString("MoneyMapDb")));
|
|
|
|
// Add session support
|
|
builder.Services.AddDistributedMemoryCache();
|
|
builder.Services.AddSession(options =>
|
|
{
|
|
options.IdleTimeout = TimeSpan.FromMinutes(30);
|
|
options.Cookie.HttpOnly = true;
|
|
options.Cookie.IsEssential = true;
|
|
options.IOTimeout = TimeSpan.FromMinutes(5); // Increase timeout for large data
|
|
});
|
|
|
|
// Add the new services here
|
|
builder.Services.AddScoped<ITransactionImporter, TransactionImporter>();
|
|
builder.Services.AddScoped<ICardResolver, CardResolver>();
|
|
builder.Services.AddScoped<ITransactionCategorizer, TransactionCategorizer>();
|
|
builder.Services.AddScoped<IMerchantService, MerchantService>();
|
|
|
|
// Dashboard services
|
|
builder.Services.AddScoped<IDashboardService, DashboardService>();
|
|
builder.Services.AddScoped<IDashboardStatsCalculator, DashboardStatsCalculator>();
|
|
builder.Services.AddScoped<ITopCategoriesProvider, TopCategoriesProvider>();
|
|
builder.Services.AddScoped<IRecentTransactionsProvider, RecentTransactionsProvider>();
|
|
builder.Services.AddScoped<ISpendTrendsProvider, SpendTrendsProvider>();
|
|
builder.Services.AddScoped<IReceiptManager, ReceiptManager>();
|
|
builder.Services.AddScoped<IReceiptAutoMapper, ReceiptAutoMapper>();
|
|
builder.Services.AddHttpClient<IReceiptParser, OpenAIReceiptParser>();
|
|
|
|
// AI categorization service
|
|
builder.Services.AddHttpClient<ITransactionAICategorizer, TransactionAICategorizer>();
|
|
|
|
var app = builder.Build();
|
|
|
|
// Seed default category mappings on startup
|
|
using (var scope = app.Services.CreateScope())
|
|
{
|
|
var categorizer = scope.ServiceProvider.GetRequiredService<ITransactionCategorizer>();
|
|
await categorizer.SeedDefaultMappingsAsync();
|
|
}
|
|
|
|
// Configure the HTTP request pipeline.
|
|
if (!app.Environment.IsDevelopment())
|
|
{
|
|
app.UseExceptionHandler("/Error");
|
|
app.UseHsts();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
app.UseStaticFiles();
|
|
|
|
app.UseRouting();
|
|
|
|
app.UseSession();
|
|
|
|
app.UseAuthorization();
|
|
|
|
app.MapRazorPages();
|
|
|
|
app.Run();
|