diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2020-08-01 20:14:34 +0200 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2020-08-01 20:14:34 +0200 |
| commit | a800b3b9f18ae3e8ab030c30c5d7b6504f2a5ebb (patch) | |
| tree | 68ffcdb7a2b42418ff1c4818d0b2cd5af41d5fa2 /src/server/Models | |
| download | dough-a800b3b9f18ae3e8ab030c30c5d7b6504f2a5ebb.tar.xz dough-a800b3b9f18ae3e8ab030c30c5d7b6504f2a5ebb.zip | |
Initial commit
Diffstat (limited to 'src/server/Models')
| -rw-r--r-- | src/server/Models/Database/BaseModel.cs | 25 | ||||
| -rw-r--r-- | src/server/Models/Database/Category.cs | 7 | ||||
| -rw-r--r-- | src/server/Models/Database/MainDbContext.cs | 34 | ||||
| -rw-r--r-- | src/server/Models/Database/Payee.cs | 7 | ||||
| -rw-r--r-- | src/server/Models/Database/Transaction.cs | 43 | ||||
| -rw-r--r-- | src/server/Models/Database/User.cs | 31 | ||||
| -rw-r--r-- | src/server/Models/DbSetOverrides.cs | 25 | ||||
| -rw-r--r-- | src/server/Models/Exceptions/ModelValidationException.cs | 31 | ||||
| -rw-r--r-- | src/server/Models/Results/ErrorResult.cs | 14 |
9 files changed, 217 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); + } + } +} diff --git a/src/server/Models/DbSetOverrides.cs b/src/server/Models/DbSetOverrides.cs new file mode 100644 index 0000000..24622bc --- /dev/null +++ b/src/server/Models/DbSetOverrides.cs @@ -0,0 +1,25 @@ +using System; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Dough.Models.Database; + +namespace Dough.Models +{ + public static class DbSetOverrides + { + public static T SingleOrDefault<T>(this DbSet<T> entity, Guid id, + bool includeHidden = false) where T : BaseModel + { + if (includeHidden) + return entity.SingleOrDefault(c => c.Id == id); + return entity.SingleOrDefault(c => c.Id == id && !c.Hidden); + } + + public static User SingleByNameOrDefault(this DbSet<User> users, string username, bool includeHidden = false) + { + if (includeHidden) + return users.SingleOrDefault(c => c.Username == username); + return users.SingleOrDefault(c => c.Username == username && !c.Hidden); + } + } +} diff --git a/src/server/Models/Exceptions/ModelValidationException.cs b/src/server/Models/Exceptions/ModelValidationException.cs new file mode 100644 index 0000000..3156229 --- /dev/null +++ b/src/server/Models/Exceptions/ModelValidationException.cs @@ -0,0 +1,31 @@ +using System; +using System.Runtime.Serialization; +using Dough.Models.Results; + +namespace Dough.Models.Exceptions +{ + [Serializable] + public class ModelValidationException : Exception + { + public ErrorResult ErrorResult { get; set; } + + public ModelValidationException() + { + ErrorResult = new ErrorResult(); + } + + public ModelValidationException(string message) : base(message) + { + } + + public ModelValidationException(string message, Exception inner) : base(message, inner) + { + } + + protected ModelValidationException( + SerializationInfo info, + StreamingContext context) : base(info, context) + { + } + } +} diff --git a/src/server/Models/Results/ErrorResult.cs b/src/server/Models/Results/ErrorResult.cs new file mode 100644 index 0000000..8d4504f --- /dev/null +++ b/src/server/Models/Results/ErrorResult.cs @@ -0,0 +1,14 @@ +namespace Dough.Models.Results +{ + public class ErrorResult + { + public ErrorResult(string title = default, string message = default) + { + Title = title; + Message = message; + } + + public string Title { get; set; } = "En feil oppstod"; + public string Message { get; set; } = "Vennligst prøv igjen snart"; + } +} |
