diff --git a/DataModels/Models/IUser.cs b/DataModels/Models/IUser.cs index 7098f65..9eb2ef6 100644 --- a/DataModels/Models/IUser.cs +++ b/DataModels/Models/IUser.cs @@ -13,6 +13,5 @@ namespace DataModels.Models string PasswordHash { get; } string Email { get; } DateTime Birthday { get; } - Guid RoleId { get; } } } \ No newline at end of file diff --git a/DatabaseImplement/Database.cs b/DatabaseImplement/Database.cs new file mode 100644 index 0000000..99b74bf --- /dev/null +++ b/DatabaseImplement/Database.cs @@ -0,0 +1,25 @@ +using DatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DatabaseImplement +{ + public class Database : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (optionsBuilder.IsConfigured == false) + { + optionsBuilder.UseNpgsql("Server=192.168.191.85:32768;Database=gun_market;Username=postgres;Password=7355608;"); + } + base.OnConfiguring(optionsBuilder); + } + + public virtual DbSet Roles { get; set; } = null!; + public virtual DbSet Users { get; set; } = null!; + } +} \ No newline at end of file diff --git a/DatabaseImplement/DatabaseImplement.csproj b/DatabaseImplement/DatabaseImplement.csproj index 85b7ca3..861b25f 100644 --- a/DatabaseImplement/DatabaseImplement.csproj +++ b/DatabaseImplement/DatabaseImplement.csproj @@ -7,8 +7,20 @@ - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/DatabaseImplement/Models/Role.cs b/DatabaseImplement/Models/Role.cs new file mode 100644 index 0000000..f5d7970 --- /dev/null +++ b/DatabaseImplement/Models/Role.cs @@ -0,0 +1,47 @@ +using Contracts.BindingModels; +using Contracts.ViewModels; +using DataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DatabaseImplement.Models +{ + public class Role : IRole + { + public Guid Id { get; set; } + + [Required] + public string Name { get; set; } = string.Empty; + + public RoleBindingModel GetBindingModel() => new() + { + Id = Id, + Name = Name, + }; + + public static Role ToRoleFromView(RoleViewModel model) => new() + { + Id = model.Id, + Name = model.Name, + }; + + public static Role ToRoleFromBinding(RoleBindingModel model) => new() + { + Id = model.Id, + Name = model.Name, + }; + + public void Update(RoleBindingModel model) + { + if (model is null) + { + throw new ArgumentNullException("Update role: bindinng model is null"); + } + Name = model.Name; + } + } +} \ No newline at end of file diff --git a/DatabaseImplement/Models/User.cs b/DatabaseImplement/Models/User.cs new file mode 100644 index 0000000..eea9542 --- /dev/null +++ b/DatabaseImplement/Models/User.cs @@ -0,0 +1,76 @@ +using Contracts.BindingModels; +using Contracts.ViewModels; +using DataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DatabaseImplement.Models +{ + public class User : IUser + { + public Guid Id { get; set; } + + [Required] + public string FirstName { get; set; } = string.Empty; + + [Required] + public string SecondName { get; set; } = string.Empty; + + [Required] + public string PasswordHash { get; set; } = string.Empty; + + [Required] + public string Email { get; set; } = string.Empty; + + [Required] + public DateTime Birthday { get; set; } + + public Role? Role { get; set; } + + public UserBindingModel GetBindingModel() + { + // TODO: get binding with a role by database contetxt + throw new NotImplementedException(); + } + + public static User ToUserFromView(UserViewModel model) => new() + { + Id = model.Id, + FirstName = model.FirstName, + SecondName = model.SecondName, + Email = model.Email, + Birthday = model.Birthday, + Role = Models.Role.ToRoleFromView(model.Role) + }; + + public static User ToUserFromBinding(UserBindingModel model) => new() + { + Id = model.Id, + FirstName = model.FirstName, + SecondName = model.SecondName, + Email = model.Email, + PasswordHash = model.PasswordHash, + Birthday = model.Birthday, + Role = Models.Role.ToRoleFromBinding(model.Role) + }; + + public void Update(UserBindingModel model) + { + if (model is null) + { + throw new ArgumentNullException("Update user: binding model is null"); + } + + Email = model.Email; + FirstName = model.FirstName; + SecondName = model.SecondName; + PasswordHash = model.PasswordHash; + Birthday = model.Birthday; + Role = Models.Role.ToRoleFromBinding(model.Role); + } + } +} \ No newline at end of file