From 5f2ef996c1b24f7d683e5f2d23fe84c6539a1447 Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Mon, 4 Feb 2019 02:19:44 -0600 Subject: [PATCH 1/6] Created Project added Models and relationships and migrated to sqlserver --- .../Context/VolunteerSiteDbContext.cs | 19 ++ .../20190204080041_initial.Designer.cs | 168 ++++++++++++++++++ .../Migrations/20190204080041_initial.cs | 153 ++++++++++++++++ .../VolunteerSiteDbContextModelSnapshot.cs | 166 +++++++++++++++++ .../VolunteerSite.Data.csproj | 20 +++ .../Models/ErrorViewModel.cs | 11 ++ .../Models/GroupMember.cs | 19 ++ .../VolunteerSite.Domain/Models/JobListing.cs | 22 +++ .../Models/Organization.cs | 20 +++ .../VolunteerSite.Domain/Models/Volunteer.cs | 19 ++ .../Models/VolunteerGroup.cs | 17 ++ .../VolunteerSite.Domain.csproj | 16 ++ .../Controllers/HomeController.cs | 29 +++ .../Models/ErrorViewModel.cs | 11 ++ .../VolunteerSite.WebUI/Program.cs | 24 +++ .../Properties/launchSettings.json | 27 +++ .../VolunteerSite.WebUI/Startup.cs | 69 +++++++ .../Views/Home/Index.cshtml | 8 + .../Views/Home/Privacy.cshtml | 6 + .../Views/Shared/Error.cshtml | 25 +++ .../Views/Shared/_CookieConsentPartial.cshtml | 25 +++ .../Views/Shared/_Layout.cshtml | 77 ++++++++ .../Shared/_ValidationScriptsPartial.cshtml | 18 ++ .../Views/_ViewImports.cshtml | 3 + .../Views/_ViewStart.cshtml | 3 + .../VolunteerSite.WebUI.csproj | 20 +++ .../appsettings.Development.json | 9 + .../VolunteerSite.WebUI/appsettings.json | 8 + .../VolunteerSite.WebUI/wwwroot/css/site.css | 56 ++++++ .../VolunteerSite.WebUI/wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../VolunteerSite.WebUI/wwwroot/js/site.js | 4 + .../Controllers/HomeController.cs | 29 +++ .../Models/ErrorViewModel.cs | 11 ++ .../VolunteerSite.WebUI2/Program.cs | 24 +++ .../Properties/launchSettings.json | 27 +++ .../VolunteerSite.WebUI2/Startup.cs | 64 +++++++ .../Views/Home/Index.cshtml | 8 + .../Views/Home/Privacy.cshtml | 6 + .../Views/Shared/Error.cshtml | 25 +++ .../Views/Shared/_CookieConsentPartial.cshtml | 25 +++ .../Views/Shared/_Layout.cshtml | 77 ++++++++ .../Shared/_ValidationScriptsPartial.cshtml | 18 ++ .../Views/_ViewImports.cshtml | 3 + .../Views/_ViewStart.cshtml | 3 + .../VolunteerSite.WebUI2.csproj | 14 ++ .../appsettings.Development.json | 9 + .../VolunteerSite.WebUI2/appsettings.json | 8 + .../VolunteerSite.WebUI2/wwwroot/css/site.css | 56 ++++++ .../VolunteerSite.WebUI2/wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../VolunteerSite.WebUI2/wwwroot/js/site.js | 4 + VolunterSite.WebUI/VolunterSite.WebUI.sln | 37 ++++ .../Controllers/HomeController.cs | 43 +++++ .../Models/ErrorViewModel.cs | 11 ++ .../VolunterSite.WebUI/Program.cs | 24 +++ .../Properties/launchSettings.json | 27 +++ .../VolunterSite.WebUI/Startup.cs | 67 +++++++ .../Views/Home/About.cshtml | 7 + .../Views/Home/Contact.cshtml | 17 ++ .../Views/Home/Index.cshtml | 94 ++++++++++ .../Views/Home/Privacy.cshtml | 6 + .../Views/Shared/Error.cshtml | 22 +++ .../Views/Shared/_CookieConsentPartial.cshtml | 41 +++++ .../Views/Shared/_Layout.cshtml | 74 ++++++++ .../Shared/_ValidationScriptsPartial.cshtml | 18 ++ .../Views/_ViewImports.cshtml | 3 + .../Views/_ViewStart.cshtml | 3 + .../VolunterSite.WebUI.csproj | 12 ++ .../appsettings.Development.json | 9 + .../VolunterSite.WebUI/appsettings.json | 8 + .../VolunterSite.WebUI/wwwroot/css/site.css | 37 ++++ .../wwwroot/css/site.min.css | 1 + .../VolunterSite.WebUI/wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../wwwroot/images/banner1.svg | 1 + .../wwwroot/images/banner2.svg | 1 + .../wwwroot/images/banner3.svg | 1 + .../VolunterSite.WebUI/wwwroot/js/site.js | 4 + .../VolunterSite.WebUI/wwwroot/js/site.min.js | 0 77 files changed, 2051 insertions(+) create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.Designer.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/ErrorViewModel.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/GroupMember.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/JobListing.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/Volunteer.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/HomeController.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Models/ErrorViewModel.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Program.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Properties/launchSettings.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Index.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Privacy.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/Error.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_Layout.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewImports.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewStart.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.Development.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/css/site.css create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/favicon.ico create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/js/site.js create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Controllers/HomeController.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Models/ErrorViewModel.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Program.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Properties/launchSettings.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Startup.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Index.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Privacy.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/Error.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_CookieConsentPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_Layout.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewImports.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewStart.cshtml create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/VolunteerSite.WebUI2.csproj create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.Development.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.json create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/css/site.css create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/favicon.ico create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/js/site.js create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI.sln create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Controllers/HomeController.cs create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Models/ErrorViewModel.cs create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Program.cs create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Properties/launchSettings.json create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Startup.cs create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/About.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Contact.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Index.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Privacy.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/Error.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_Layout.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewImports.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewStart.cshtml create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/VolunterSite.WebUI.csproj create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/appsettings.Development.json create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/appsettings.json create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.css create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.min.css create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/favicon.ico create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner1.svg create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner2.svg create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner3.svg create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.js create mode 100644 VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.min.js diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs new file mode 100644 index 0000000..051f081 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore; +using VolunteerSite.Domain.Models; +using System; +using System.Collections.Generic; +using System.Text; + +namespace VolunteerSite.Data.Context +{ + public class VolunteerSiteDbContext : DbContext + { + public VolunteerSiteDbContext(DbContextOptions options): base(options) { } + + public DbSet Volunteers { get; set; } + public DbSet VolunteerGroups { get; set; } + public DbSet Organizations { get; set; } + public DbSet JobListings { get; set; } + public DbSet GroupMembers { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.Designer.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.Designer.cs new file mode 100644 index 0000000..d5218b7 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.Designer.cs @@ -0,0 +1,168 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VolunteerSite.Data.Context; + +namespace VolunteerSite.Data.Migrations +{ + [DbContext(typeof(VolunteerSiteDbContext))] + [Migration("20190204080041_initial")] + partial class initial + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("TotalHours"); + + b.Property("VolunteerGroupId"); + + b.Property("VolunteerGroupId1"); + + b.HasKey("Id"); + + b.HasIndex("VolunteerGroupId1"); + + b.ToTable("GroupMembers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("Date"); + + b.Property("Description"); + + b.Property("OrganizationId"); + + b.Property("OrganizationId1"); + + b.Property("PositionsAvailable"); + + b.Property("State"); + + b.Property("TypeOfJob"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId1"); + + b.ToTable("JobListings"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("CompanyName"); + + b.Property("Email"); + + b.Property("PhoneNumber"); + + b.Property("State"); + + b.HasKey("Id"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Volunteer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("SkillsAndExperience"); + + b.HasKey("Id"); + + b.ToTable("Volunteers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("GroupName"); + + b.Property("GroupOwnerId"); + + b.Property("GroupOwnerId1"); + + b.HasKey("Id"); + + b.HasIndex("GroupOwnerId1"); + + b.ToTable("VolunteerGroups"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.HasOne("VolunteerSite.Domain.Models.VolunteerGroup", "VolunteerGroup") + .WithMany("GroupMembers") + .HasForeignKey("VolunteerGroupId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.HasOne("VolunteerSite.Domain.Models.Organization", "Organization") + .WithMany("JobListings") + .HasForeignKey("OrganizationId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.HasOne("VolunteerSite.Domain.Models.Volunteer", "GroupOwner") + .WithMany("VolunteerGroups") + .HasForeignKey("GroupOwnerId1"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.cs new file mode 100644 index 0000000..3bee4d1 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190204080041_initial.cs @@ -0,0 +1,153 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VolunteerSite.Data.Migrations +{ + public partial class initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Organizations", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + CompanyName = table.Column(nullable: true), + Address = table.Column(nullable: true), + City = table.Column(nullable: true), + State = table.Column(nullable: true), + Email = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Organizations", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Volunteers", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + FirstName = table.Column(nullable: true), + LastName = table.Column(nullable: true), + Email = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + SkillsAndExperience = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Volunteers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "JobListings", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + Address = table.Column(nullable: true), + City = table.Column(nullable: true), + State = table.Column(nullable: true), + PositionsAvailable = table.Column(nullable: false), + Description = table.Column(nullable: true), + TypeOfJob = table.Column(nullable: true), + Date = table.Column(nullable: false), + OrganizationId = table.Column(nullable: true), + OrganizationId1 = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_JobListings", x => x.Id); + table.ForeignKey( + name: "FK_JobListings_Organizations_OrganizationId1", + column: x => x.OrganizationId1, + principalTable: "Organizations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "VolunteerGroups", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + GroupName = table.Column(nullable: true), + GroupOwnerId = table.Column(nullable: true), + GroupOwnerId1 = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_VolunteerGroups", x => x.Id); + table.ForeignKey( + name: "FK_VolunteerGroups_Volunteers_GroupOwnerId1", + column: x => x.GroupOwnerId1, + principalTable: "Volunteers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "GroupMembers", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + FirstName = table.Column(nullable: true), + LastName = table.Column(nullable: true), + Email = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + TotalHours = table.Column(nullable: false), + VolunteerGroupId = table.Column(nullable: true), + VolunteerGroupId1 = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_GroupMembers", x => x.Id); + table.ForeignKey( + name: "FK_GroupMembers_VolunteerGroups_VolunteerGroupId1", + column: x => x.VolunteerGroupId1, + principalTable: "VolunteerGroups", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_GroupMembers_VolunteerGroupId1", + table: "GroupMembers", + column: "VolunteerGroupId1"); + + migrationBuilder.CreateIndex( + name: "IX_JobListings_OrganizationId1", + table: "JobListings", + column: "OrganizationId1"); + + migrationBuilder.CreateIndex( + name: "IX_VolunteerGroups_GroupOwnerId1", + table: "VolunteerGroups", + column: "GroupOwnerId1"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "GroupMembers"); + + migrationBuilder.DropTable( + name: "JobListings"); + + migrationBuilder.DropTable( + name: "VolunteerGroups"); + + migrationBuilder.DropTable( + name: "Organizations"); + + migrationBuilder.DropTable( + name: "Volunteers"); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs new file mode 100644 index 0000000..504fb09 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs @@ -0,0 +1,166 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VolunteerSite.Data.Context; + +namespace VolunteerSite.Data.Migrations +{ + [DbContext(typeof(VolunteerSiteDbContext))] + partial class VolunteerSiteDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("TotalHours"); + + b.Property("VolunteerGroupId"); + + b.Property("VolunteerGroupId1"); + + b.HasKey("Id"); + + b.HasIndex("VolunteerGroupId1"); + + b.ToTable("GroupMembers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("Date"); + + b.Property("Description"); + + b.Property("OrganizationId"); + + b.Property("OrganizationId1"); + + b.Property("PositionsAvailable"); + + b.Property("State"); + + b.Property("TypeOfJob"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId1"); + + b.ToTable("JobListings"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("CompanyName"); + + b.Property("Email"); + + b.Property("PhoneNumber"); + + b.Property("State"); + + b.HasKey("Id"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Volunteer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("SkillsAndExperience"); + + b.HasKey("Id"); + + b.ToTable("Volunteers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("GroupName"); + + b.Property("GroupOwnerId"); + + b.Property("GroupOwnerId1"); + + b.HasKey("Id"); + + b.HasIndex("GroupOwnerId1"); + + b.ToTable("VolunteerGroups"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.HasOne("VolunteerSite.Domain.Models.VolunteerGroup", "VolunteerGroup") + .WithMany("GroupMembers") + .HasForeignKey("VolunteerGroupId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.HasOne("VolunteerSite.Domain.Models.Organization", "Organization") + .WithMany("JobListings") + .HasForeignKey("OrganizationId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.HasOne("VolunteerSite.Domain.Models.Volunteer", "GroupOwner") + .WithMany("VolunteerGroups") + .HasForeignKey("GroupOwnerId1"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj b/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj new file mode 100644 index 0000000..48e0d90 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp2.2 + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/ErrorViewModel.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/ErrorViewModel.cs new file mode 100644 index 0000000..8167476 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/ErrorViewModel.cs @@ -0,0 +1,11 @@ +using System; + +namespace VolunterSite.WebUI.Models +{ + public class ErrorViewModel + { + public string RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/GroupMember.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/GroupMember.cs new file mode 100644 index 0000000..748aa57 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/GroupMember.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace VolunteerSite.Domain.Models +{ + public class GroupMember + { + public int Id { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string Email { get; set; } + public string PhoneNumber { get; set; } + public int TotalHours { get; set; } + + public string VolunteerGroupId { get; set; } + public VolunteerGroup VolunteerGroup { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/JobListing.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/JobListing.cs new file mode 100644 index 0000000..915d6e1 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/JobListing.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace VolunteerSite.Domain.Models +{ + public class JobListing + { + public int Id { get; set; } + public string Address { get; set; } + public string City { get; set; } + public string State { get; set; } + public int PositionsAvailable { get; set; } + public string Description { get; set; } + public string TypeOfJob { get; set; } + public DateTime Date { get; set; } + + public string OrganizationId { get; set; } + public Organization Organization { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs new file mode 100644 index 0000000..448779a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunterSite.WebUI.Models; + +namespace VolunteerSite.Domain.Models +{ + public class Organization + { + public int Id { get; set; } + public string CompanyName { get; set; } + public string Address { get; set; } + public string City { get; set; } + public string State { get; set; } + public string Email { get; set; } + public string PhoneNumber { get; set; } + + public IEnumerable JobListings { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/Volunteer.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Volunteer.cs new file mode 100644 index 0000000..bda03d0 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Volunteer.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace VolunteerSite.Domain.Models +{ + public class Volunteer + { + public int Id { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string Email { get; set; } + public string PhoneNumber { get; set; } + public string SkillsAndExperience { get; set; } + + // Navigation Collection + public IEnumerable VolunteerGroups { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs new file mode 100644 index 0000000..7fddf02 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace VolunteerSite.Domain.Models +{ + public class VolunteerGroup + { + public int Id { get; set; } + public string GroupName { get; set; } + + public string GroupOwnerId { get; set; } + public Volunteer GroupOwner { get; set; } + + public IEnumerable GroupMembers { get; set; } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj b/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj new file mode 100644 index 0000000..dbe0552 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp2.2 + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/HomeController.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/HomeController.cs new file mode 100644 index 0000000..092f3c8 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/HomeController.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using VolunteerSite.WebUI.Models; + +namespace VolunteerSite.WebUI.Controllers +{ + public class HomeController : Controller + { + public IActionResult Index() + { + return View(); + } + + public IActionResult Privacy() + { + return View(); + } + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public IActionResult Error() + { + return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Models/ErrorViewModel.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Models/ErrorViewModel.cs new file mode 100644 index 0000000..2205216 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Models/ErrorViewModel.cs @@ -0,0 +1,11 @@ +using System; + +namespace VolunteerSite.WebUI.Models +{ + public class ErrorViewModel + { + public string RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Program.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Program.cs new file mode 100644 index 0000000..e0b7d22 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace VolunteerSite.WebUI +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Properties/launchSettings.json b/VolunterSite.WebUI/VolunteerSite.WebUI/Properties/launchSettings.json new file mode 100644 index 0000000..2b54a80 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:55530", + "sslPort": 44312 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "VolunteerSite.WebUI": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs new file mode 100644 index 0000000..35de0cd --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using VolunteerSite.Data.Context; + +namespace VolunteerSite.WebUI +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // bad way of adding connection string + //TODO: fix later + var connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=volunteersite;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; + services.AddDbContext(options => options.UseSqlServer(connectionString)); + + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = SameSiteMode.None; + }); + + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseCookiePolicy(); + + app.UseMvc(routes => + { + routes.MapRoute( + name: "default", + template: "{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Index.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Index.cshtml new file mode 100644 index 0000000..d2d19bd --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Index.cshtml @@ -0,0 +1,8 @@ +@{ + ViewData["Title"] = "Home Page"; +} + +
+

Welcome

+

Learn about building Web apps with ASP.NET Core.

+
diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Privacy.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Privacy.cshtml new file mode 100644 index 0000000..af4fb19 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Home/Privacy.cshtml @@ -0,0 +1,6 @@ +@{ + ViewData["Title"] = "Privacy Policy"; +} +

@ViewData["Title"]

+ +

Use this page to detail your site's privacy policy.

diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/Error.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/Error.cshtml new file mode 100644 index 0000000..a1e0478 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/Error.cshtml @@ -0,0 +1,25 @@ +@model ErrorViewModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml new file mode 100644 index 0000000..a535ea4 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml @@ -0,0 +1,25 @@ +@using Microsoft.AspNetCore.Http.Features + +@{ + var consentFeature = Context.Features.Get(); + var showBanner = !consentFeature?.CanTrack ?? false; + var cookieString = consentFeature?.CreateConsentCookie(); +} + +@if (showBanner) +{ + + +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_Layout.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..d9a0579 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_Layout.cshtml @@ -0,0 +1,77 @@ + + + + + + @ViewData["Title"] - VolunteerSite.WebUI + + + + + + + + + + +
+ +
+
+ +
+ @RenderBody() +
+
+ +
+
+ © 2019 - VolunteerSite.WebUI - Privacy +
+
+ + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..3c0e077 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewImports.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewImports.cshtml new file mode 100644 index 0000000..94c63b5 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using VolunteerSite.WebUI +@using VolunteerSite.WebUI.Models +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewStart.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj new file mode 100644 index 0000000..cb9cfff --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp2.2 + InProcess + + + + + + + + + + + + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.Development.json b/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.json b/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.json new file mode 100644 index 0000000..def9159 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/css/site.css b/VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/css/site.css new file mode 100644 index 0000000..c486131 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/css/site.css @@ -0,0 +1,56 @@ +/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +for details on configuring this project to bundle and minify static web assets. */ + +a.navbar-brand { + white-space: normal; + text-align: center; + word-break: break-all; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + font-size: 14px; +} +@media (min-width: 768px) { + html { + font-size: 16px; + } +} + +.border-top { + border-top: 1px solid #e5e5e5; +} +.border-bottom { + border-bottom: 1px solid #e5e5e5; +} + +.box-shadow { + box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); +} + +button.accept-policy { + font-size: 1rem; + line-height: inherit; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + white-space: nowrap; + /* Set the fixed height of the footer here */ + height: 60px; + line-height: 60px; /* Vertically center the text there */ +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/favicon.ico b/VolunterSite.WebUI/VolunteerSite.WebUI/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Program.cs b/VolunterSite.WebUI/VolunteerSite.WebUI2/Program.cs new file mode 100644 index 0000000..07d96c0 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace VolunteerSite.WebUI2 +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Properties/launchSettings.json b/VolunterSite.WebUI/VolunteerSite.WebUI2/Properties/launchSettings.json new file mode 100644 index 0000000..5168021 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:55509", + "sslPort": 44376 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "VolunteerSite.WebUI2": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Startup.cs b/VolunterSite.WebUI/VolunteerSite.WebUI2/Startup.cs new file mode 100644 index 0000000..1718a40 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Startup.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace VolunteerSite.WebUI2 +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = SameSiteMode.None; + }); + + + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseCookiePolicy(); + + app.UseMvc(routes => + { + routes.MapRoute( + name: "default", + template: "{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Index.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Index.cshtml new file mode 100644 index 0000000..d2d19bd --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Index.cshtml @@ -0,0 +1,8 @@ +@{ + ViewData["Title"] = "Home Page"; +} + +
+

Welcome

+

Learn about building Web apps with ASP.NET Core.

+
diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Privacy.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Privacy.cshtml new file mode 100644 index 0000000..af4fb19 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Home/Privacy.cshtml @@ -0,0 +1,6 @@ +@{ + ViewData["Title"] = "Privacy Policy"; +} +

@ViewData["Title"]

+ +

Use this page to detail your site's privacy policy.

diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/Error.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/Error.cshtml new file mode 100644 index 0000000..a1e0478 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/Error.cshtml @@ -0,0 +1,25 @@ +@model ErrorViewModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_CookieConsentPartial.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_CookieConsentPartial.cshtml new file mode 100644 index 0000000..a535ea4 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_CookieConsentPartial.cshtml @@ -0,0 +1,25 @@ +@using Microsoft.AspNetCore.Http.Features + +@{ + var consentFeature = Context.Features.Get(); + var showBanner = !consentFeature?.CanTrack ?? false; + var cookieString = consentFeature?.CreateConsentCookie(); +} + +@if (showBanner) +{ + + +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_Layout.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..5075eab --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_Layout.cshtml @@ -0,0 +1,77 @@ + + + + + + @ViewData["Title"] - VolunteerSite.WebUI2 + + + + + + + + + + +
+ +
+
+ +
+ @RenderBody() +
+
+ +
+
+ © 2019 - VolunteerSite.WebUI2 - Privacy +
+
+ + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_ValidationScriptsPartial.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..3c0e077 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewImports.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewImports.cshtml new file mode 100644 index 0000000..fe7cfb0 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using VolunteerSite.WebUI2 +@using VolunteerSite.WebUI2.Models +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewStart.cshtml b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/VolunteerSite.WebUI2.csproj b/VolunterSite.WebUI/VolunteerSite.WebUI2/VolunteerSite.WebUI2.csproj new file mode 100644 index 0000000..8b11822 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/VolunteerSite.WebUI2.csproj @@ -0,0 +1,14 @@ + + + + netcoreapp2.2 + InProcess + + + + + + + + + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.Development.json b/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.json b/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.json new file mode 100644 index 0000000..def9159 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/css/site.css b/VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/css/site.css new file mode 100644 index 0000000..c486131 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/css/site.css @@ -0,0 +1,56 @@ +/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +for details on configuring this project to bundle and minify static web assets. */ + +a.navbar-brand { + white-space: normal; + text-align: center; + word-break: break-all; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + font-size: 14px; +} +@media (min-width: 768px) { + html { + font-size: 16px; + } +} + +.border-top { + border-top: 1px solid #e5e5e5; +} +.border-bottom { + border-bottom: 1px solid #e5e5e5; +} + +.box-shadow { + box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); +} + +button.accept-policy { + font-size: 1rem; + line-height: inherit; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + white-space: nowrap; + /* Set the fixed height of the footer here */ + height: 60px; + line-height: 60px; /* Vertically center the text there */ +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/favicon.ico b/VolunterSite.WebUI/VolunteerSite.WebUI2/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Program.cs b/VolunterSite.WebUI/VolunterSite.WebUI/Program.cs new file mode 100644 index 0000000..13daccf --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace VolunterSite.WebUI +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Properties/launchSettings.json b/VolunterSite.WebUI/VolunterSite.WebUI/Properties/launchSettings.json new file mode 100644 index 0000000..e92f707 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60571", + "sslPort": 44345 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "VolunterSite.WebUI": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Startup.cs b/VolunterSite.WebUI/VolunterSite.WebUI/Startup.cs new file mode 100644 index 0000000..b7fb12e --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Startup.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace VolunterSite.WebUI +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // bad way of adding connection string + //TODO: fix later + var connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; + services.AddDbContext + + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = SameSiteMode.None; + }); + + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseCookiePolicy(); + + app.UseMvc(routes => + { + routes.MapRoute( + name: "default", + template: "{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/About.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/About.cshtml new file mode 100644 index 0000000..3674e37 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/About.cshtml @@ -0,0 +1,7 @@ +@{ + ViewData["Title"] = "About"; +} +

@ViewData["Title"]

+

@ViewData["Message"]

+ +

Use this area to provide additional information.

diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Contact.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Contact.cshtml new file mode 100644 index 0000000..a11a186 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Contact.cshtml @@ -0,0 +1,17 @@ +@{ + ViewData["Title"] = "Contact"; +} +

@ViewData["Title"]

+

@ViewData["Message"]

+ +
+ One Microsoft Way
+ Redmond, WA 98052-6399
+ P: + 425.555.0100 +
+ +
+ Support: Support@example.com
+ Marketing: Marketing@example.com +
diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Index.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Index.cshtml new file mode 100644 index 0000000..f42d2a0 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Index.cshtml @@ -0,0 +1,94 @@ +@{ + ViewData["Title"] = "Home Page"; +} + + + + diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Privacy.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Privacy.cshtml new file mode 100644 index 0000000..7bd3861 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Home/Privacy.cshtml @@ -0,0 +1,6 @@ +@{ + ViewData["Title"] = "Privacy Policy"; +} +

@ViewData["Title"]

+ +

Use this page to detail your site's privacy policy.

diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/Error.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/Error.cshtml new file mode 100644 index 0000000..ec2ea6b --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/Error.cshtml @@ -0,0 +1,22 @@ +@model ErrorViewModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. +

diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml new file mode 100644 index 0000000..bbfbb09 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_CookieConsentPartial.cshtml @@ -0,0 +1,41 @@ +@using Microsoft.AspNetCore.Http.Features + +@{ + var consentFeature = Context.Features.Get(); + var showBanner = !consentFeature?.CanTrack ?? false; + var cookieString = consentFeature?.CreateConsentCookie(); +} + +@if (showBanner) +{ + + +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_Layout.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..43e56e5 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_Layout.cshtml @@ -0,0 +1,74 @@ + + + + + + @ViewData["Title"] - VolunterSite.WebUI + + + + + + + + + + + + + + + +
+ @RenderBody() +
+
+

© 2019 - VolunterSite.WebUI

+
+
+ + + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..2a9241f --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewImports.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewImports.cshtml new file mode 100644 index 0000000..8c97aa0 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using VolunterSite.WebUI +@using VolunterSite.WebUI.Models +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewStart.cshtml b/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/VolunterSite.WebUI.csproj b/VolunterSite.WebUI/VolunterSite.WebUI/VolunterSite.WebUI.csproj new file mode 100644 index 0000000..efb8edb --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/VolunterSite.WebUI.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp2.1 + + + + + + + + diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.Development.json b/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.json b/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.json new file mode 100644 index 0000000..def9159 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.css b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.css new file mode 100644 index 0000000..e89c781 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.css @@ -0,0 +1,37 @@ +/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\ +for details on configuring this project to bundle and minify static web assets. */ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Wrapping element */ +/* Set some basic padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Carousel */ +.carousel-caption p { + font-size: 20px; + line-height: 1.4; +} + +/* Make .svg files in the carousel display properly in older browsers */ +.carousel-inner .item img[src$=".svg"] { + width: 100%; +} + +/* QR code generator */ +#qrCode { + margin: 15px; +} + +/* Hide/rearrange for smaller screens */ +@media screen and (max-width: 767px) { + /* Hide captions */ + .carousel-caption { + display: none; + } +} diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.min.css b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.min.css new file mode 100644 index 0000000..5e93e30 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/css/site.min.css @@ -0,0 +1 @@ +body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/favicon.ico b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner2.svg b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner2.svg new file mode 100644 index 0000000..9679c60 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner3.svg b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner3.svg new file mode 100644 index 0000000..38b3d7c --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/images/banner3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.js b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.js new file mode 100644 index 0000000..ac49c18 --- /dev/null +++ b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.js @@ -0,0 +1,4 @@ +// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +// for details on configuring this project to bundle and minify static web assets. + +// Write your JavaScript code. diff --git a/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.min.js b/VolunterSite.WebUI/VolunterSite.WebUI/wwwroot/js/site.min.js new file mode 100644 index 0000000..e69de29 From 5b5cf4c3a0c2608b7d874f7b0d16dbaf24777015 Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Mon, 25 Feb 2019 00:24:48 -0600 Subject: [PATCH 2/6] moved connection string from startup to DbContext and added interfaces for models --- .../Context/VolunteerSiteDbContext.cs | 13 ++++++++++ .../Interfaces/IGroupMemberRepository.cs | 23 ++++++++++++++++++ .../IJobListingRepository - Copy.cs | 24 +++++++++++++++++++ .../Interfaces/IOrganizationRepository.cs | 22 +++++++++++++++++ .../Interfaces/IVolunteerGroupRepository.cs | 22 +++++++++++++++++ .../Interfaces/IVolunteerRepository.cs | 22 +++++++++++++++++ .../VolunteerSite.WebUI/Startup.cs | 5 ---- 7 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs index 051f081..4ac44fc 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs @@ -15,5 +15,18 @@ public VolunteerSiteDbContext(DbContextOptions options): public DbSet Organizations { get; set; } public DbSet JobListings { get; set; } public DbSet GroupMembers { get; set; } + + // Setting up the provider (SQL Server) and location of the Database + protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder) + { + // bad way of providing the connection string + optionBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=volunteersite;Trusted_Connection=True"); + } + + //Seeding - populate db with initial data + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } } } diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs new file mode 100644 index 0000000..8a126a6 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Interfaces +{ + public interface IGroupMemberRepository + { + //read + GroupMember GetById(int groupMemberId); + ICollection GetByGroupId(int groupId); + + //create + GroupMember Create(GroupMember newGroupMember); + + //Update + GroupMember Update(GroupMember UpdatedGroupMember); + + //Delete + bool DeleteById(int groupMemberId); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs new file mode 100644 index 0000000..07c931a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Interfaces +{ + interface IJobListingRepository + { + //Read + JobListing GetById(int jobListingId); + ICollection GetByOrganizationId(string organizationId); + ICollection GetByTypeOfJob(string typeOfJob); + + // Create + JobListing Create(JobListing newJobListing); + + //Update + JobListing Update(JobListing updatedJobListing); + + //Delete + bool DeleteById(int jobListingId); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs new file mode 100644 index 0000000..7c9f91a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Interfaces +{ + interface IOrganizationRepository + { + //Read + Organization GetById(int organizationId); + + // Create + Organization Create(Organization newOrganization); + + //Update + Organization Update(Organization updatedOrganization); + + //Delete + bool DeleteById(int organizationId); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs new file mode 100644 index 0000000..7b4484d --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Interfaces +{ + interface IVolunteerGroupRepository + { + //Read + VolunteerGroup GetById(int volunteerGroupId); + + // Create + VolunteerGroup Create(VolunteerGroup newVolunteerGroup); + + //Update + VolunteerGroup Update(VolunteerGroup updatedVolunteerGroup); + + //Delete + bool DeleteById(int volunteerGroupId); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs new file mode 100644 index 0000000..f9f759f --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Interfaces +{ + interface IVolunteerRepository + { + //Read + Volunteer GetById(int volunteerId); + + // Create + Volunteer Create(Volunteer newVolunteer); + + //Update + Volunteer Update(Volunteer updatedVolunteer); + + //Delete + bool DeleteById(int volunteerId); + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs index 35de0cd..17bcb6c 100644 --- a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs @@ -26,11 +26,6 @@ public Startup(IConfiguration configuration) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - // bad way of adding connection string - //TODO: fix later - var connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=volunteersite;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; - services.AddDbContext(options => options.UseSqlServer(connectionString)); - services.Configure(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. From 509d7139f21df9e2d3a3d3b884ec2e58db46a600 Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Mon, 25 Feb 2019 16:31:29 -0600 Subject: [PATCH 3/6] Created Mock and EFCore implementation and moved connection string to DbContext --- .../Context/VolunteerSiteDbContext.cs | 8 -- .../EFCore/EFCoreGroupMemberRepository.cs | 69 +++++++++++++++++ .../EFCore/EFCoreJobListingRepository.cs | 77 +++++++++++++++++++ .../EFCore/EFCoreOrganizationRepository.cs | 61 +++++++++++++++ .../Implementation/EFCore/EFCoreVolunteer.cs | 61 +++++++++++++++ .../EFCore/EFCoreVolunteerGroup.cs | 61 +++++++++++++++ .../Mock/MockGroupMemberRepository.cs | 50 ++++++++++++ .../Mock/MockJobListingRepository.cs | 55 +++++++++++++ .../Mock/MockOrganizationRepository.cs | 45 +++++++++++ .../Mock/MockVolunteerGroupRepository.cs | 45 +++++++++++ .../Mock/MockVolunteerRepository.cs | 45 +++++++++++ .../Interfaces/IGroupMemberRepository.cs | 2 +- 12 files changed, 570 insertions(+), 9 deletions(-) create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockJobListingRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockOrganizationRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerGroupRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerRepository.cs diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs index 4ac44fc..d213562 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs @@ -8,8 +8,6 @@ namespace VolunteerSite.Data.Context { public class VolunteerSiteDbContext : DbContext { - public VolunteerSiteDbContext(DbContextOptions options): base(options) { } - public DbSet Volunteers { get; set; } public DbSet VolunteerGroups { get; set; } public DbSet Organizations { get; set; } @@ -22,11 +20,5 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder) // bad way of providing the connection string optionBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=volunteersite;Trusted_Connection=True"); } - - //Seeding - populate db with initial data - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } } } diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs new file mode 100644 index 0000000..a46ae92 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Context; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.EFCore +{ + class EFCoreGroupMemberRepository : IGroupMemberRepository + { + public GroupMember Create(GroupMember newGroupMember) + { + using (var context = new VolunteerSiteDbContext()) + { + context.GroupMembers.Add(newGroupMember); + context.SaveChanges(); + + return newGroupMember; + } + } + + public bool DeleteById(int groupMemberId) + { + using (var context = new VolunteerSiteDbContext()) + { + var groupMemberToBeDeleted = GetById(groupMemberId); + context.Remove(groupMemberToBeDeleted); + context.SaveChanges(); + + if (GetById(groupMemberId) == null) + { + return true; + } + + return false; + } + } + + public ICollection GetByGroupId(string volunteerGroupId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.GroupMembers.Where(m => m.VolunteerGroupId == volunteerGroupId).ToList(); + } + } + + public GroupMember GetById(int groupMemberId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.GroupMembers.Single(m => m.Id == groupMemberId); + } + } + + public GroupMember Update(GroupMember updatedGroupMember) + { + using (var context = new VolunteerSiteDbContext()) + { + var existingGroupMember = GetById(updatedGroupMember.Id); + context.Entry(existingGroupMember).CurrentValues.SetValues(updatedGroupMember); + context.SaveChanges(); + + return existingGroupMember; + } + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs new file mode 100644 index 0000000..ddacb98 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Context; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.EFCore +{ + class EFCoreJobListingRepository : IJobListingRepository + { + public JobListing Create(JobListing newJobListing) + { + using (var context = new VolunteerSiteDbContext()) + { + context.JobListings.Add(newJobListing); + context.SaveChanges(); + + return newJobListing; + } + } + + public bool DeleteById(int jobListingId) + { + using (var context = new VolunteerSiteDbContext()) + { + var jobListingToBeDeleted = GetById(jobListingId); + context.Remove(jobListingToBeDeleted); + context.SaveChanges(); + + if (GetById(jobListingId) == null) + { + return true; + } + + return false; + } + } + + public JobListing GetById(int jobListingId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.JobListings.Single(j => j.Id == jobListingId); + } + } + + public ICollection GetByOrganizationId(string organizationId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.JobListings.Where(j => j.OrganizationId == organizationId).ToList(); + } + } + + public ICollection GetByTypeOfJob(string typeOfJob) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.JobListings.Where(m => m.TypeOfJob == typeOfJob).ToList(); + } + } + + public JobListing Update(JobListing updatedJobListing) + { + using (var context = new VolunteerSiteDbContext()) + { + var existingJobListing = GetById(updatedJobListing.Id); + context.Entry(existingJobListing).CurrentValues.SetValues(updatedJobListing); + context.SaveChanges(); + + return existingJobListing; + } + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs new file mode 100644 index 0000000..ba42ce0 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Context; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.EFCore +{ + class EFCoreOrganizationRepository : IOrganizationRepository + { + public Organization Create(Organization newOrganization) + { + using (var context = new VolunteerSiteDbContext()) + { + context.Organizations.Add(newOrganization); + context.SaveChanges(); + + return newOrganization; + } + } + + public bool DeleteById(int organizationId) + { + using (var context = new VolunteerSiteDbContext()) + { + var organizationToBeDeleted = GetById(organizationId); + context.Remove(organizationToBeDeleted); + context.SaveChanges(); + + if (GetById(organizationId) == null) + { + return true; + } + + return false; + } + } + + public Organization GetById(int organizationId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.Organizations.Single(o => o.Id == organizationId); + } + } + + public Organization Update(Organization updatedOrganization) + { + using (var context = new VolunteerSiteDbContext()) + { + var existingOrganization = GetById(updatedOrganization.Id); + context.Entry(existingOrganization).CurrentValues.SetValues(updatedOrganization); + context.SaveChanges(); + + return existingOrganization; + } + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs new file mode 100644 index 0000000..fdc09b6 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Context; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.EFCore +{ + class EFCoreVolunteer : IVolunteerRepository + { + public Volunteer Create(Volunteer newVolunteer) + { + using (var context = new VolunteerSiteDbContext()) + { + context.Volunteers.Add(newVolunteer); + context.SaveChanges(); + + return newVolunteer; + } + } + + public bool DeleteById(int volunteerId) + { + using (var context = new VolunteerSiteDbContext()) + { + var volunteerToBeDeleted = GetById(volunteerId); + context.Remove(volunteerToBeDeleted); + context.SaveChanges(); + + if (GetById(volunteerId) == null) + { + return true; + } + + return false; + } + } + + public Volunteer GetById(int volunteerId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.Volunteers.Single(v => v.Id == volunteerId); + } + } + + public Volunteer Update(Volunteer updatedVolunteer) + { + using (var context = new VolunteerSiteDbContext()) + { + var existingVolunteer = GetById(updatedVolunteer.Id); + context.Entry(existingVolunteer).CurrentValues.SetValues(updatedVolunteer); + context.SaveChanges(); + + return existingVolunteer; + } + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs new file mode 100644 index 0000000..1507b0e --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Context; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.EFCore +{ + class EFCoreVolunteerGroup : IVolunteerGroupRepository + { + public VolunteerGroup Create(VolunteerGroup newVolunteerGroup) + { + using (var context = new VolunteerSiteDbContext()) + { + context.VolunteerGroups.Add(newVolunteerGroup); + context.SaveChanges(); + + return newVolunteerGroup; + } + } + + public bool DeleteById(int volunteerGroupId) + { + using (var context = new VolunteerSiteDbContext()) + { + var volunteerGroupToBeDeleted = GetById(volunteerGroupId); + context.Remove(volunteerGroupToBeDeleted); + context.SaveChanges(); + + if (GetById(volunteerGroupId) == null) + { + return true; + } + + return false; + } + } + + public VolunteerGroup GetById(int volunteerGroupId) + { + using (var context = new VolunteerSiteDbContext()) + { + return context.VolunteerGroups.Single(v => v.Id == volunteerGroupId); + } + } + + public VolunteerGroup Update(VolunteerGroup updatedVolunteerGroup) + { + using (var context = new VolunteerSiteDbContext()) + { + var existingVolunteerGroup = GetById(updatedVolunteerGroup.Id); + context.Entry(existingVolunteerGroup).CurrentValues.SetValues(updatedVolunteerGroup); + context.SaveChanges(); + + return existingVolunteerGroup; + } + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs new file mode 100644 index 0000000..c35f9c5 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.Mock +{ + class MockGroupMemberRepository : IGroupMemberRepository + { + private List GroupMembers = new List() + { + + }; + + public GroupMember GetById(int groupMemberId) + { + return GroupMembers.Single(g => g.Id == groupMemberId); + } + + public GroupMember Create(GroupMember newHome) + { + newHome.Id = GroupMembers.OrderByDescending(g => g.Id).Single().Id + 1; + GroupMembers.Add(newHome); + + return newHome; + } + + public GroupMember Update(GroupMember updatedGroupMember) + { + DeleteById(updatedGroupMember.Id); // delete the existing home + GroupMembers.Add(updatedGroupMember); + + return updatedGroupMember; + } + + public bool DeleteById(int groupMemberId) + { + var GroupMember = GetById(groupMemberId); + GroupMembers.Remove(GroupMember); + return true; + } + + public ICollection GetByGroupId(int groupId) + { + throw new NotImplementedException(); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockJobListingRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockJobListingRepository.cs new file mode 100644 index 0000000..6aef28a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockJobListingRepository.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.Mock +{ + class MockJobListingRepository : IJobListingRepository + { + private List JobListings = new List() + { + + }; + + public JobListing GetById(int jobListingId) + { + return JobListings.Single(j => j.Id == jobListingId); + } + + public ICollection GetByOrganizationId(string organizationId) + { + return JobListings.FindAll(j => j.OrganizationId == organizationId); + } + + public ICollection GetByTypeOfJob(string typeOfJob) + { + return JobListings.FindAll(j => j.TypeOfJob == typeOfJob); + } + + public JobListing Create(JobListing newJobListing) + { + newJobListing.Id = JobListings.OrderByDescending(j => j.Id).Single().Id + 1; + JobListings.Add(newJobListing); + + return newJobListing; + } + + public JobListing Update(JobListing updatedJobListing) + { + DeleteById(updatedJobListing.Id); // delete the existing home + JobListings.Add(updatedJobListing); + + return updatedJobListing; + } + + public bool DeleteById(int jobListingId) + { + var JobListing = GetById(jobListingId); + JobListings.Remove(JobListing); + return true; + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockOrganizationRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockOrganizationRepository.cs new file mode 100644 index 0000000..7f1740c --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockOrganizationRepository.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.Mock +{ + class MockOrganizationRepository : IOrganizationRepository + { + private List Organizations = new List() + { + + }; + + public Organization Create(Organization newOrganization) + { + newOrganization.Id = Organizations.OrderByDescending(h => h.Id).Single().Id + 1; + Organizations.Add(newOrganization); + + return newOrganization; + } + + public bool DeleteById(int organizationId) + { + var organization = GetById(organizationId); + Organizations.Remove(organization); + return true; + } + + public Organization GetById(int organizationId) + { + return Organizations.Single(h => h.Id == organizationId); + } + + public Organization Update(Organization updatedOrganization) + { + DeleteById(updatedOrganization.Id); + Organizations.Add(updatedOrganization); + + return updatedOrganization; + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerGroupRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerGroupRepository.cs new file mode 100644 index 0000000..1e7b624 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerGroupRepository.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.Mock +{ + public class MockVolunteerGroupRepository : IVolunteerGroupRepository + { + private List VolunteerGroups = new List() + { + + }; + + public VolunteerGroup Create(VolunteerGroup newVolunteerGroup) + { + newVolunteerGroup.Id = VolunteerGroups.OrderByDescending(v => v.Id).Single().Id + 1; + VolunteerGroups.Add(newVolunteerGroup); + + return newVolunteerGroup; + } + + public bool DeleteById(int volunteerGroupId) + { + var home = GetById(volunteerGroupId); + VolunteerGroups.Remove(home); + return true; + } + + public VolunteerGroup GetById(int volunteerGroupId) + { + return VolunteerGroups.Single(v => v.Id == volunteerGroupId); + } + + public VolunteerGroup Update(VolunteerGroup updatedVolunteerGroup) + { + DeleteById(updatedVolunteerGroup.Id); + VolunteerGroups.Add(updatedVolunteerGroup); + + return updatedVolunteerGroup; + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerRepository.cs new file mode 100644 index 0000000..1e893cf --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockVolunteerRepository.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; + +namespace VolunteerSite.Data.Implementation.Mock +{ + class MockVolunteerRepository : IVolunteerRepository + { + private List Volunteers = new List() + { + + }; + + public Volunteer Create(Volunteer newVolunteer) + { + newVolunteer.Id = Volunteers.OrderByDescending(h => h.Id).Single().Id + 1; + Volunteers.Add(newVolunteer); + + return newVolunteer; + } + + public bool DeleteById(int volunteerId) + { + var home = GetById(volunteerId); + Volunteers.Remove(home); + return true; + } + + public Volunteer GetById(int volunteerId) + { + return Volunteers.Single(h => h.Id == volunteerId); + } + + public Volunteer Update(Volunteer updatedVolunteer) + { + DeleteById(updatedVolunteer.Id); + Volunteers.Add(updatedVolunteer); + + return updatedVolunteer; + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs index 8a126a6..a5b239e 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IGroupMemberRepository.cs @@ -9,7 +9,7 @@ public interface IGroupMemberRepository { //read GroupMember GetById(int groupMemberId); - ICollection GetByGroupId(int groupId); + ICollection GetByGroupId(string volunteerGroupId); //create GroupMember Create(GroupMember newGroupMember); From 770d216726ab823e12a65f266c370303f350212b Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Tue, 2 Apr 2019 18:31:39 -0500 Subject: [PATCH 4/6] Created IJoblistingService. Need to finish services --- VolunterSite.WebUI/Cozy.Service/Class1.cs | 8 +++ .../Cozy.Service/Cozy.Service.csproj | 7 +++ .../Mock/MockGroupMemberRepository.cs | 6 +- .../IJobListingRepository - Copy.cs | 2 +- .../Services/IJobListingService.cs | 60 +++++++++++++++++++ .../VolunteerSite.Service.csproj | 12 ++++ VolunterSite.WebUI/VolunterSite.WebUI.sln | 10 +++- 7 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 VolunterSite.WebUI/Cozy.Service/Class1.cs create mode 100644 VolunterSite.WebUI/Cozy.Service/Cozy.Service.csproj create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/Services/IJobListingService.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/VolunteerSite.Service.csproj diff --git a/VolunterSite.WebUI/Cozy.Service/Class1.cs b/VolunterSite.WebUI/Cozy.Service/Class1.cs new file mode 100644 index 0000000..e2f4757 --- /dev/null +++ b/VolunterSite.WebUI/Cozy.Service/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace Cozy.Service +{ + public class Class1 + { + } +} diff --git a/VolunterSite.WebUI/Cozy.Service/Cozy.Service.csproj b/VolunterSite.WebUI/Cozy.Service/Cozy.Service.csproj new file mode 100644 index 0000000..c16c6d5 --- /dev/null +++ b/VolunterSite.WebUI/Cozy.Service/Cozy.Service.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.2 + + + diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs index c35f9c5..a88335c 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/Mock/MockGroupMemberRepository.cs @@ -7,7 +7,7 @@ namespace VolunteerSite.Data.Implementation.Mock { - class MockGroupMemberRepository : IGroupMemberRepository + public class MockGroupMemberRepository : IGroupMemberRepository { private List GroupMembers = new List() { @@ -42,9 +42,9 @@ public bool DeleteById(int groupMemberId) return true; } - public ICollection GetByGroupId(int groupId) + public ICollection GetByGroupId(string volunteerGroupId) { - throw new NotImplementedException(); + return GroupMembers.FindAll(m => m.VolunteerGroupId == volunteerGroupId); } } } diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs index 07c931a..9e219ef 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IJobListingRepository - Copy.cs @@ -5,7 +5,7 @@ namespace VolunteerSite.Data.Interfaces { - interface IJobListingRepository + public interface IJobListingRepository { //Read JobListing GetById(int jobListingId); diff --git a/VolunterSite.WebUI/VolunteerSite.Service/Services/IJobListingService.cs b/VolunterSite.WebUI/VolunteerSite.Service/Services/IJobListingService.cs new file mode 100644 index 0000000..0aa53cf --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/Services/IJobListingService.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; +using VolunteerSite.Data.Interfaces; + + +namespace VolunteerSite.Service.Services +{ + public interface IJobListingService + { + JobListing GetById(int jobListingId); + ICollection GetByOrganizationId(string organizationId); + ICollection GetByTypeOfJob(string typeOfJob); + JobListing Create(JobListing newJobListing); + JobListing Update(JobListing updatedJobListing); + bool DeleteById(int jobListingId); + } + + public class JobListingService : IJobListingService + { + private readonly IJobListingRepository _jobListingRepository; + + public JobListingService(IJobListingRepository jobListingRepository) + { + _jobListingRepository = jobListingRepository; + } + + public JobListing Create(JobListing newJobListing) + { + return _jobListingRepository.Create(newJobListing); + } + + public bool DeleteById(int jobListingId) + { + return _jobListingRepository.DeleteById(jobListingId); + } + + public JobListing GetById(int jobListingId) + { + return _jobListingRepository.GetById(jobListingId); + } + + public ICollection GetByOrganizationId(string organizationId) + { + return _jobListingRepository.GetByOrganizationId(organizationId); + } + + public ICollection GetByTypeOfJob(string typeOfJob) + { + return _jobListingRepository.GetByTypeOfJob(typeOfJob); + } + + public JobListing Update(JobListing updatedJobListing) + { + return _jobListingRepository.Update(updatedJobListing); + } + } +} + diff --git a/VolunterSite.WebUI/VolunteerSite.Service/VolunteerSite.Service.csproj b/VolunterSite.WebUI/VolunteerSite.Service/VolunteerSite.Service.csproj new file mode 100644 index 0000000..c829ea4 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/VolunteerSite.Service.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp2.2 + + + + + + + + diff --git a/VolunterSite.WebUI/VolunterSite.WebUI.sln b/VolunterSite.WebUI/VolunterSite.WebUI.sln index baab1c3..58dae2d 100644 --- a/VolunterSite.WebUI/VolunterSite.WebUI.sln +++ b/VolunterSite.WebUI/VolunterSite.WebUI.sln @@ -5,9 +5,11 @@ VisualStudioVersion = 15.0.28307.271 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VolunteerSite.Domain", "VolunteerSite.Domain\VolunteerSite.Domain.csproj", "{2A3E4DBA-D5C8-4DA4-90F4-B360DF1056CC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VolunteerSite.Data", "VolunteerSite.Data\VolunteerSite.Data.csproj", "{00FA4408-CCC8-40A2-9DBD-328DD023DCF6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VolunteerSite.Data", "VolunteerSite.Data\VolunteerSite.Data.csproj", "{00FA4408-CCC8-40A2-9DBD-328DD023DCF6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VolunteerSite.WebUI", "VolunteerSite.WebUI\VolunteerSite.WebUI.csproj", "{EDB8DF3C-02C9-4BBB-B71C-F99302C99583}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VolunteerSite.WebUI", "VolunteerSite.WebUI\VolunteerSite.WebUI.csproj", "{EDB8DF3C-02C9-4BBB-B71C-F99302C99583}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VolunteerSite.Service", "VolunteerSite.Service\VolunteerSite.Service.csproj", "{50AEEEF3-1ED5-433A-BD1D-A641F34A5E17}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +29,10 @@ Global {EDB8DF3C-02C9-4BBB-B71C-F99302C99583}.Debug|Any CPU.Build.0 = Debug|Any CPU {EDB8DF3C-02C9-4BBB-B71C-F99302C99583}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDB8DF3C-02C9-4BBB-B71C-F99302C99583}.Release|Any CPU.Build.0 = Release|Any CPU + {50AEEEF3-1ED5-433A-BD1D-A641F34A5E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50AEEEF3-1ED5-433A-BD1D-A641F34A5E17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50AEEEF3-1ED5-433A-BD1D-A641F34A5E17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50AEEEF3-1ED5-433A-BD1D-A641F34A5E17}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From fa2735f62740dd0414213190b2cf1e8d405b40af Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Thu, 4 Apr 2019 00:22:06 -0500 Subject: [PATCH 5/6] Finished Services and Dependency Injection --- .../EFCore/EFCoreGroupMemberRepository.cs | 2 +- .../EFCore/EFCoreJobListingRepository.cs | 2 +- .../EFCore/EFCoreOrganizationRepository.cs | 2 +- ...p.cs => EFCoreVolunteerGroupRepository.cs} | 2 +- ...unteer.cs => EFCoreVolunteerRepository.cs} | 2 +- .../Interfaces/IOrganizationRepository.cs | 2 +- .../Interfaces/IVolunteerGroupRepository.cs | 2 +- .../Interfaces/IVolunteerRepository.cs | 2 +- .../VolunteerSiteDbContextModelSnapshot.cs | 2 +- .../Services/IGroupMemberService.cs | 51 +++++++++++++++++++ .../Services/IOrganizationSevice.cs | 46 +++++++++++++++++ .../Services/IVolunteerGroupService.cs | 44 ++++++++++++++++ .../Services/IVolunteerService.cs | 44 ++++++++++++++++ .../VolunteerSite.WebUI/Startup.cs | 15 ++++++ .../VolunteerSite.WebUI.csproj | 1 + 15 files changed, 210 insertions(+), 9 deletions(-) rename VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/{EFCoreVolunteerGroup.cs => EFCoreVolunteerGroupRepository.cs} (95%) rename VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/{EFCoreVolunteer.cs => EFCoreVolunteerRepository.cs} (96%) create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/Services/IGroupMemberService.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/Services/IOrganizationSevice.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerGroupService.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerService.cs diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs index a46ae92..2f584d6 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreGroupMemberRepository.cs @@ -8,7 +8,7 @@ namespace VolunteerSite.Data.Implementation.EFCore { - class EFCoreGroupMemberRepository : IGroupMemberRepository + public class EFCoreGroupMemberRepository : IGroupMemberRepository { public GroupMember Create(GroupMember newGroupMember) { diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs index ddacb98..f0070cb 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreJobListingRepository.cs @@ -8,7 +8,7 @@ namespace VolunteerSite.Data.Implementation.EFCore { - class EFCoreJobListingRepository : IJobListingRepository + public class EFCoreJobListingRepository : IJobListingRepository { public JobListing Create(JobListing newJobListing) { diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs index ba42ce0..754def0 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreOrganizationRepository.cs @@ -8,7 +8,7 @@ namespace VolunteerSite.Data.Implementation.EFCore { - class EFCoreOrganizationRepository : IOrganizationRepository + public class EFCoreOrganizationRepository : IOrganizationRepository { public Organization Create(Organization newOrganization) { diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroupRepository.cs similarity index 95% rename from VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs rename to VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroupRepository.cs index 1507b0e..36686f2 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroup.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerGroupRepository.cs @@ -8,7 +8,7 @@ namespace VolunteerSite.Data.Implementation.EFCore { - class EFCoreVolunteerGroup : IVolunteerGroupRepository + public class EFCoreVolunteerGroupRepository : IVolunteerGroupRepository { public VolunteerGroup Create(VolunteerGroup newVolunteerGroup) { diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs similarity index 96% rename from VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs rename to VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs index fdc09b6..f0a7c0e 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteer.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs @@ -8,7 +8,7 @@ namespace VolunteerSite.Data.Implementation.EFCore { - class EFCoreVolunteer : IVolunteerRepository + public class EFCoreVolunteerRepository : IVolunteerRepository { public Volunteer Create(Volunteer newVolunteer) { diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs index 7c9f91a..f72de84 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IOrganizationRepository.cs @@ -5,7 +5,7 @@ namespace VolunteerSite.Data.Interfaces { - interface IOrganizationRepository + public interface IOrganizationRepository { //Read Organization GetById(int organizationId); diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs index 7b4484d..c8204a4 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerGroupRepository.cs @@ -5,7 +5,7 @@ namespace VolunteerSite.Data.Interfaces { - interface IVolunteerGroupRepository + public interface IVolunteerGroupRepository { //Read VolunteerGroup GetById(int volunteerGroupId); diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs index f9f759f..786de15 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Interfaces/IVolunteerRepository.cs @@ -5,7 +5,7 @@ namespace VolunteerSite.Data.Interfaces { - interface IVolunteerRepository + public interface IVolunteerRepository { //Read Volunteer GetById(int volunteerId); diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs index 504fb09..4bc9eeb 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); diff --git a/VolunterSite.WebUI/VolunteerSite.Service/Services/IGroupMemberService.cs b/VolunterSite.WebUI/VolunteerSite.Service/Services/IGroupMemberService.cs new file mode 100644 index 0000000..2925893 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/Services/IGroupMemberService.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; +using VolunteerSite.Data.Interfaces; + +namespace VolunteerSite.Service.Services +{ + public interface IGroupMemberService + { + GroupMember GetById(int groupMemberId); + ICollection GetByGroupId(string volunteerGroupId); + GroupMember Create(GroupMember newGroupMember); + GroupMember Update(GroupMember UpdatedGroupMember); + bool DeleteById(int groupMemberId); + } + public class GroupMemberService : IGroupMemberService + { + private readonly IGroupMemberRepository _groupMemberRepository; + + public GroupMemberService(IGroupMemberRepository groupMemberRepository) + { + _groupMemberRepository = groupMemberRepository; + } + + public GroupMember Create(GroupMember newGroupMember) + { + return _groupMemberRepository.Create(newGroupMember); + } + + public bool DeleteById(int groupMemberId) + { + return _groupMemberRepository.DeleteById(groupMemberId); + } + + public ICollection GetByGroupId(string volunteerGroupId) + { + return _groupMemberRepository.GetByGroupId(volunteerGroupId); + } + + public GroupMember GetById(int groupMemberId) + { + return _groupMemberRepository.GetById(groupMemberId); + } + + public GroupMember Update(GroupMember UpdatedGroupMember) + { + return _groupMemberRepository.Update(UpdatedGroupMember); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Service/Services/IOrganizationSevice.cs b/VolunterSite.WebUI/VolunteerSite.Service/Services/IOrganizationSevice.cs new file mode 100644 index 0000000..412f3d2 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/Services/IOrganizationSevice.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; +using VolunteerSite.Data.Interfaces; + +namespace VolunteerSite.Service.Services +{ + public interface IOrganizationService + { + Organization GetById(int organizationId); + Organization Create(Organization newOrganization); + Organization Update(Organization updatedOrganization); + bool DeleteById(int organizationId); + } + + public class OrganizationService : IOrganizationService + { + private readonly IOrganizationRepository _organizationRepository; + + public OrganizationService(IOrganizationRepository organizationRepository) + { + _organizationRepository = organizationRepository; + } + + public Organization Create(Organization newOrganization) + { + return _organizationRepository.Create(newOrganization); + } + + public bool DeleteById(int organizationId) + { + return _organizationRepository.DeleteById(organizationId); + } + + public Organization GetById(int organizationId) + { + return _organizationRepository.GetById(organizationId); + } + + public Organization Update(Organization updatedOrganization) + { + return _organizationRepository.Update(updatedOrganization); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerGroupService.cs b/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerGroupService.cs new file mode 100644 index 0000000..0dfda2a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerGroupService.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; +using VolunteerSite.Data.Interfaces; + +namespace VolunteerSite.Service.Services +{ + public interface IVolunteerGroupService + { + VolunteerGroup GetById(int volunteerGroupId); + VolunteerGroup Create(VolunteerGroup newVolunteerGroup); + VolunteerGroup Update(VolunteerGroup updatedVolunteerGroup); + bool DeleteById(int volunteerGroupId); + } + public class VolunteerGroupService : IVolunteerGroupService + { + private readonly IVolunteerGroupRepository _volunteerGroupRepository; + + public VolunteerGroupService(IVolunteerGroupRepository volunteerGroupRepository) + { + _volunteerGroupRepository = volunteerGroupRepository; + } + public VolunteerGroup Create(VolunteerGroup newVolunteerGroup) + { + return _volunteerGroupRepository.Create(newVolunteerGroup); + } + + public bool DeleteById(int volunteerGroupId) + { + return _volunteerGroupRepository.DeleteById(volunteerGroupId); + } + + public VolunteerGroup GetById(int volunteerGroupId) + { + return _volunteerGroupRepository.GetById(volunteerGroupId); + } + + public VolunteerGroup Update(VolunteerGroup updatedVolunteerGroup) + { + return _volunteerGroupRepository.Update(updatedVolunteerGroup); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerService.cs b/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerService.cs new file mode 100644 index 0000000..01f350a --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Service/Services/IVolunteerService.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VolunteerSite.Domain.Models; +using VolunteerSite.Data.Interfaces; + +namespace VolunteerSite.Service.Services +{ + public interface IVolunteerService + { + Volunteer GetById(int volunteerId); + Volunteer Create(Volunteer newVolunteer); + Volunteer Update(Volunteer updatedVolunteer); + bool DeleteById(int volunteerId); + } + public class VolunteerService : IVolunteerService + { + private readonly IVolunteerRepository _volunteerRepository; + + public VolunteerService(IVolunteerRepository volunteerRepository) + { + _volunteerRepository = volunteerRepository; + } + public Volunteer Create(Volunteer newVolunteer) + { + return _volunteerRepository.Create(newVolunteer); + } + + public bool DeleteById(int volunteerId) + { + return _volunteerRepository.DeleteById(volunteerId); + } + + public Volunteer GetById(int volunteerId) + { + return _volunteerRepository.GetById(volunteerId); + } + + public Volunteer Update(Volunteer updatedVolunteer) + { + return _volunteerRepository.Update(updatedVolunteer); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs index 17bcb6c..6f02844 100644 --- a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs @@ -11,6 +11,9 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using VolunteerSite.Data.Context; +using VolunteerSite.Data.Implementation.EFCore; +using VolunteerSite.Data.Interfaces; +using VolunteerSite.Service.Services; namespace VolunteerSite.WebUI { @@ -33,6 +36,18 @@ public void ConfigureServices(IServiceCollection services) options.MinimumSameSitePolicy = SameSiteMode.None; }); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj index cb9cfff..53fd234 100644 --- a/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj @@ -15,6 +15,7 @@ + From 4e58df3dd8f03f38a767aded84559063db055da4 Mon Sep 17 00:00:00 2001 From: Michael Rich Date: Thu, 11 Apr 2019 01:01:38 -0500 Subject: [PATCH 6/6] Added Identity --- .../Context/VolunteerSiteDbContext.cs | 24 +- .../EFCore/EFCoreVolunteerRepository.cs | 61 --- ...190410044449_identity-provider.Designer.cs | 399 ++++++++++++++++++ .../20190410044449_identity-provider.cs | 333 +++++++++++++++ ...90410054223_identity-provider2.Designer.cs | 370 ++++++++++++++++ .../20190410054223_identity-provider2.cs | 183 ++++++++ .../VolunteerSiteDbContextModelSnapshot.cs | 250 +++++++++-- .../VolunteerSite.Data.csproj | 1 + .../VolunteerSite.Domain/Models/AppUser.cs | 21 + .../Models/Organization.cs | 5 +- .../Models/VolunteerGroup.cs | 4 +- .../VolunteerSite.Domain.csproj | 1 + .../Controllers/VolunteerController.cs | 18 + .../VolunteerSite.WebUI/Startup.cs | 43 +- .../VolunteerSite.WebUI.csproj | 2 +- 15 files changed, 1614 insertions(+), 101 deletions(-) delete mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.Designer.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.Designer.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.Domain/Models/AppUser.cs create mode 100644 VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/VolunteerController.cs diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs index d213562..9e75087 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Context/VolunteerSiteDbContext.cs @@ -3,12 +3,15 @@ using System; using System.Collections.Generic; using System.Text; +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; namespace VolunteerSite.Data.Context { - public class VolunteerSiteDbContext : DbContext + public class VolunteerSiteDbContext : IdentityDbContext { - public DbSet Volunteers { get; set; } + //public DbSet Volunteers { get; set; } + + public DbSet VolunteerGroups { get; set; } public DbSet Organizations { get; set; } public DbSet JobListings { get; set; } @@ -20,5 +23,22 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder) // bad way of providing the connection string optionBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=volunteersite;Trusted_Connection=True"); } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity() + .HasOne(g => g.GroupAdmin) + .WithMany(u => u.VolunteerGroups) + .HasForeignKey(g => g.GroupAdminId) + .HasConstraintName("ForeignKey_VolunteerGroup_AppUser"); + + modelBuilder.Entity() + .HasOne(o => o.OrganizationAdmin) + .WithMany(u => u.Organizations) + .HasForeignKey(o => o.OrganizationAdminId) + .HasConstraintName("ForeignKey_Organization_AppUser"); + } } } diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs b/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs deleted file mode 100644 index f0a7c0e..0000000 --- a/VolunterSite.WebUI/VolunteerSite.Data/Implementation/EFCore/EFCoreVolunteerRepository.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using VolunteerSite.Data.Context; -using VolunteerSite.Data.Interfaces; -using VolunteerSite.Domain.Models; - -namespace VolunteerSite.Data.Implementation.EFCore -{ - public class EFCoreVolunteerRepository : IVolunteerRepository - { - public Volunteer Create(Volunteer newVolunteer) - { - using (var context = new VolunteerSiteDbContext()) - { - context.Volunteers.Add(newVolunteer); - context.SaveChanges(); - - return newVolunteer; - } - } - - public bool DeleteById(int volunteerId) - { - using (var context = new VolunteerSiteDbContext()) - { - var volunteerToBeDeleted = GetById(volunteerId); - context.Remove(volunteerToBeDeleted); - context.SaveChanges(); - - if (GetById(volunteerId) == null) - { - return true; - } - - return false; - } - } - - public Volunteer GetById(int volunteerId) - { - using (var context = new VolunteerSiteDbContext()) - { - return context.Volunteers.Single(v => v.Id == volunteerId); - } - } - - public Volunteer Update(Volunteer updatedVolunteer) - { - using (var context = new VolunteerSiteDbContext()) - { - var existingVolunteer = GetById(updatedVolunteer.Id); - context.Entry(existingVolunteer).CurrentValues.SetValues(updatedVolunteer); - context.SaveChanges(); - - return existingVolunteer; - } - } - } -} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.Designer.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.Designer.cs new file mode 100644 index 0000000..047adc0 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.Designer.cs @@ -0,0 +1,399 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VolunteerSite.Data.Context; + +namespace VolunteerSite.Data.Migrations +{ + [DbContext(typeof(VolunteerSiteDbContext))] + [Migration("20190410044449_identity-provider")] + partial class identityprovider + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider"); + + b.Property("ProviderKey"); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider"); + + b.Property("Name"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("SkillsAndExperience"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("TotalHours"); + + b.Property("VolunteerGroupId"); + + b.Property("VolunteerGroupId1"); + + b.HasKey("Id"); + + b.HasIndex("VolunteerGroupId1"); + + b.ToTable("GroupMembers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("Date"); + + b.Property("Description"); + + b.Property("OrganizationId"); + + b.Property("OrganizationId1"); + + b.Property("PositionsAvailable"); + + b.Property("State"); + + b.Property("TypeOfJob"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId1"); + + b.ToTable("JobListings"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("AppUserId"); + + b.Property("City"); + + b.Property("CompanyName"); + + b.Property("Email"); + + b.Property("PhoneNumber"); + + b.Property("State"); + + b.HasKey("Id"); + + b.HasIndex("AppUserId"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Volunteer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("SkillsAndExperience"); + + b.HasKey("Id"); + + b.ToTable("Volunteer"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("AppUserId"); + + b.Property("GroupName"); + + b.Property("GroupOwnerId"); + + b.Property("GroupOwnerId1"); + + b.HasKey("Id"); + + b.HasIndex("AppUserId"); + + b.HasIndex("GroupOwnerId1"); + + b.ToTable("VolunteerGroups"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.HasOne("VolunteerSite.Domain.Models.VolunteerGroup", "VolunteerGroup") + .WithMany("GroupMembers") + .HasForeignKey("VolunteerGroupId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.HasOne("VolunteerSite.Domain.Models.Organization", "Organization") + .WithMany("JobListings") + .HasForeignKey("OrganizationId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany("Organizations") + .HasForeignKey("AppUserId"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany("VolunteerGroups") + .HasForeignKey("AppUserId"); + + b.HasOne("VolunteerSite.Domain.Models.Volunteer", "GroupOwner") + .WithMany("VolunteerGroups") + .HasForeignKey("GroupOwnerId1"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.cs new file mode 100644 index 0000000..6caccc8 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410044449_identity-provider.cs @@ -0,0 +1,333 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VolunteerSite.Data.Migrations +{ + public partial class identityprovider : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_VolunteerGroups_Volunteers_GroupOwnerId1", + table: "VolunteerGroups"); + + migrationBuilder.DropPrimaryKey( + name: "PK_Volunteers", + table: "Volunteers"); + + migrationBuilder.RenameTable( + name: "Volunteers", + newName: "Volunteer"); + + migrationBuilder.AddColumn( + name: "AppUserId", + table: "VolunteerGroups", + nullable: true); + + migrationBuilder.AddColumn( + name: "AppUserId", + table: "Organizations", + nullable: true); + + migrationBuilder.AddPrimaryKey( + name: "PK_Volunteer", + table: "Volunteer", + column: "Id"); + + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 256, nullable: true), + NormalizedName = table.Column(maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column(nullable: false), + UserName = table.Column(maxLength: 256, nullable: true), + NormalizedUserName = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: true), + NormalizedEmail = table.Column(maxLength: 256, nullable: true), + EmailConfirmed = table.Column(nullable: false), + PasswordHash = table.Column(nullable: true), + SecurityStamp = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false), + TwoFactorEnabled = table.Column(nullable: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false), + AccessFailedCount = table.Column(nullable: false), + FirstName = table.Column(nullable: true), + LastName = table.Column(nullable: true), + SkillsAndExperience = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + RoleId = table.Column(nullable: false), + ClaimType = table.Column(nullable: true), + ClaimValue = table.Column(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(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + ClaimType = table.Column(nullable: true), + ClaimValue = table.Column(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(nullable: false), + ProviderKey = table.Column(nullable: false), + ProviderDisplayName = table.Column(nullable: true), + UserId = table.Column(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(nullable: false), + RoleId = table.Column(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(nullable: false), + LoginProvider = table.Column(nullable: false), + Name = table.Column(nullable: false), + Value = table.Column(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_VolunteerGroups_AppUserId", + table: "VolunteerGroups", + column: "AppUserId"); + + migrationBuilder.CreateIndex( + name: "IX_Organizations_AppUserId", + table: "Organizations", + column: "AppUserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetRoleClaims_RoleId", + table: "AspNetRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "AspNetRoles", + column: "NormalizedName", + unique: true, + filter: "[NormalizedName] IS NOT NULL"); + + 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, + filter: "[NormalizedUserName] IS NOT NULL"); + + migrationBuilder.AddForeignKey( + name: "FK_Organizations_AspNetUsers_AppUserId", + table: "Organizations", + column: "AppUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_VolunteerGroups_AspNetUsers_AppUserId", + table: "VolunteerGroups", + column: "AppUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_VolunteerGroups_Volunteer_GroupOwnerId1", + table: "VolunteerGroups", + column: "GroupOwnerId1", + principalTable: "Volunteer", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Organizations_AspNetUsers_AppUserId", + table: "Organizations"); + + migrationBuilder.DropForeignKey( + name: "FK_VolunteerGroups_AspNetUsers_AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropForeignKey( + name: "FK_VolunteerGroups_Volunteer_GroupOwnerId1", + table: "VolunteerGroups"); + + migrationBuilder.DropTable( + name: "AspNetRoleClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserLogins"); + + migrationBuilder.DropTable( + name: "AspNetUserRoles"); + + migrationBuilder.DropTable( + name: "AspNetUserTokens"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); + + migrationBuilder.DropTable( + name: "AspNetUsers"); + + migrationBuilder.DropIndex( + name: "IX_VolunteerGroups_AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropIndex( + name: "IX_Organizations_AppUserId", + table: "Organizations"); + + migrationBuilder.DropPrimaryKey( + name: "PK_Volunteer", + table: "Volunteer"); + + migrationBuilder.DropColumn( + name: "AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropColumn( + name: "AppUserId", + table: "Organizations"); + + migrationBuilder.RenameTable( + name: "Volunteer", + newName: "Volunteers"); + + migrationBuilder.AddPrimaryKey( + name: "PK_Volunteers", + table: "Volunteers", + column: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_VolunteerGroups_Volunteers_GroupOwnerId1", + table: "VolunteerGroups", + column: "GroupOwnerId1", + principalTable: "Volunteers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.Designer.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.Designer.cs new file mode 100644 index 0000000..7dde391 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.Designer.cs @@ -0,0 +1,370 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VolunteerSite.Data.Context; + +namespace VolunteerSite.Data.Migrations +{ + [DbContext(typeof(VolunteerSiteDbContext))] + [Migration("20190410054223_identity-provider2")] + partial class identityprovider2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider"); + + b.Property("ProviderKey"); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider"); + + b.Property("Name"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("SkillsAndExperience"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Email"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("PhoneNumber"); + + b.Property("TotalHours"); + + b.Property("VolunteerGroupId"); + + b.Property("VolunteerGroupId1"); + + b.HasKey("Id"); + + b.HasIndex("VolunteerGroupId1"); + + b.ToTable("GroupMembers"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("Date"); + + b.Property("Description"); + + b.Property("OrganizationId"); + + b.Property("OrganizationId1"); + + b.Property("PositionsAvailable"); + + b.Property("State"); + + b.Property("TypeOfJob"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId1"); + + b.ToTable("JobListings"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Address"); + + b.Property("City"); + + b.Property("CompanyName"); + + b.Property("Email"); + + b.Property("OrganizationAdminId"); + + b.Property("PhoneNumber"); + + b.Property("State"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationAdminId"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("GroupAdminId"); + + b.Property("GroupName"); + + b.HasKey("Id"); + + b.HasIndex("GroupAdminId"); + + b.ToTable("VolunteerGroups"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => + { + b.HasOne("VolunteerSite.Domain.Models.VolunteerGroup", "VolunteerGroup") + .WithMany("GroupMembers") + .HasForeignKey("VolunteerGroupId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.JobListing", b => + { + b.HasOne("VolunteerSite.Domain.Models.Organization", "Organization") + .WithMany("JobListings") + .HasForeignKey("OrganizationId1"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser", "OrganizationAdmin") + .WithMany("Organizations") + .HasForeignKey("OrganizationAdminId") + .HasConstraintName("ForeignKey_Organization_AppUser"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser", "GroupAdmin") + .WithMany("VolunteerGroups") + .HasForeignKey("GroupAdminId") + .HasConstraintName("ForeignKey_VolunteerGroup_AppUser"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.cs new file mode 100644 index 0000000..af20339 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/20190410054223_identity-provider2.cs @@ -0,0 +1,183 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VolunteerSite.Data.Migrations +{ + public partial class identityprovider2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Organizations_AspNetUsers_AppUserId", + table: "Organizations"); + + migrationBuilder.DropForeignKey( + name: "FK_VolunteerGroups_AspNetUsers_AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropForeignKey( + name: "FK_VolunteerGroups_Volunteer_GroupOwnerId1", + table: "VolunteerGroups"); + + migrationBuilder.DropTable( + name: "Volunteer"); + + migrationBuilder.DropIndex( + name: "IX_VolunteerGroups_AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropIndex( + name: "IX_VolunteerGroups_GroupOwnerId1", + table: "VolunteerGroups"); + + migrationBuilder.DropColumn( + name: "AppUserId", + table: "VolunteerGroups"); + + migrationBuilder.DropColumn( + name: "GroupOwnerId1", + table: "VolunteerGroups"); + + migrationBuilder.RenameColumn( + name: "GroupOwnerId", + table: "VolunteerGroups", + newName: "GroupAdminId"); + + migrationBuilder.RenameColumn( + name: "AppUserId", + table: "Organizations", + newName: "OrganizationAdminId"); + + migrationBuilder.RenameIndex( + name: "IX_Organizations_AppUserId", + table: "Organizations", + newName: "IX_Organizations_OrganizationAdminId"); + + migrationBuilder.AlterColumn( + name: "GroupAdminId", + table: "VolunteerGroups", + nullable: true, + oldClrType: typeof(string), + oldNullable: true); + + migrationBuilder.CreateIndex( + name: "IX_VolunteerGroups_GroupAdminId", + table: "VolunteerGroups", + column: "GroupAdminId"); + + migrationBuilder.AddForeignKey( + name: "ForeignKey_Organization_AppUser", + table: "Organizations", + column: "OrganizationAdminId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "ForeignKey_VolunteerGroup_AppUser", + table: "VolunteerGroups", + column: "GroupAdminId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "ForeignKey_Organization_AppUser", + table: "Organizations"); + + migrationBuilder.DropForeignKey( + name: "ForeignKey_VolunteerGroup_AppUser", + table: "VolunteerGroups"); + + migrationBuilder.DropIndex( + name: "IX_VolunteerGroups_GroupAdminId", + table: "VolunteerGroups"); + + migrationBuilder.RenameColumn( + name: "GroupAdminId", + table: "VolunteerGroups", + newName: "GroupOwnerId"); + + migrationBuilder.RenameColumn( + name: "OrganizationAdminId", + table: "Organizations", + newName: "AppUserId"); + + migrationBuilder.RenameIndex( + name: "IX_Organizations_OrganizationAdminId", + table: "Organizations", + newName: "IX_Organizations_AppUserId"); + + migrationBuilder.AlterColumn( + name: "GroupOwnerId", + table: "VolunteerGroups", + nullable: true, + oldClrType: typeof(string), + oldNullable: true); + + migrationBuilder.AddColumn( + name: "AppUserId", + table: "VolunteerGroups", + nullable: true); + + migrationBuilder.AddColumn( + name: "GroupOwnerId1", + table: "VolunteerGroups", + nullable: true); + + migrationBuilder.CreateTable( + name: "Volunteer", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + Email = table.Column(nullable: true), + FirstName = table.Column(nullable: true), + LastName = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + SkillsAndExperience = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Volunteer", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_VolunteerGroups_AppUserId", + table: "VolunteerGroups", + column: "AppUserId"); + + migrationBuilder.CreateIndex( + name: "IX_VolunteerGroups_GroupOwnerId1", + table: "VolunteerGroups", + column: "GroupOwnerId1"); + + migrationBuilder.AddForeignKey( + name: "FK_Organizations_AspNetUsers_AppUserId", + table: "Organizations", + column: "AppUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_VolunteerGroups_AspNetUsers_AppUserId", + table: "VolunteerGroups", + column: "AppUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_VolunteerGroups_Volunteer_GroupOwnerId1", + table: "VolunteerGroups", + column: "GroupOwnerId1", + principalTable: "Volunteer", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs index 4bc9eeb..0be7697 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs +++ b/VolunterSite.WebUI/VolunteerSite.Data/Migrations/VolunteerSiteDbContextModelSnapshot.cs @@ -19,6 +19,173 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider"); + + b.Property("ProviderKey"); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider"); + + b.Property("Name"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("VolunteerSite.Domain.Models.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("FirstName"); + + b.Property("LastName"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("SkillsAndExperience"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => { b.Property("Id") @@ -91,53 +258,79 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Email"); + b.Property("OrganizationAdminId"); + b.Property("PhoneNumber"); b.Property("State"); b.HasKey("Id"); + b.HasIndex("OrganizationAdminId"); + b.ToTable("Organizations"); }); - modelBuilder.Entity("VolunteerSite.Domain.Models.Volunteer", b => + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - b.Property("Email"); - - b.Property("FirstName"); - - b.Property("LastName"); - - b.Property("PhoneNumber"); + b.Property("GroupAdminId"); - b.Property("SkillsAndExperience"); + b.Property("GroupName"); b.HasKey("Id"); - b.ToTable("Volunteers"); + b.HasIndex("GroupAdminId"); + + b.ToTable("VolunteerGroups"); }); - modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("GroupName"); - - b.Property("GroupOwnerId"); + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); - b.Property("GroupOwnerId1"); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); - b.HasKey("Id"); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); - b.HasIndex("GroupOwnerId1"); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); - b.ToTable("VolunteerGroups"); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity("VolunteerSite.Domain.Models.GroupMember", b => @@ -154,11 +347,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasForeignKey("OrganizationId1"); }); + modelBuilder.Entity("VolunteerSite.Domain.Models.Organization", b => + { + b.HasOne("VolunteerSite.Domain.Models.AppUser", "OrganizationAdmin") + .WithMany("Organizations") + .HasForeignKey("OrganizationAdminId") + .HasConstraintName("ForeignKey_Organization_AppUser"); + }); + modelBuilder.Entity("VolunteerSite.Domain.Models.VolunteerGroup", b => { - b.HasOne("VolunteerSite.Domain.Models.Volunteer", "GroupOwner") + b.HasOne("VolunteerSite.Domain.Models.AppUser", "GroupAdmin") .WithMany("VolunteerGroups") - .HasForeignKey("GroupOwnerId1"); + .HasForeignKey("GroupAdminId") + .HasConstraintName("ForeignKey_VolunteerGroup_AppUser"); }); #pragma warning restore 612, 618 } diff --git a/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj b/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj index 48e0d90..b1b0004 100644 --- a/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj +++ b/VolunterSite.WebUI/VolunteerSite.Data/VolunteerSite.Data.csproj @@ -5,6 +5,7 @@ + diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/AppUser.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/AppUser.cs new file mode 100644 index 0000000..350820c --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/AppUser.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Identity; +using System; +using System.Collections.Generic; +using System.Text; + +namespace VolunteerSite.Domain.Models +{ + public class AppUser : IdentityUser + { + //All Users + public string FirstName { get; set; } + public string LastName { get; set; } + + //Volunteers + public string SkillsAndExperience { get; set; } + + //Navigation Properties + public ICollection Organizations { get; set; } //Organization Admin + public ICollection VolunteerGroups { get; set; } //Volunteer Group Admin + } +} diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs index 448779a..0d03cd4 100644 --- a/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/Organization.cs @@ -15,6 +15,9 @@ public class Organization public string Email { get; set; } public string PhoneNumber { get; set; } - public IEnumerable JobListings { get; set; } + public string OrganizationAdminId { get; set; } + public AppUser OrganizationAdmin { get; set; } + + public ICollection JobListings { get; set; } } } diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs b/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs index 7fddf02..9b29070 100644 --- a/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs +++ b/VolunterSite.WebUI/VolunteerSite.Domain/Models/VolunteerGroup.cs @@ -9,8 +9,8 @@ public class VolunteerGroup public int Id { get; set; } public string GroupName { get; set; } - public string GroupOwnerId { get; set; } - public Volunteer GroupOwner { get; set; } + public string GroupAdminId { get; set; } + public AppUser GroupAdmin { get; set; } public IEnumerable GroupMembers { get; set; } } diff --git a/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj b/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj index dbe0552..9c2c478 100644 --- a/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj +++ b/VolunterSite.WebUI/VolunteerSite.Domain/VolunteerSite.Domain.csproj @@ -11,6 +11,7 @@ all runtime; build; native; contentfiles; analyzers + diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/VolunteerController.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/VolunteerController.cs new file mode 100644 index 0000000..b221282 --- /dev/null +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Controllers/VolunteerController.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace VolunteerSite.WebUI.Controllers +{ + [Authorize] + public class VolunteerController : Controller + { + public IActionResult Index() + { + return View(); + } + } +} \ No newline at end of file diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs index 6f02844..d63c79d 100644 --- a/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/Startup.cs @@ -13,6 +13,7 @@ using VolunteerSite.Data.Context; using VolunteerSite.Data.Implementation.EFCore; using VolunteerSite.Data.Interfaces; +using VolunteerSite.Domain.Models; using VolunteerSite.Service.Services; namespace VolunteerSite.WebUI @@ -36,17 +37,15 @@ public void ConfigureServices(IServiceCollection services) options.MinimumSameSitePolicy = SameSiteMode.None; }); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + GetDependencyResolvedForEFCoreLayer(services); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + //GetDependencyResolvedForMockRepositoryLayer(services); + + GetDependencyResolvedForServiceLayer(services); + + services.AddDbContext(); + services.AddDefaultIdentity() + .AddEntityFrameworkStores(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } @@ -66,6 +65,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) app.UseHttpsRedirection(); app.UseStaticFiles(); + app.UseAuthentication(); app.UseCookiePolicy(); app.UseMvc(routes => @@ -75,5 +75,28 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) template: "{controller=Home}/{action=Index}/{id?}"); }); } + + private void GetDependencyResolvedForMockRepositoryLayer(IServiceCollection services) + { + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + } + private void GetDependencyResolvedForEFCoreLayer(IServiceCollection services) + { + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + } + + private void GetDependencyResolvedForServiceLayer(IServiceCollection services) + { + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + } } } diff --git a/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj index 53fd234..985ae8e 100644 --- a/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj +++ b/VolunterSite.WebUI/VolunteerSite.WebUI/VolunteerSite.WebUI.csproj @@ -9,7 +9,7 @@ - +