Skip to content

Commit dc5580f

Browse files
authored
Merge pull request #6 from EnesEfeTokta/Develop
Develop
2 parents 3ec9981 + 114983c commit dc5580f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1563
-566
lines changed

FinTrack/App.xaml.cs

Lines changed: 101 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,111 @@
1-
using System.Windows;
1+
using CommunityToolkit.Mvvm.Messaging;
2+
using FinTrack.Core;
3+
using FinTrack.Services;
4+
using FinTrack.Services.Api;
5+
using FinTrack.ViewModels;
6+
using FinTrack.Views;
7+
using Microsoft.Extensions.DependencyInjection;
8+
using Microsoft.Extensions.Hosting;
9+
using Microsoft.Extensions.Logging;
10+
using Serilog;
11+
using System.Windows;
212

313
namespace FinTrack
414
{
515
public partial class App : Application
616
{
7-
protected override void OnStartup(StartupEventArgs e)
17+
private readonly IHost _host;
18+
19+
public App()
20+
{
21+
_host = Host.CreateDefaultBuilder()
22+
.UseSerilog((context, services, configuration) =>
23+
{
24+
configuration.ReadFrom.Configuration(context.Configuration);
25+
})
26+
.ConfigureServices((context, services) =>
27+
{
28+
ConfigureServices(services);
29+
})
30+
.Build();
31+
32+
SetupGlobalExceptionHandling();
33+
}
34+
35+
private void ConfigureServices(IServiceCollection services)
36+
{
37+
services.AddSingleton<IMessenger>(WeakReferenceMessenger.Default);
38+
39+
services.AddSingleton<MainWindow>();
40+
services.AddSingleton<AuthenticatorWindow>();
41+
42+
services.AddSingleton<MainViewModel>();
43+
services.AddSingleton<LoginViewModel>();
44+
45+
services.AddTransient<TopBarViewModel>();
46+
services.AddTransient<BottomBarViewModel>();
47+
48+
services.AddTransient<RegisterViewModel>();
49+
services.AddTransient<OtpVerificationViewModel>();
50+
services.AddTransient<ForgotPasswordViewModel>();
51+
services.AddTransient<ApplicationRecognizeSlideViewModel>();
52+
services.AddTransient<AuthenticatorViewModel>();
53+
services.AddTransient<DashboardViewModel>();
54+
services.AddTransient<BudgetViewModel>();
55+
services.AddTransient<AccountViewModel>();
56+
services.AddTransient<TransactionsViewModel>();
57+
services.AddTransient<ReportsViewModel>();
58+
services.AddTransient<FinBotViewModel>();
59+
services.AddTransient<CurrenciesViewModel>();
60+
services.AddTransient<DebtViewModel>();
61+
services.AddTransient<SettingsViewModel>();
62+
services.AddTransient<FeedbackViewModel>();
63+
services.AddTransient<NotificationViewModel>();
64+
65+
services.AddSingleton<IAuthService, AuthService>();
66+
services.AddSingleton<ISecureTokenStorage, SecureTokenStorage>();
67+
services.AddSingleton<IApiService, ApiService>();
68+
}
69+
70+
protected override async void OnStartup(StartupEventArgs e)
871
{
72+
await _host.StartAsync();
73+
74+
var logger = _host.Services.GetRequiredService<ILogger<App>>();
75+
logger.LogInformation("Uygulama başlatıldı ve Host çalışıyor.");
76+
77+
var window = _host.Services.GetRequiredService<AuthenticatorWindow>();
78+
window.Show();
79+
980
base.OnStartup(e);
10-
new LoginWindow().Show();
81+
}
82+
83+
private void SetupGlobalExceptionHandling()
84+
{
85+
DispatcherUnhandledException += (sender, e) =>
86+
{
87+
var logger = _host.Services.GetRequiredService<ILogger<App>>();
88+
logger.LogCritical(e.Exception, "YAKALANAMAYAN UI HATASI!");
89+
90+
MessageBox.Show("Beklenmedik bir hata oluştu. Uygulama kapanacak. Detaylar log dosyasına yazıldı.", "Kritik Hata", MessageBoxButton.OK, MessageBoxImage.Error);
91+
e.Handled = true;
92+
Shutdown();
93+
};
94+
95+
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
96+
{
97+
var logger = _host.Services.GetRequiredService<ILogger<App>>();
98+
logger.LogCritical(e.ExceptionObject as Exception, "YAKALANAMAYAN ARKA PLAN HATASI!");
99+
};
100+
}
101+
102+
protected override async void OnExit(ExitEventArgs e)
103+
{
104+
using (_host)
105+
{
106+
await _host.StopAsync(TimeSpan.FromSeconds(5));
107+
}
108+
base.OnExit(e);
11109
}
12110
}
13111
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace FinTrack.Core
2+
{
3+
public interface ISecureTokenStorage
4+
{
5+
void SaveToken(string token);
6+
string? GetToken();
7+
void ClearToken();
8+
}
9+
}

FinTrack/Core/SecureTokenStorage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace FinTrack.Core
66
{
7-
public class SecureTokenStorage
7+
public class SecureTokenStorage : ISecureTokenStorage
88
{
99
private readonly string _filePath;
1010

FinTrack/Core/TokenValidator.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.IdentityModel.Tokens.Jwt;
2+
3+
namespace FinTrack.Core
4+
{
5+
public static class TokenValidator
6+
{
7+
public static bool IsTokenValid(string token)
8+
{
9+
if (string.IsNullOrWhiteSpace(token))
10+
{
11+
return false;
12+
}
13+
14+
var tokenHanler = new JwtSecurityTokenHandler();
15+
16+
try
17+
{
18+
var jwtToken = tokenHanler.ReadJwtToken(token);
19+
20+
var expiration = jwtToken.ValidTo;
21+
22+
return expiration > DateTime.UtcNow;
23+
}
24+
catch (Exception ex)
25+
{
26+
Console.WriteLine($"Token validation failed: {ex.Message}");
27+
return false;
28+
}
29+
}
30+
}
31+
}

FinTrack/Dtos/UserProfileDto.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace FinTrack.Dtos
2+
{
3+
public class UserProfileDto
4+
{
5+
public int Id { get; set; }
6+
public string UserName { get; set; } = string.Empty;
7+
public string Email { get; set; } = string.Empty;
8+
public string ProfilePicture { get; set; } = string.Empty;
9+
public string Role { get; set; } = string.Empty;
10+
public string MembershipType { get; set; } = string.Empty;
11+
}
12+
}

FinTrack/Enums/AccountType.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace FinTrack.Enums
2+
{
3+
public enum AccountType
4+
{
5+
Checking,
6+
Savings,
7+
CreditCard,
8+
Cash,
9+
Investment,
10+
Loan,
11+
Other,
12+
} // Kontrol, Tasarruf, Kredi Kartı, Nakit, Yatırım, Kredi, Diğer
13+
}

FinTrack/Enums/TransactionType.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace FinTrack.Enums
2+
{
3+
public enum TransactionType { Income, Expense }
4+
}

FinTrack/FinTrack.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,14 @@
4949
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.3" />
5050
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.3" />
5151
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3" />
52+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
5253
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
5354
<PackageReference Include="Npgsql" Version="9.0.3" />
55+
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" />
56+
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.0" />
57+
<PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
58+
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
59+
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.12.1" />
5460
</ItemGroup>
5561

5662
<ItemGroup>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace FinTrack.Messages
2+
{
3+
public class LoginSuccessMessage { }
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace FinTrack.Messages
2+
{
3+
public class LoginSuccessMessag
4+
{
5+
}
6+
}

0 commit comments

Comments
 (0)