From 6a85255c78a448256fab68cd361983ffc85f2b03 Mon Sep 17 00:00:00 2001 From: transtrike Date: Fri, 11 Dec 2020 14:35:39 +0200 Subject: Renamed Models to Data --- API/API.csproj | 2 +- API/Controllers/ErrorController.cs | 7 +- API/Controllers/UserController.cs | 6 +- API/Database/DbRepository.cs | 4 +- API/Database/DevHiveContext.cs | 2 +- API/Database/UserDbRepository.cs | 4 +- .../20201210085843_UserAddTest.Designer.cs | 325 --------------------- API/Migrations/20201210085843_UserAddTest.cs | 265 ----------------- ...20201210121627_UserTableImplemented.Designer.cs | 308 ------------------- .../20201210121627_UserTableImplemented.cs | 44 --- ...20201211123448_UserTableImplemented.Designer.cs | 308 +++++++++++++++++++ .../20201211123448_UserTableImplemented.cs | 253 ++++++++++++++++ API/Migrations/DevHiveContextModelSnapshot.cs | 222 +++++++------- API/Service/UserService.cs | 39 ++- API/Startup.cs | 5 +- Data/Data.csproj | 14 + Data/Models/Classes/Language.cs | 7 + Data/Models/Classes/Roles.cs | 9 + Data/Models/Classes/Technology.cs | 7 + Data/Models/Classes/User.cs | 93 ++++++ Data/Models/DTOs/UserDTO.cs | 11 + Data/Models/Interfaces/Database/IRepository.cs | 24 ++ Data/Models/Profiles/UserProfile.cs | 14 + DevHive.code-workspace | 4 +- DevHive.sln | 14 +- Models/Classes/Language.cs | 7 - Models/Classes/Roles.cs | 9 - Models/Classes/Technology.cs | 7 - Models/Classes/User.cs | 93 ------ Models/DTOs/UserDTO.cs | 11 - Models/Interfaces/Database/IRepository.cs | 24 -- Models/Models.csproj | 14 - Models/Profiles/UserProfile.cs | 14 - 33 files changed, 911 insertions(+), 1259 deletions(-) delete mode 100644 API/Migrations/20201210085843_UserAddTest.Designer.cs delete mode 100644 API/Migrations/20201210085843_UserAddTest.cs delete mode 100644 API/Migrations/20201210121627_UserTableImplemented.Designer.cs delete mode 100644 API/Migrations/20201210121627_UserTableImplemented.cs create mode 100644 API/Migrations/20201211123448_UserTableImplemented.Designer.cs create mode 100644 API/Migrations/20201211123448_UserTableImplemented.cs create mode 100644 Data/Data.csproj create mode 100644 Data/Models/Classes/Language.cs create mode 100644 Data/Models/Classes/Roles.cs create mode 100644 Data/Models/Classes/Technology.cs create mode 100644 Data/Models/Classes/User.cs create mode 100644 Data/Models/DTOs/UserDTO.cs create mode 100644 Data/Models/Interfaces/Database/IRepository.cs create mode 100644 Data/Models/Profiles/UserProfile.cs delete mode 100644 Models/Classes/Language.cs delete mode 100644 Models/Classes/Roles.cs delete mode 100644 Models/Classes/Technology.cs delete mode 100644 Models/Classes/User.cs delete mode 100644 Models/DTOs/UserDTO.cs delete mode 100644 Models/Interfaces/Database/IRepository.cs delete mode 100644 Models/Models.csproj delete mode 100644 Models/Profiles/UserProfile.cs diff --git a/API/API.csproj b/API/API.csproj index 3232fb9..0ea2d2e 100644 --- a/API/API.csproj +++ b/API/API.csproj @@ -17,6 +17,6 @@ - + \ No newline at end of file diff --git a/API/Controllers/ErrorController.cs b/API/Controllers/ErrorController.cs index 9af73ef..792d8cd 100644 --- a/API/Controllers/ErrorController.cs +++ b/API/Controllers/ErrorController.cs @@ -1,16 +1,19 @@ using System; using System.Net; +using System.Net.Http; using Microsoft.AspNetCore.Mvc; namespace API.Controllers { [ApiController] - [Route("/api/[controller]")] public class ErrorController { [HttpGet] - public HttpStatusCode Error(Exception exception) + [Route("HttpError")] + public HttpStatusCode HttpError(HttpRequestException exception) { + Console.WriteLine("WE HERE, BOIIIIIII"); + return HttpStatusCode.OK; } } diff --git a/API/Controllers/UserController.cs b/API/Controllers/UserController.cs index e8a58b8..3f18dbe 100644 --- a/API/Controllers/UserController.cs +++ b/API/Controllers/UserController.cs @@ -5,8 +5,8 @@ using API.Database; using API.Service; using AutoMapper; using Microsoft.AspNetCore.Mvc; -using Models.Classes; -using Models.DTOs; +using Data.Models.Classes; +using Data.Models.DTOs; namespace API.Controllers { @@ -30,7 +30,7 @@ namespace API.Controllers //Read [HttpGet] - public async Task GetById(int id) + public async Task GetById(int id) { return await this._service.GetUserById(id); } diff --git a/API/Database/DbRepository.cs b/API/Database/DbRepository.cs index a24be36..786062c 100644 --- a/API/Database/DbRepository.cs +++ b/API/Database/DbRepository.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Models.Interfaces.Database; +using Data.Models.Interfaces.Database; using Microsoft.EntityFrameworkCore; -using Models.Classes; +using Data.Models.Classes; namespace API.Database { diff --git a/API/Database/DevHiveContext.cs b/API/Database/DevHiveContext.cs index 4c342b5..f7bf82a 100644 --- a/API/Database/DevHiveContext.cs +++ b/API/Database/DevHiveContext.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore; using Microsoft.EntityFrameworkCore; -using Models.Classes; +using Data.Models.Classes; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; diff --git a/API/Database/UserDbRepository.cs b/API/Database/UserDbRepository.cs index a51e3a8..2aa1b55 100644 --- a/API/Database/UserDbRepository.cs +++ b/API/Database/UserDbRepository.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Models.Interfaces.Database; +using Data.Models.Interfaces.Database; using Microsoft.EntityFrameworkCore; -using Models.Classes; +using Data.Models.Classes; namespace API.Database { diff --git a/API/Migrations/20201210085843_UserAddTest.Designer.cs b/API/Migrations/20201210085843_UserAddTest.Designer.cs deleted file mode 100644 index 1f39c12..0000000 --- a/API/Migrations/20201210085843_UserAddTest.Designer.cs +++ /dev/null @@ -1,325 +0,0 @@ -// -using System; -using API.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -namespace API.Migrations -{ - [DbContext(typeof(DevHiveContext))] - [Migration("20201210085843_UserAddTest")] - partial class UserAddTest - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseIdentityByDefaultColumns() - .HasAnnotation("Relational:MaxIdentifierLength", 63) - .HasAnnotation("ProductVersion", "5.0.1"); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("ProviderKey") - .HasColumnType("text"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens"); - }); - - modelBuilder.Entity("Models.Classes.Language", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.HasKey("Id"); - - b.ToTable("Languages"); - }); - - modelBuilder.Entity("Models.Classes.Technology", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.HasKey("Id"); - - b.ToTable("Technologies"); - }); - - modelBuilder.Entity("Models.Classes.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("text"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("text"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("ProfilePicture") - .HasColumnType("text"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUsers"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Models.Classes.User", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany("Friends") - .HasForeignKey("UserId"); - }); - - modelBuilder.Entity("Models.Classes.User", b => - { - b.Navigation("Friends"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/API/Migrations/20201210085843_UserAddTest.cs b/API/Migrations/20201210085843_UserAddTest.cs deleted file mode 100644 index c036a75..0000000 --- a/API/Migrations/20201210085843_UserAddTest.cs +++ /dev/null @@ -1,265 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -namespace API.Migrations -{ - public partial class UserAddTest : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AspNetRoles", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - ConcurrencyStamp = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AspNetUsers", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), - FirstName = table.Column(type: "text", nullable: false), - LastName = table.Column(type: "text", nullable: false), - ProfilePicture = table.Column(type: "text", nullable: true), - UserId = table.Column(type: "integer", nullable: true), - NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - EmailConfirmed = table.Column(type: "boolean", nullable: false), - PasswordHash = table.Column(type: "text", nullable: true), - SecurityStamp = table.Column(type: "text", nullable: true), - ConcurrencyStamp = table.Column(type: "text", nullable: true), - PhoneNumber = table.Column(type: "text", nullable: true), - PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), - TwoFactorEnabled = table.Column(type: "boolean", nullable: false), - LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), - LockoutEnabled = table.Column(type: "boolean", nullable: false), - AccessFailedCount = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUsers", x => x.Id); - table.ForeignKey( - name: "FK_AspNetUsers_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "Languages", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) - }, - constraints: table => - { - table.PrimaryKey("PK_Languages", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Technologies", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) - }, - constraints: table => - { - table.PrimaryKey("PK_Technologies", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AspNetRoleClaims", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - RoleId = table.Column(type: "integer", nullable: false), - ClaimType = table.Column(type: "text", nullable: true), - ClaimValue = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", - column: x => x.RoleId, - principalTable: "AspNetRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserClaims", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - ClaimType = table.Column(type: "text", nullable: true), - ClaimValue = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AspNetUserClaims_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserLogins", - columns: table => new - { - LoginProvider = table.Column(type: "text", nullable: false), - ProviderKey = table.Column(type: "text", nullable: false), - ProviderDisplayName = table.Column(type: "text", nullable: true), - UserId = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); - table.ForeignKey( - name: "FK_AspNetUserLogins_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserRoles", - columns: table => new - { - UserId = table.Column(type: "integer", nullable: false), - RoleId = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AspNetUserRoles_AspNetRoles_RoleId", - column: x => x.RoleId, - principalTable: "AspNetRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AspNetUserRoles_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserTokens", - columns: table => new - { - UserId = table.Column(type: "integer", nullable: false), - LoginProvider = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: false), - Value = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AspNetUserTokens_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AspNetRoleClaims_RoleId", - table: "AspNetRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "RoleNameIndex", - table: "AspNetRoles", - column: "NormalizedName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserClaims_UserId", - table: "AspNetUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserLogins_UserId", - table: "AspNetUserLogins", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserRoles_RoleId", - table: "AspNetUserRoles", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "EmailIndex", - table: "AspNetUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUsers_UserId", - table: "AspNetUsers", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "UserNameIndex", - table: "AspNetUsers", - column: "NormalizedUserName", - unique: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AspNetRoleClaims"); - - migrationBuilder.DropTable( - name: "AspNetUserClaims"); - - migrationBuilder.DropTable( - name: "AspNetUserLogins"); - - migrationBuilder.DropTable( - name: "AspNetUserRoles"); - - migrationBuilder.DropTable( - name: "AspNetUserTokens"); - - migrationBuilder.DropTable( - name: "Languages"); - - migrationBuilder.DropTable( - name: "Technologies"); - - migrationBuilder.DropTable( - name: "AspNetRoles"); - - migrationBuilder.DropTable( - name: "AspNetUsers"); - } - } -} diff --git a/API/Migrations/20201210121627_UserTableImplemented.Designer.cs b/API/Migrations/20201210121627_UserTableImplemented.Designer.cs deleted file mode 100644 index ee570a2..0000000 --- a/API/Migrations/20201210121627_UserTableImplemented.Designer.cs +++ /dev/null @@ -1,308 +0,0 @@ -// -using System; -using API.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -namespace API.Migrations -{ - [DbContext(typeof(DevHiveContext))] - [Migration("20201210121627_UserTableImplemented")] - partial class UserTableImplemented - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseIdentityByDefaultColumns() - .HasAnnotation("Relational:MaxIdentifierLength", 63) - .HasAnnotation("ProductVersion", "5.0.1"); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("ProviderKey") - .HasColumnType("text"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens"); - }); - - modelBuilder.Entity("Models.Classes.Language", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.HasKey("Id"); - - b.ToTable("Languages"); - }); - - modelBuilder.Entity("Models.Classes.Roles", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles"); - }); - - modelBuilder.Entity("Models.Classes.Technology", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.HasKey("Id"); - - b.ToTable("Technologies"); - }); - - modelBuilder.Entity("Models.Classes.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("text"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("text"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("ProfilePicture") - .HasColumnType("text"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Models.Classes.Roles", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Models.Classes.Roles", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Models.Classes.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/API/Migrations/20201210121627_UserTableImplemented.cs b/API/Migrations/20201210121627_UserTableImplemented.cs deleted file mode 100644 index ea39ff8..0000000 --- a/API/Migrations/20201210121627_UserTableImplemented.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace API.Migrations -{ - public partial class UserTableImplemented : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_AspNetUsers_AspNetUsers_UserId", - table: "AspNetUsers"); - - migrationBuilder.DropIndex( - name: "IX_AspNetUsers_UserId", - table: "AspNetUsers"); - - migrationBuilder.DropColumn( - name: "UserId", - table: "AspNetUsers"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "UserId", - table: "AspNetUsers", - type: "integer", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUsers_UserId", - table: "AspNetUsers", - column: "UserId"); - - migrationBuilder.AddForeignKey( - name: "FK_AspNetUsers_AspNetUsers_UserId", - table: "AspNetUsers", - column: "UserId", - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - } -} diff --git a/API/Migrations/20201211123448_UserTableImplemented.Designer.cs b/API/Migrations/20201211123448_UserTableImplemented.Designer.cs new file mode 100644 index 0000000..3b0902e --- /dev/null +++ b/API/Migrations/20201211123448_UserTableImplemented.Designer.cs @@ -0,0 +1,308 @@ +// +using System; +using API.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +namespace API.Migrations +{ + [DbContext(typeof(DevHiveContext))] + [Migration("20201211123448_UserTableImplemented")] + partial class UserTableImplemented + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityByDefaultColumns() + .HasAnnotation("Relational:MaxIdentifierLength", 63) + .HasAnnotation("ProductVersion", "5.0.1"); + + modelBuilder.Entity("Data.Models.Classes.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.HasKey("Id"); + + b.ToTable("Languages"); + }); + + modelBuilder.Entity("Data.Models.Classes.Roles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Data.Models.Classes.Technology", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.HasKey("Id"); + + b.ToTable("Technologies"); + }); + + modelBuilder.Entity("Data.Models.Classes.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("AccessFailedCount") + .HasColumnType("integer"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("text"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PasswordHash") + .HasColumnType("text"); + + b.Property("PhoneNumber") + .HasColumnType("text"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("boolean"); + + b.Property("ProfilePicture") + .HasColumnType("text"); + + b.Property("SecurityStamp") + .HasColumnType("text"); + + b.Property("TwoFactorEnabled") + .HasColumnType("boolean"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("integer"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Data.Models.Classes.Roles", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Data.Models.Classes.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Data.Models.Classes.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Data.Models.Classes.Roles", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Data.Models.Classes.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Data.Models.Classes.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/API/Migrations/20201211123448_UserTableImplemented.cs b/API/Migrations/20201211123448_UserTableImplemented.cs new file mode 100644 index 0000000..2c4082d --- /dev/null +++ b/API/Migrations/20201211123448_UserTableImplemented.cs @@ -0,0 +1,253 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +namespace API.Migrations +{ + public partial class UserTableImplemented : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + FirstName = table.Column(type: "text", nullable: false), + LastName = table.Column(type: "text", nullable: false), + ProfilePicture = table.Column(type: "text", nullable: true), + NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + EmailConfirmed = table.Column(type: "boolean", nullable: false), + PasswordHash = table.Column(type: "text", nullable: true), + SecurityStamp = table.Column(type: "text", nullable: true), + ConcurrencyStamp = table.Column(type: "text", nullable: true), + PhoneNumber = table.Column(type: "text", nullable: true), + PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), + TwoFactorEnabled = table.Column(type: "boolean", nullable: false), + LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), + LockoutEnabled = table.Column(type: "boolean", nullable: false), + AccessFailedCount = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Languages", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) + }, + constraints: table => + { + table.PrimaryKey("PK_Languages", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Technologies", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) + }, + constraints: table => + { + table.PrimaryKey("PK_Technologies", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + RoleId = table.Column(type: "integer", nullable: false), + ClaimType = table.Column(type: "text", nullable: true), + ClaimValue = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserClaims", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + ClaimType = table.Column(type: "text", nullable: true), + ClaimValue = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetUserClaims_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserLogins", + columns: table => new + { + LoginProvider = table.Column(type: "text", nullable: false), + ProviderKey = table.Column(type: "text", nullable: false), + ProviderDisplayName = table.Column(type: "text", nullable: true), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); + table.ForeignKey( + name: "FK_AspNetUserLogins_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserRoles", + columns: table => new + { + UserId = table.Column(type: "integer", nullable: false), + RoleId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserTokens", + columns: table => new + { + UserId = table.Column(type: "integer", nullable: false), + LoginProvider = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + Value = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AspNetUserTokens_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AspNetRoleClaims_RoleId", + table: "AspNetRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "AspNetRoles", + column: "NormalizedName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserClaims_UserId", + table: "AspNetUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserLogins_UserId", + table: "AspNetUserLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserRoles_RoleId", + table: "AspNetUserRoles", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "EmailIndex", + table: "AspNetUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "UserNameIndex", + table: "AspNetUsers", + column: "NormalizedUserName", + unique: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AspNetRoleClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserLogins"); + + migrationBuilder.DropTable( + name: "AspNetUserRoles"); + + migrationBuilder.DropTable( + name: "AspNetUserTokens"); + + migrationBuilder.DropTable( + name: "Languages"); + + migrationBuilder.DropTable( + name: "Technologies"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); + + migrationBuilder.DropTable( + name: "AspNetUsers"); + } + } +} diff --git a/API/Migrations/DevHiveContextModelSnapshot.cs b/API/Migrations/DevHiveContextModelSnapshot.cs index cf670a2..eb9d6a4 100644 --- a/API/Migrations/DevHiveContextModelSnapshot.cs +++ b/API/Migrations/DevHiveContextModelSnapshot.cs @@ -19,108 +19,7 @@ namespace API.Migrations .HasAnnotation("Relational:MaxIdentifierLength", 63) .HasAnnotation("ProductVersion", "5.0.1"); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .UseIdentityByDefaultColumn(); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("ProviderKey") - .HasColumnType("text"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("RoleId") - .HasColumnType("integer"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens"); - }); - - modelBuilder.Entity("Models.Classes.Language", b => + modelBuilder.Entity("Data.Models.Classes.Language", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -132,7 +31,7 @@ namespace API.Migrations b.ToTable("Languages"); }); - modelBuilder.Entity("Models.Classes.Roles", b => + modelBuilder.Entity("Data.Models.Classes.Roles", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -160,7 +59,7 @@ namespace API.Migrations b.ToTable("AspNetRoles"); }); - modelBuilder.Entity("Models.Classes.Technology", b => + modelBuilder.Entity("Data.Models.Classes.Technology", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -172,7 +71,7 @@ namespace API.Migrations b.ToTable("Technologies"); }); - modelBuilder.Entity("Models.Classes.User", b => + modelBuilder.Entity("Data.Models.Classes.User", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -252,7 +151,108 @@ namespace API.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.HasOne("Models.Classes.Roles", null) + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .UseIdentityByDefaultColumn(); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("integer"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Data.Models.Classes.Roles", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) @@ -261,7 +261,7 @@ namespace API.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { - b.HasOne("Models.Classes.User", null) + b.HasOne("Data.Models.Classes.User", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -270,7 +270,7 @@ namespace API.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { - b.HasOne("Models.Classes.User", null) + b.HasOne("Data.Models.Classes.User", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -279,13 +279,13 @@ namespace API.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { - b.HasOne("Models.Classes.Roles", null) + b.HasOne("Data.Models.Classes.Roles", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Models.Classes.User", null) + b.HasOne("Data.Models.Classes.User", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -294,7 +294,7 @@ namespace API.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { - b.HasOne("Models.Classes.User", null) + b.HasOne("Data.Models.Classes.User", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) diff --git a/API/Service/UserService.cs b/API/Service/UserService.cs index d32b31f..a03de45 100644 --- a/API/Service/UserService.cs +++ b/API/Service/UserService.cs @@ -2,10 +2,14 @@ using System.Net; using System.Threading.Tasks; using API.Database; using AutoMapper; -using Models.Classes; -using Models.DTOs; +using Data.Models.Classes; +using Data.Models.DTOs; using Newtonsoft.Json; using System.Web.Http; +using System.Net.Http; +using Npgsql.EntityFrameworkCore.PostgreSQL.Query.ExpressionTranslators.Internal; +using System; +using Microsoft.AspNetCore.Mvc.Routing; namespace API.Service { @@ -22,30 +26,32 @@ namespace API.Service public async Task CreateUser(UserDTO userDTO) { - if(this._userDbRepository.DoesUsernameExist(userDTO.UserName)) - return HttpStatusCode.Forbidden; + if (this._userDbRepository.DoesUsernameExist(userDTO.UserName)) + ThrowHttpRequestException(HttpStatusCode.BadRequest, "Username already exists!"); User user = this._userMapper.Map(userDTO); await this._userDbRepository.AddAsync(user); - return HttpStatusCode.OK; + return HttpStatusCode.Created; } - public async Task GetUserById(int id) + public async Task GetUserById(int id) { - User user = await this._userDbRepository.FindByIdAsync(id) ?? - throw new HttpResponseException(HttpStatusCode.NotFound); + User user = await this._userDbRepository.FindByIdAsync(id); - return JsonConvert.SerializeObject(user); + if (user == null) + ThrowHttpRequestException(HttpStatusCode.NotFound); + + return user; } public async Task UpdateUser(int id, UserDTO userDTO) { if (!this._userDbRepository.DoesUserExist(id)) - return HttpStatusCode.NotFound; + ThrowHttpRequestException(HttpStatusCode.NotFound); if (this._userDbRepository.DoesUsernameExist(userDTO.UserName)) - return HttpStatusCode.Forbidden; + ThrowHttpRequestException(HttpStatusCode.Forbidden); User user = this._userMapper.Map(userDTO); await this._userDbRepository.EditAsync(id, user); @@ -62,5 +68,16 @@ namespace API.Service return HttpStatusCode.OK; } + + private void ThrowHttpRequestException(HttpStatusCode statusCode, string errorMessage = "") + { + HttpResponseMessage message = new() + { + StatusCode = statusCode, + Content = new StringContent(errorMessage) + }; + + throw new HttpResponseException(message); + } } } diff --git a/API/Startup.cs b/API/Startup.cs index 796f13a..f373f7a 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -9,7 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; -using Models.Classes; +using Data.Models.Classes; namespace API { @@ -56,7 +56,8 @@ namespace API { if (env.IsDevelopment()) { - app.UseDeveloperExceptionPage(); + //app.UseDeveloperExceptionPage(); + app.UseExceptionHandler("/api/Error"); //TESTING app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1")); } diff --git a/Data/Data.csproj b/Data/Data.csproj new file mode 100644 index 0000000..373fbc4 --- /dev/null +++ b/Data/Data.csproj @@ -0,0 +1,14 @@ + + + + net5.0 + Data + + + + + + + + + diff --git a/Data/Models/Classes/Language.cs b/Data/Models/Classes/Language.cs new file mode 100644 index 0000000..116b451 --- /dev/null +++ b/Data/Models/Classes/Language.cs @@ -0,0 +1,7 @@ +namespace Data.Models.Classes +{ + public class Language + { + public int Id { get; set; } + } +} diff --git a/Data/Models/Classes/Roles.cs b/Data/Models/Classes/Roles.cs new file mode 100644 index 0000000..1f8c9f2 --- /dev/null +++ b/Data/Models/Classes/Roles.cs @@ -0,0 +1,9 @@ +using Microsoft.AspNetCore.Identity; + +namespace Data.Models.Classes +{ + public class Roles : IdentityRole + { + + } +} \ No newline at end of file diff --git a/Data/Models/Classes/Technology.cs b/Data/Models/Classes/Technology.cs new file mode 100644 index 0000000..ccdc425 --- /dev/null +++ b/Data/Models/Classes/Technology.cs @@ -0,0 +1,7 @@ +namespace Data.Models.Classes +{ + public class Technology + { + public int Id { get; set; } + } +} diff --git a/Data/Models/Classes/User.cs b/Data/Models/Classes/User.cs new file mode 100644 index 0000000..525d725 --- /dev/null +++ b/Data/Models/Classes/User.cs @@ -0,0 +1,93 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.AspNetCore.Identity; +using System.Collections.Generic; + +namespace Data.Models.Classes +{ + [Table("Users")] + public class User : IdentityUser + { + private string _firstName; + private string _lastName; + private string _profilePicture; + + [Required] + [Range(3, 50)] + [Display(Name = "Username")] + public override string UserName + { + get => base.UserName; + set + { + ValidateString("Username", 3, 50, value, true); + base.UserName = value; + } + } + + [Required] + [Range(3, 30)] + public string FirstName + { + get => this._firstName; + set + { + ValidateString("FirstName", 3, 30, value, false); + this._firstName = value; + } + } + + [Required] + [Range(3, 30)] + public string LastName + { + get => this._lastName; + set + { + ValidateString("LastName", 3, 30, value, false); + this._lastName = value; + } + } + + public string ProfilePicture + { + get => this._profilePicture; + set + { + ValidateURL(value); + this._profilePicture = value; + } + } + + // public List Friends { get; set; } + + /// + /// Throws an argument exception if the given value is not composed only of letters, and if specified, also of digits. + /// Does nothing otherwise. + /// + private static void ValidateString(string name, int minLength, int maxLength, string value, bool canBeDigit) + { + if (value.Length < minLength || value.Length > maxLength) + throw new ArgumentException($"{name} length cannot be less than {minLength} and more than {maxLength}."); + + foreach (char character in value) // more efficient than Linq + { + if (!Char.IsLetter(character)) + if (!(Char.IsDigit(character) && canBeDigit)) + throw new ArgumentException($"{name} contains invalid characters."); + } + } + + /// + /// Throws an exception if the absolute url isn't valid. + /// Does nothing otherwise. + /// + private static void ValidateURL(string urlValue) + { + // Throws an error is URL is invalid + Uri validatedUri; + Uri.TryCreate(urlValue, UriKind.Absolute, out validatedUri); + } + } +} diff --git a/Data/Models/DTOs/UserDTO.cs b/Data/Models/DTOs/UserDTO.cs new file mode 100644 index 0000000..d0b8642 --- /dev/null +++ b/Data/Models/DTOs/UserDTO.cs @@ -0,0 +1,11 @@ +namespace Data.Models.DTOs +{ + public class UserDTO + { + public int Id { get; set; } + public string UserName { get; set; } + public string Email { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + } +} \ No newline at end of file diff --git a/Data/Models/Interfaces/Database/IRepository.cs b/Data/Models/Interfaces/Database/IRepository.cs new file mode 100644 index 0000000..81a1a35 --- /dev/null +++ b/Data/Models/Interfaces/Database/IRepository.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Data.Models.Interfaces.Database +{ + public interface IRepository + where TEntity : class + { + //Add Entity to database + Task AddAsync(TEntity entity); + + //Return *count* instances of Entity from the database + IEnumerable Query(int count); + + //Find entity by id + Task FindByIdAsync(object id); + + //Modify Entity from database + Task EditAsync(object id, TEntity newEntity); + + //Delete Entity from database + Task DeleteAsync(object id); + } +} \ No newline at end of file diff --git a/Data/Models/Profiles/UserProfile.cs b/Data/Models/Profiles/UserProfile.cs new file mode 100644 index 0000000..048deed --- /dev/null +++ b/Data/Models/Profiles/UserProfile.cs @@ -0,0 +1,14 @@ +using Data.Models.Classes; +using Data.Models.DTOs; +using AutoMapper; + +namespace Data.Models.Profiles +{ + public class UserProfile : Profile + { + public UserProfile() + { + CreateMap(); + } + } +} diff --git a/DevHive.code-workspace b/DevHive.code-workspace index 539adda..3a8b687 100644 --- a/DevHive.code-workspace +++ b/DevHive.code-workspace @@ -9,8 +9,8 @@ "path": "./Web" }, { - "name": "Models", - "path": "./Models" + "name": "Data", + "path": "./Data" } ], "settings": { diff --git a/DevHive.sln b/DevHive.sln index 2f07003..b7a3732 100644 --- a/DevHive.sln +++ b/DevHive.sln @@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API", "API\API.csproj", "{A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web", "Web\Web.csproj", "{980ABDFB-488C-4A76-9F5A-116191F51CD4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Models", "Models\Models.csproj", "{37478C6A-562D-41CD-9F02-88BC74A74F04}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Data", "Data\Data.csproj", "{2A8926E6-0E7A-4635-96EA-C5673BBB5219}" EndProject Global GlobalSection(SolutionProperties) = preSolution @@ -58,5 +58,17 @@ Global {37478C6A-562D-41CD-9F02-88BC74A74F04}.Release|x64.Build.0 = Release|Any CPU {37478C6A-562D-41CD-9F02-88BC74A74F04}.Release|x86.ActiveCfg = Release|Any CPU {37478C6A-562D-41CD-9F02-88BC74A74F04}.Release|x86.Build.0 = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|x64.ActiveCfg = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|x64.Build.0 = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|x86.ActiveCfg = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Debug|x86.Build.0 = Debug|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|Any CPU.Build.0 = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|x64.ActiveCfg = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|x64.Build.0 = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|x86.ActiveCfg = Release|Any CPU + {2A8926E6-0E7A-4635-96EA-C5673BBB5219}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/Models/Classes/Language.cs b/Models/Classes/Language.cs deleted file mode 100644 index 95f7120..0000000 --- a/Models/Classes/Language.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Models.Classes -{ - public class Language - { - public int Id { get; set; } - } -} diff --git a/Models/Classes/Roles.cs b/Models/Classes/Roles.cs deleted file mode 100644 index 12f4665..0000000 --- a/Models/Classes/Roles.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Microsoft.AspNetCore.Identity; - -namespace Models.Classes -{ - public class Roles : IdentityRole - { - - } -} \ No newline at end of file diff --git a/Models/Classes/Technology.cs b/Models/Classes/Technology.cs deleted file mode 100644 index 3ffeebb..0000000 --- a/Models/Classes/Technology.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Models.Classes -{ - public class Technology - { - public int Id { get; set; } - } -} diff --git a/Models/Classes/User.cs b/Models/Classes/User.cs deleted file mode 100644 index 72ecb26..0000000 --- a/Models/Classes/User.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.AspNetCore.Identity; -using System.Collections.Generic; - -namespace Models.Classes -{ - [Table("Users")] - public class User : IdentityUser - { - private string _firstName; - private string _lastName; - private string _profilePicture; - - [Required] - [Range(3, 50)] - [Display(Name = "Username")] - public override string UserName - { - get => base.UserName; - set - { - ValidateString("Username", 3, 50, value, true); - base.UserName = value; - } - } - - [Required] - [Range(3, 30)] - public string FirstName - { - get => this._firstName; - set - { - ValidateString("FirstName", 3, 30, value, false); - this._firstName = value; - } - } - - [Required] - [Range(3, 30)] - public string LastName - { - get => this._lastName; - set - { - ValidateString("LastName", 3, 30, value, false); - this._lastName = value; - } - } - - public string ProfilePicture - { - get => this._profilePicture; - set - { - ValidateURL(value); - this._profilePicture = value; - } - } - - // public List Friends { get; set; } - - /// - /// Throws an argument exception if the given value is not composed only of letters, and if specified, also of digits. - /// Does nothing otherwise. - /// - private static void ValidateString(string name, int minLength, int maxLength, string value, bool canBeDigit) - { - if (value.Length < minLength || value.Length > maxLength) - throw new ArgumentException($"{name} length cannot be less than {minLength} and more than {maxLength}."); - - foreach (char character in value) // more efficient than Linq - { - if (!Char.IsLetter(character)) - if (!(Char.IsDigit(character) && canBeDigit)) - throw new ArgumentException($"{name} contains invalid characters."); - } - } - - /// - /// Throws an exception if the absolute url isn't valid. - /// Does nothing otherwise. - /// - private static void ValidateURL(string urlValue) - { - // Throws an error is URL is invalid - Uri validatedUri; - Uri.TryCreate(urlValue, UriKind.Absolute, out validatedUri); - } - } -} diff --git a/Models/DTOs/UserDTO.cs b/Models/DTOs/UserDTO.cs deleted file mode 100644 index 6c4e273..0000000 --- a/Models/DTOs/UserDTO.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Models.DTOs -{ - public class UserDTO - { - public int Id { get; set; } - public string UserName { get; set; } - public string Email { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - } -} \ No newline at end of file diff --git a/Models/Interfaces/Database/IRepository.cs b/Models/Interfaces/Database/IRepository.cs deleted file mode 100644 index 449a807..0000000 --- a/Models/Interfaces/Database/IRepository.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace Models.Interfaces.Database -{ - public interface IRepository - where TEntity : class - { - //Add Entity to database - Task AddAsync(TEntity entity); - - //Return *count* instances of Entity from the database - IEnumerable Query(int count); - - //Find entity by id - Task FindByIdAsync(object id); - - //Modify Entity from database - Task EditAsync(object id, TEntity newEntity); - - //Delete Entity from database - Task DeleteAsync(object id); - } -} \ No newline at end of file diff --git a/Models/Models.csproj b/Models/Models.csproj deleted file mode 100644 index 94e0981..0000000 --- a/Models/Models.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net5.0 - Models - - - - - - - - - diff --git a/Models/Profiles/UserProfile.cs b/Models/Profiles/UserProfile.cs deleted file mode 100644 index df74920..0000000 --- a/Models/Profiles/UserProfile.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Models.Classes; -using Models.DTOs; -using AutoMapper; - -namespace Models.Profiles -{ - public class UserProfile : Profile - { - public UserProfile() - { - CreateMap(); - } - } -} -- cgit v1.2.3