Skip to content

Commit e3d1da5

Browse files
authored
Merge pull request #4 from EnesEfeTokta/Develop
Develop
2 parents 6e7bf90 + 6dc7d95 commit e3d1da5

Some content is hidden

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

46 files changed

+2653
-209
lines changed
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 static class NewUserInformationManager
4+
{
5+
public static string? FullName { get; set; }
6+
public static string? Email { get; set; }
7+
public static string? Password { get; set; }
8+
}
9+
}

FinTrack/Core/SessionManager.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace FinTrack.Core
2+
{
3+
public static class SessionManager
4+
{
5+
public static string CurrentToken { get; private set; }
6+
7+
public static void SetToken(string token)
8+
{
9+
CurrentToken = token;
10+
}
11+
12+
public static void ClearToken()
13+
{
14+
CurrentToken = null;
15+
}
16+
17+
public static bool IsLoggedIn => !string.IsNullOrEmpty(CurrentToken);
18+
}
19+
}
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
using FinTrack.Models;
2+
using Microsoft.EntityFrameworkCore;
3+
using System.IO;
4+
5+
namespace FinTrack.Data
6+
{
7+
public class AppDatabaseContext : DbContext
8+
{
9+
public AppDatabaseContext() { }
10+
11+
public DbSet<UserModel> Users { get; set; }
12+
public DbSet<UserSettingsModel> UserSettings { get; set; }
13+
public DbSet<AccountModel> Accounts { get; set; }
14+
public DbSet<TransactionModel> Transactions { get; set; }
15+
public DbSet<CategoryModel> Categories { get; set; }
16+
public DbSet<BudgetModel> Budgets { get; set; }
17+
public DbSet<BudgetCategoryModel> BudgetCategories { get; set; }
18+
public DbSet<NotificationModel> Notifications { get; set; }
19+
20+
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
21+
{
22+
if (!optionsBuilder.IsConfigured)
23+
{
24+
var userProfileFolder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
25+
var dbPath = Path.Combine(userProfileFolder, "FinTrackWindows.db");
26+
27+
optionsBuilder.UseSqlite($"Data Source={dbPath}");
28+
}
29+
}
30+
31+
protected override void OnModelCreating(ModelBuilder modelBuilder)
32+
{
33+
base.OnModelCreating(modelBuilder);
34+
35+
modelBuilder.Entity<UserModel>(entity =>
36+
{
37+
entity.ToTable("Users");
38+
39+
entity.HasOne(u => u.UserSettings)
40+
.WithOne(s => s.User)
41+
.HasForeignKey<UserSettingsModel>(s => s.UserId)
42+
.OnDelete(DeleteBehavior.Cascade);
43+
44+
entity.HasMany(u => u.Accounts)
45+
.WithOne(a => a.User)
46+
.HasForeignKey(a => a.UserId)
47+
.OnDelete(DeleteBehavior.Cascade);
48+
49+
entity.HasMany(u => u.Categories)
50+
.WithOne(c => c.User)
51+
.HasForeignKey(c => c.UserId)
52+
.OnDelete(DeleteBehavior.Cascade);
53+
54+
entity.HasMany(u => u.Transactions)
55+
.WithOne(t => t.User)
56+
.HasForeignKey(t => t.UserId)
57+
.OnDelete(DeleteBehavior.Cascade);
58+
59+
entity.HasMany(u => u.Budgets)
60+
.WithOne(b => b.User)
61+
.HasForeignKey(b => b.UserId)
62+
.OnDelete(DeleteBehavior.Cascade);
63+
64+
entity.HasMany(u => u.Notifications)
65+
.WithOne(n => n.User)
66+
.HasForeignKey(n => n.UserId)
67+
.OnDelete(DeleteBehavior.Cascade);
68+
});
69+
70+
modelBuilder.Entity<UserSettingsModel>(entity =>
71+
{
72+
entity.ToTable("UserSettings");
73+
entity.HasKey(s => s.Id);
74+
entity.Property(s => s.Id).ValueGeneratedOnAdd();
75+
entity.HasIndex(s => s.UserId).IsUnique();
76+
});
77+
78+
modelBuilder.Entity<AccountModel>(entity =>
79+
{
80+
entity.ToTable("Accounts");
81+
entity.HasKey(a => a.Id);
82+
entity.Property(a => a.Id).ValueGeneratedOnAdd();
83+
entity.Property(a => a.Balance).HasColumnType("decimal(18, 2)").IsRequired();
84+
entity.Property(a => a.Name).IsRequired();
85+
entity.HasIndex(a => new { a.UserId, a.Name }).IsUnique();
86+
});
87+
88+
modelBuilder.Entity<TransactionModel>(entity =>
89+
{
90+
entity.ToTable("Transactions");
91+
entity.HasKey(t => t.Id);
92+
entity.Property(t => t.Id).ValueGeneratedOnAdd();
93+
entity.Property(t => t.Amount).HasColumnType("decimal(18, 2)").IsRequired();
94+
entity.HasIndex(t => t.UserId);
95+
entity.HasIndex(t => t.CategoryId);
96+
entity.HasIndex(t => t.TransactionDateUtc);
97+
entity.HasIndex(t => t.AccountId);
98+
});
99+
100+
modelBuilder.Entity<CategoryModel>(entity =>
101+
{
102+
entity.ToTable("Categories");
103+
entity.HasKey(c => c.Id);
104+
entity.Property(c => c.Id).ValueGeneratedOnAdd();
105+
entity.Property(c => c.Name).HasColumnName("CategoryName").IsRequired();
106+
entity.Property(c => c.Type).HasColumnName("CategoryType").HasConversion<string>().IsRequired();
107+
entity.HasIndex(c => new { c.UserId, c.Name, c.Type, }).IsUnique();
108+
109+
entity
110+
.HasMany(c => c.BudgetAllocations)
111+
.WithOne(bc => bc.Category)
112+
.HasForeignKey(bc => bc.CategoryId)
113+
.OnDelete(DeleteBehavior.Restrict);
114+
115+
entity
116+
.HasMany(c => c.Transactions)
117+
.WithOne(t => t.Category)
118+
.HasForeignKey(t => t.CategoryId)
119+
.OnDelete(DeleteBehavior.Restrict);
120+
});
121+
122+
modelBuilder.Entity<BudgetModel>(entity =>
123+
{
124+
entity.ToTable("Budgets");
125+
entity.HasKey(b => b.Id);
126+
entity.Property(b => b.Id).ValueGeneratedOnAdd();
127+
entity.Property(b => b.Name).HasColumnName("BudgetName").IsRequired();
128+
entity.Property(b => b.Description).IsRequired(false);
129+
130+
entity.HasMany(b => b.BudgetCategories).WithOne(bc => bc.Budget).HasForeignKey(bc => bc.BudgetId).OnDelete(DeleteBehavior.Cascade);
131+
});
132+
133+
modelBuilder.Entity<BudgetCategoryModel>(entity =>
134+
{
135+
entity.ToTable("BudgetCategories");
136+
entity.HasKey(bc => bc.Id);
137+
entity.Property(bc => bc.Id).ValueGeneratedOnAdd();
138+
entity.Property(bc => bc.AllocatedAmount).HasColumnType("decimal(18, 2)").IsRequired();
139+
entity.HasIndex(bc => new { bc.BudgetId, bc.CategoryId }).IsUnique();
140+
});
141+
142+
modelBuilder.Entity<NotificationModel>(entity =>
143+
{
144+
entity.ToTable("Notifications");
145+
entity.HasKey(n => n.NotificationId);
146+
entity.Property(n => n.NotificationId).ValueGeneratedOnAdd();
147+
entity.Property(n => n.MessageHead).IsRequired().HasMaxLength(200);
148+
entity.Property(n => n.MessageBody).IsRequired().HasMaxLength(1000);
149+
entity.Property(n => n.CreatedAtUtc).IsRequired().HasDefaultValueSql("CURRENT_TIMESTAMP");
150+
entity.Property(n => n.IsRead).IsRequired().HasDefaultValue(false);
151+
entity.HasIndex(n => n.UserId);
152+
});
153+
}
154+
}
155+
}

