aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/Models/Database
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/Models/Database')
-rw-r--r--src/server/Models/Database/BaseModel.cs25
-rw-r--r--src/server/Models/Database/Category.cs7
-rw-r--r--src/server/Models/Database/MainDbContext.cs34
-rw-r--r--src/server/Models/Database/Payee.cs7
-rw-r--r--src/server/Models/Database/Transaction.cs43
-rw-r--r--src/server/Models/Database/User.cs31
6 files changed, 147 insertions, 0 deletions
diff --git a/src/server/Models/Database/BaseModel.cs b/src/server/Models/Database/BaseModel.cs
new file mode 100644
index 0000000..32c2f8f
--- /dev/null
+++ b/src/server/Models/Database/BaseModel.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace Dough.Models.Database
+{
+ public class BaseModel
+ {
+ public Guid Id { get; set; }
+ public DateTime Created { get; set; }
+ public Guid? CreatedBy { get; set; }
+ public bool Hidden { get; set; }
+
+ public void SetBaseProperties(User actor = default)
+ {
+ Id = Guid.NewGuid();
+ Created = DateTime.UtcNow;
+ CreatedBy = actor?.Id;
+ }
+
+ protected void Update(BaseModel data)
+ {
+ Hidden = data.Hidden;
+ CreatedBy = data.CreatedBy;
+ }
+ }
+}
diff --git a/src/server/Models/Database/Category.cs b/src/server/Models/Database/Category.cs
new file mode 100644
index 0000000..10ef226
--- /dev/null
+++ b/src/server/Models/Database/Category.cs
@@ -0,0 +1,7 @@
+namespace Dough.Models.Database
+{
+ public class Category : BaseModel
+ {
+ public string Name { get; set; }
+ }
+}
diff --git a/src/server/Models/Database/MainDbContext.cs b/src/server/Models/Database/MainDbContext.cs
new file mode 100644
index 0000000..88b1585
--- /dev/null
+++ b/src/server/Models/Database/MainDbContext.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+
+namespace Dough.Models.Database
+{
+ public class MainDbContext : DbContext
+ {
+
+ public MainDbContext(DbContextOptions<MainDbContext> options) : base(options) {
+
+ }
+
+ public DbSet<Transaction> Transactions { get; set; }
+ public DbSet<User> Users { get; set; }
+ public DbSet<Category> Categories { get; set; }
+ public DbSet<Payee> Payees { get; set; }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity<Transaction>().ToTable("Transactions");
+ var initUser = new User("ivar");
+ initUser.SetBaseProperties();
+ initUser.HashAndSetPassword("ivar123");
+ modelBuilder.Entity<User>().HasData(new List<User>
+ {
+ initUser
+ });
+ modelBuilder.Entity<User>().ToTable("Users");
+ modelBuilder.Entity<Category>().ToTable("Categories");
+ modelBuilder.Entity<Payee>().ToTable("Payees");
+ base.OnModelCreating(modelBuilder);
+ }
+ }
+}
diff --git a/src/server/Models/Database/Payee.cs b/src/server/Models/Database/Payee.cs
new file mode 100644
index 0000000..b801d5f
--- /dev/null
+++ b/src/server/Models/Database/Payee.cs
@@ -0,0 +1,7 @@
+namespace Dough.Models.Database
+{
+ public class Payee : BaseModel
+ {
+ public string Name { get; set; }
+ }
+}
diff --git a/src/server/Models/Database/Transaction.cs b/src/server/Models/Database/Transaction.cs
new file mode 100644
index 0000000..a81626b
--- /dev/null
+++ b/src/server/Models/Database/Transaction.cs
@@ -0,0 +1,43 @@
+using System;
+using Dough.Models.Exceptions;
+
+namespace Dough.Models.Database
+{
+ public class Transaction : BaseModel
+ {
+ public string Tags { get; set; }
+ public string Note { get; set; }
+ public DateTime Date { get; set; }
+ public double Amount { get; set; }
+ public Guid PayeeId { get; set; }
+ public Guid CategoryId { get; set; }
+
+ public void Validate()
+ {
+ if (PayeeId == default)
+ {
+ var validationException = new ModelValidationException("PayeeId is invalid");
+ validationException.ErrorResult.Title = "Mottaker er ugyldig";
+ throw validationException;
+ }
+
+ if (CategoryId == default)
+ {
+ var validationException = new ModelValidationException("CategoryId is invalid");
+ validationException.ErrorResult.Title = "Kategori er ugyldig";
+ throw validationException;
+ }
+ }
+
+ public void Update(Transaction data)
+ {
+ Amount = data.Amount;
+ Date = data.Date;
+ Note = data.Note;
+ Tags = data.Tags;
+ CategoryId = data.CategoryId;
+ PayeeId = data.PayeeId;
+ base.Update(data);
+ }
+ }
+}
diff --git a/src/server/Models/Database/User.cs b/src/server/Models/Database/User.cs
new file mode 100644
index 0000000..479c15c
--- /dev/null
+++ b/src/server/Models/Database/User.cs
@@ -0,0 +1,31 @@
+using System;
+
+namespace Dough.Models.Database
+{
+ public class User : BaseModel
+ {
+
+ public User(string username = default)
+ {
+ Username = username;
+ }
+ public string Password { get; set; }
+ public string Username { get; set; }
+
+ public void Update(User data)
+ {
+ Username = data.Username;
+ base.Update(data);
+ }
+
+ public void HashAndSetPassword(string password)
+ {
+ Password = BCrypt.Net.BCrypt.HashPassword(password);
+ }
+
+ public bool VerifyPassword(string password)
+ {
+ return BCrypt.Net.BCrypt.Verify(password, Password);
+ }
+ }
+}