FinTrack/Dtos/LoginRequestDto.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace FinTrack.Dtos
2+
{
3+
public class LoginRequestDto
4+
{
5+
public string Email { get; set; } = string.Empty;
6+
public string Password { get; set; } = string.Empty;
7+
}
8+
9+
public class LoginResponseDto
10+
{
11+
public string Id { get; set; } = string.Empty;
12+
public int UserId { get; set; }
13+
public string UserName { get; set; } = string.Empty;
14+
public string Email { get; set; } = string.Empty;
15+
public string ProfilePicture { get; set; } = string.Empty;
16+
public string AccessToken { get; set; } = string.Empty;
17+
public string RefreshToken { get; set; } = string.Empty;
18+
public string RolesId { get; set; } = string.Empty;
19+
public string RolesValues { get; set; } = string.Empty;
20+
}
21+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace FinTrack.Dtos
2+
{
3+
public class RegisterRequestDto
4+
{
5+
public string? UserName { get; set; }
6+
public string Email { get; set; } = null!;
7+
public string Password { get; set; } = null!;
8+
public string? ProfilePicture { get; set; }
9+
}
10+
11+
public class OtpVerifyCodeRequestDto
12+
{
13+
public string Email { get; set; } = null!;
14+
public string Code { get; set; } = null!;
15+
}
16+
}

FinTrack/FinTrack.csproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@
4141
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
4242
<PackageReference Include="CSharper" Version="0.1.7" />
4343
<PackageReference Include="LiveChartsCore.SkiaSharpView.WPF" Version="2.0.0-rc5.4" />
44-
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.3" />
44+
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.6" />
45+
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.6">
46+
<PrivateAssets>all</PrivateAssets>
47+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
48+
</PackageReference>
4549
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.3" />
4650
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.3" />
4751
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3" />

0 commit comments

Comments
 (0)