From 78605ec840b0c8e330bca44b6f3adb14c143b77f Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Sat, 16 Mar 2024 14:05:54 -0400 Subject: [PATCH 1/8] Started FuturCreator --- .../Interfaces/IApplicationDbContext.cs | 2 + .../Commands/CreateFuturCreator.cs | 43 +++++++++++++++++++ src/Domain/Entities/FuturCreator.cs | 9 ++++ .../Data/ApplicationDbContext.cs | 3 ++ 4 files changed, 57 insertions(+) create mode 100644 src/Application/FuturCreator/Commands/CreateFuturCreator.cs create mode 100644 src/Domain/Entities/FuturCreator.cs diff --git a/src/Application/Common/Interfaces/IApplicationDbContext.cs b/src/Application/Common/Interfaces/IApplicationDbContext.cs index 5b7e5d9..c393783 100644 --- a/src/Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/Application/Common/Interfaces/IApplicationDbContext.cs @@ -8,5 +8,7 @@ public interface IApplicationDbContext DbSet TodoItems { get; } + DbSet FuturCreator { get; } + Task SaveChangesAsync(CancellationToken cancellationToken); } diff --git a/src/Application/FuturCreator/Commands/CreateFuturCreator.cs b/src/Application/FuturCreator/Commands/CreateFuturCreator.cs new file mode 100644 index 0000000..82db619 --- /dev/null +++ b/src/Application/FuturCreator/Commands/CreateFuturCreator.cs @@ -0,0 +1,43 @@ +using Hutopy.Application.Common.Interfaces; + +namespace Hutopy.Application.TodoItems.Commands.CreateFuturCreator; + +public record CreateFuturCreatorCommand : IRequest +{ + public required string FirstName { get; init; } + public required string LastName { get; init; } + public required string EmailAddress { get; init; } + public required string PhoneNumber { get; init; } + public required string SocialNetworkAccount { get; init; } + public required string ReasonToJoin { get; init; } +} + +public class CreateFuturCreatorCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + + public CreateFuturCreatorCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(CreateFuturCreatorCommand request, CancellationToken cancellationToken) + { + var entity = new FuturCreator() + { + FirstName = request.FirstName, + LastName = request.LastName, + EmailAddress = request.EmailAddress, + PhoneNumber = request.PhoneNumber, + SocialNetworkAccount = request.SocialNetworkAccount, + ReasonToJoin = request.ReasonToJoin, + }; + + _context.FuturCreator.Add(entity); + + await _context.SaveChangesAsync(cancellationToken); + + return entity.Id; + } +} diff --git a/src/Domain/Entities/FuturCreator.cs b/src/Domain/Entities/FuturCreator.cs new file mode 100644 index 0000000..4b405a5 --- /dev/null +++ b/src/Domain/Entities/FuturCreator.cs @@ -0,0 +1,9 @@ +public class FuturCreator : BaseAuditableEntity +{ + public required string FirstName { get; set; } + public required string LastName { get; set; } + public required string EmailAddress { get; set; } + public required string PhoneNumber { get; set; } + public required string SocialNetworkAccount { get; set; } + public required string ReasonToJoin { get; set; } +} \ No newline at end of file diff --git a/src/Infrastructure/Data/ApplicationDbContext.cs b/src/Infrastructure/Data/ApplicationDbContext.cs index 721bf1b..0071352 100644 --- a/src/Infrastructure/Data/ApplicationDbContext.cs +++ b/src/Infrastructure/Data/ApplicationDbContext.cs @@ -2,6 +2,7 @@ using Hutopy.Application.Common.Interfaces; using Hutopy.Domain.Entities; using Hutopy.Infrastructure.Identity; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; @@ -15,6 +16,8 @@ public class ApplicationDbContext : IdentityDbContext, IApplica public DbSet TodoItems => Set(); + public DbSet FuturCreator => Set(); + protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); From 0f7cdb3abd153c09f83a3fc9a080351dd49a46e0 Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Sun, 17 Mar 2024 16:20:43 -0400 Subject: [PATCH 2/8] Fixed dotnet ef problem, Added a script to start the project and one for Ef --- Directory.Build.props | 1 - Directory.Packages.props | 26 +- Start.ps1 | 18 + global.json | 2 +- ...20240317201728_AddFuturCreator.Designer.cs | 444 +++++++++++ .../20240317201728_AddFuturCreator.cs | 116 +++ .../ApplicationDbContextModelSnapshot.cs | 747 ++++++++++-------- src/Infrastructure/Infrastructure.csproj | 1 + src/Web/Web.csproj | 4 + src/Web/appsettings.json | 2 +- 10 files changed, 994 insertions(+), 367 deletions(-) create mode 100644 Start.ps1 create mode 100644 src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs create mode 100644 src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs diff --git a/Directory.Build.props b/Directory.Build.props index 63a87da..ffa84fe 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,7 +3,6 @@ net8.0 true - $(MSBuildThisFileDirectory)artifacts enable enable diff --git a/Directory.Packages.props b/Directory.Packages.props index 0db7a9f..ba78a5d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -13,22 +13,22 @@ - - - - - - - + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - + + + + + + diff --git a/Start.ps1 b/Start.ps1 new file mode 100644 index 0000000..4724463 --- /dev/null +++ b/Start.ps1 @@ -0,0 +1,18 @@ +$password = $null + +# Manually parse arguments for a "-p" flag +for ($i = 0; $i -lt $args.Count; $i++) { + if ($args[$i] -eq "-p" -and $args.Count -gt $i + 1) { + $password = $args[$i + 1] + break + } +} + +# Check if we got a value for our environment variable +if ($null -ne $password) { + $Env:DB_PASSWORD = $password +} + +# Run the app in the web dir. +Set-Location -Path ./src/Web +dotnet watch run \ No newline at end of file diff --git a/global.json b/global.json index 282c5a8..622dcbb 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.203", + "version": "8.0.3", "rollForward": "latestFeature" } } \ No newline at end of file diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs new file mode 100644 index 0000000..12219ef --- /dev/null +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs @@ -0,0 +1,444 @@ +// +using System; +using Hutopy.Infrastructure.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Hutopy.Infrastructure.Data.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20240317201728_AddFuturCreator")] + partial class AddFuturCreator + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("FuturCreator", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastModified") + .HasColumnType("datetimeoffset"); + + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReasonToJoin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SocialNetworkAccount") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("FuturCreator"); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Done") + .HasColumnType("bit"); + + b.Property("LastModified") + .HasColumnType("datetimeoffset"); + + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("ListId") + .HasColumnType("int"); + + b.Property("Note") + .HasColumnType("nvarchar(max)"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Reminder") + .HasColumnType("datetime2"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("ListId"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModified") + .HasColumnType("datetimeoffset"); + + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.ToTable("TodoLists"); + }); + + modelBuilder.Entity("Hutopy.Infrastructure.Identity.ApplicationUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => + { + b.HasOne("Hutopy.Domain.Entities.TodoList", "List") + .WithMany("Items") + .HasForeignKey("ListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("List"); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => + { + b.OwnsOne("Hutopy.Domain.ValueObjects.Colour", "Colour", b1 => + { + b1.Property("TodoListId") + .HasColumnType("int"); + + b1.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b1.HasKey("TodoListId"); + + b1.ToTable("TodoLists"); + + b1.WithOwner() + .HasForeignKey("TodoListId"); + }); + + b.Navigation("Colour") + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs new file mode 100644 index 0000000..21a742f --- /dev/null +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs @@ -0,0 +1,116 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Hutopy.Infrastructure.Data.Migrations +{ + /// + public partial class AddFuturCreator : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.CreateTable( + name: "FuturCreator", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + FirstName = table.Column(type: "nvarchar(max)", nullable: false), + LastName = table.Column(type: "nvarchar(max)", nullable: false), + EmailAddress = table.Column(type: "nvarchar(max)", nullable: false), + PhoneNumber = table.Column(type: "nvarchar(max)", nullable: false), + SocialNetworkAccount = table.Column(type: "nvarchar(max)", nullable: false), + ReasonToJoin = table.Column(type: "nvarchar(max)", nullable: false), + Created = table.Column(type: "datetimeoffset", nullable: false), + CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), + LastModified = table.Column(type: "datetimeoffset", nullable: false), + LastModifiedBy = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FuturCreator", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "FuturCreator"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + } + } +} diff --git a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs index 7a9ffa0..7a0ef22 100644 --- a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -17,379 +17,424 @@ namespace Hutopy.Infrastructure.Data.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.0-preview.6.23329.4") + .HasAnnotation("ProductVersion", "8.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Created") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedBy") - .HasColumnType("nvarchar(max)"); - - b.Property("Done") - .HasColumnType("bit"); - - b.Property("LastModified") - .HasColumnType("datetimeoffset"); - - b.Property("LastModifiedBy") - .HasColumnType("nvarchar(max)"); - - b.Property("ListId") - .HasColumnType("int"); - - b.Property("Note") - .HasColumnType("nvarchar(max)"); - - b.Property("Priority") - .HasColumnType("int"); - - b.Property("Reminder") - .HasColumnType("datetime2"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar(200)"); - - b.HasKey("Id"); - - b.HasIndex("ListId"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Created") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedBy") - .HasColumnType("nvarchar(max)"); - - b.Property("LastModified") - .HasColumnType("datetimeoffset"); - - b.Property("LastModifiedBy") - .HasColumnType("nvarchar(max)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar(200)"); - - b.HasKey("Id"); - - b.ToTable("TodoLists"); - }); - - modelBuilder.Entity("Hutopy.Infrastructure.Identity.ApplicationUser", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("AccessFailedCount") - .HasColumnType("int"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("bit"); - - b.Property("LockoutEnabled") - .HasColumnType("bit"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("PasswordHash") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumber") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("bit"); - - b.Property("SecurityStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("TwoFactorEnabled") - .HasColumnType("bit"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex") - .HasFilter("[NormalizedUserName] IS NOT NULL"); - - b.ToTable("AspNetUsers", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex") - .HasFilter("[NormalizedName] IS NOT NULL"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("nvarchar(max)"); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(max)"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("nvarchar(max)"); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(max)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("nvarchar(max)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.Property("RoleId") - .HasColumnType("nvarchar(450)"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => - { - b.HasOne("Hutopy.Domain.Entities.TodoList", "List") - .WithMany("Items") - .HasForeignKey("ListId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("List"); - }); - - modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => - { - b.OwnsOne("Hutopy.Domain.ValueObjects.Colour", "Colour", b1 => + modelBuilder.Entity("FuturCreator", b => { - b1.Property("TodoListId") + b.Property("Id") + .ValueGeneratedOnAdd() .HasColumnType("int"); - b1.Property("Code") + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("EmailAddress") .IsRequired() .HasColumnType("nvarchar(max)"); - b1.HasKey("TodoListId"); + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); - b1.ToTable("TodoLists"); + b.Property("LastModified") + .HasColumnType("datetimeoffset"); - b1.WithOwner() - .HasForeignKey("TodoListId"); + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReasonToJoin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SocialNetworkAccount") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("FuturCreator"); }); - b.Navigation("Colour") - .IsRequired(); - }); + modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + b.Property("Created") + .HasColumnType("datetimeoffset"); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + b.Property("Done") + .HasColumnType("bit"); - b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + b.Property("LastModified") + .HasColumnType("datetimeoffset"); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("ListId") + .HasColumnType("int"); + + b.Property("Note") + .HasColumnType("nvarchar(max)"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Reminder") + .HasColumnType("datetime2"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("ListId"); + + b.ToTable("TodoItems"); + }); modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => - { - b.Navigation("Items"); - }); + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModified") + .HasColumnType("datetimeoffset"); + + b.Property("LastModifiedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.ToTable("TodoLists"); + }); + + modelBuilder.Entity("Hutopy.Infrastructure.Identity.ApplicationUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => + { + b.HasOne("Hutopy.Domain.Entities.TodoList", "List") + .WithMany("Items") + .HasForeignKey("ListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("List"); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => + { + b.OwnsOne("Hutopy.Domain.ValueObjects.Colour", "Colour", b1 => + { + b1.Property("TodoListId") + .HasColumnType("int"); + + b1.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b1.HasKey("TodoListId"); + + b1.ToTable("TodoLists"); + + b1.WithOwner() + .HasForeignKey("TodoListId"); + }); + + b.Navigation("Colour") + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Hutopy.Infrastructure.Identity.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Hutopy.Domain.Entities.TodoList", b => + { + b.Navigation("Items"); + }); #pragma warning restore 612, 618 } } diff --git a/src/Infrastructure/Infrastructure.csproj b/src/Infrastructure/Infrastructure.csproj index 581d24f..ab862ba 100644 --- a/src/Infrastructure/Infrastructure.csproj +++ b/src/Infrastructure/Infrastructure.csproj @@ -11,6 +11,7 @@ all + diff --git a/src/Web/Web.csproj b/src/Web/Web.csproj index 27c2d2d..14b1052 100644 --- a/src/Web/Web.csproj +++ b/src/Web/Web.csproj @@ -18,6 +18,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Web/appsettings.json b/src/Web/appsettings.json index bedce59..84c0835 100644 --- a/src/Web/appsettings.json +++ b/src/Web/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "DefaultConnection": "Server=localhost,1433;Database=TestDeux;User Id=sa;Password={DB_PASSWORD};MultipleActiveResultSets=true;TrustServerCertificate=True" + "DefaultConnection": "Server=localhost,1433;Database=HutopyLocal;User Id=sa;Password={DB_PASSWORD};MultipleActiveResultSets=true;TrustServerCertificate=True" }, "Logging": { "LogLevel": { From d565d0c98ba4776a471dee4356ccda7cf454cb41 Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Sun, 17 Mar 2024 16:59:20 -0400 Subject: [PATCH 3/8] CleanUp and added migration --- Directory.Build.props | 2 +- .../Interfaces/IApplicationDbContext.cs | 2 +- .../Commands/CreateFuturCreator.cs | 5 +- src/Domain/Entities/FuturCreator.cs | 2 + .../Data/ApplicationDbContext.cs | 2 +- ...20240317201728_AddFuturCreator.Designer.cs | 8 +-- .../20240317201728_AddFuturCreator.cs | 8 +-- src/Web/Endpoints/FuturCreators.cs | 18 ++++++ src/Web/wwwroot/api/specification.json | 62 +++++++++++++++++++ 9 files changed, 96 insertions(+), 13 deletions(-) rename src/Application/{FuturCreator => FuturCreators}/Commands/CreateFuturCreator.cs (89%) create mode 100644 src/Web/Endpoints/FuturCreators.cs diff --git a/Directory.Build.props b/Directory.Build.props index ffa84fe..fad896c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,7 +2,7 @@ net8.0 - true + false enable enable diff --git a/src/Application/Common/Interfaces/IApplicationDbContext.cs b/src/Application/Common/Interfaces/IApplicationDbContext.cs index c393783..4e5f1fa 100644 --- a/src/Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/Application/Common/Interfaces/IApplicationDbContext.cs @@ -8,7 +8,7 @@ public interface IApplicationDbContext DbSet TodoItems { get; } - DbSet FuturCreator { get; } + DbSet FuturCreators { get; } Task SaveChangesAsync(CancellationToken cancellationToken); } diff --git a/src/Application/FuturCreator/Commands/CreateFuturCreator.cs b/src/Application/FuturCreators/Commands/CreateFuturCreator.cs similarity index 89% rename from src/Application/FuturCreator/Commands/CreateFuturCreator.cs rename to src/Application/FuturCreators/Commands/CreateFuturCreator.cs index 82db619..857a440 100644 --- a/src/Application/FuturCreator/Commands/CreateFuturCreator.cs +++ b/src/Application/FuturCreators/Commands/CreateFuturCreator.cs @@ -1,6 +1,7 @@ using Hutopy.Application.Common.Interfaces; +using Hutopy.Domain.Entities; -namespace Hutopy.Application.TodoItems.Commands.CreateFuturCreator; +namespace Hutopy.Application.FuturCreators.Commands.CreateFuturCreator; public record CreateFuturCreatorCommand : IRequest { @@ -34,7 +35,7 @@ public class CreateFuturCreatorCommandHandler : IRequestHandler, IApplica public DbSet TodoItems => Set(); - public DbSet FuturCreator => Set(); + public DbSet FuturCreators => Set(); protected override void OnModelCreating(ModelBuilder builder) { diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs index 12219ef..9244599 100644 --- a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Hutopy.Infrastructure.Data.Migrations { [DbContext(typeof(ApplicationDbContext))] - [Migration("20240317201728_AddFuturCreator")] - partial class AddFuturCreator + [Migration("20240317201728_AddFuturCreators")] + partial class AddfuturCreators { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -25,7 +25,7 @@ namespace Hutopy.Infrastructure.Data.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("FuturCreator", b => + modelBuilder.Entity("FuturCreators", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -71,7 +71,7 @@ namespace Hutopy.Infrastructure.Data.Migrations b.HasKey("Id"); - b.ToTable("FuturCreator"); + b.ToTable("FuturCreators"); }); modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs index 21a742f..d2de5c0 100644 --- a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs @@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace Hutopy.Infrastructure.Data.Migrations { /// - public partial class AddFuturCreator : Migration + public partial class AddFuturCreators : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -48,7 +48,7 @@ namespace Hutopy.Infrastructure.Data.Migrations oldMaxLength: 128); migrationBuilder.CreateTable( - name: "FuturCreator", + name: "FuturCreators", columns: table => new { Id = table.Column(type: "int", nullable: false) @@ -66,7 +66,7 @@ namespace Hutopy.Infrastructure.Data.Migrations }, constraints: table => { - table.PrimaryKey("PK_FuturCreator", x => x.Id); + table.PrimaryKey("PK_FuturCreators", x => x.Id); }); } @@ -74,7 +74,7 @@ namespace Hutopy.Infrastructure.Data.Migrations protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "FuturCreator"); + name: "FuturCreators"); migrationBuilder.AlterColumn( name: "Name", diff --git a/src/Web/Endpoints/FuturCreators.cs b/src/Web/Endpoints/FuturCreators.cs new file mode 100644 index 0000000..383862a --- /dev/null +++ b/src/Web/Endpoints/FuturCreators.cs @@ -0,0 +1,18 @@ +using Hutopy.Application.FuturCreators.Commands.CreateFuturCreator; + +namespace Hutopy.Web.Endpoints; + +public class FuturCreators : EndpointGroupBase +{ + public override void Map(WebApplication app) + { + app.MapGroup(this) + .RequireAuthorization() + .MapPost(CreateFuturCreator); + } + + public Task CreateFuturCreator(ISender sender, CreateFuturCreatorCommand command) + { + return sender.Send(command); + } +} diff --git a/src/Web/wwwroot/api/specification.json b/src/Web/wwwroot/api/specification.json index a8d81f4..2794485 100644 --- a/src/Web/wwwroot/api/specification.json +++ b/src/Web/wwwroot/api/specification.json @@ -6,6 +6,44 @@ "version": "1.0.0" }, "paths": { + "/api/FuturCreators": { + "post": { + "tags": [ + "FuturCreators" + ], + "operationId": "CreateFuturCreator", + "requestBody": { + "x-name": "command", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFuturCreatorCommand" + } + } + }, + "required": true, + "x-position": 1 + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "security": [ + { + "JWT": [] + } + ] + } + }, "/api/TodoItems": { "get": { "tags": [ @@ -757,6 +795,30 @@ }, "components": { "schemas": { + "CreateFuturCreatorCommand": { + "type": "object", + "additionalProperties": false, + "properties": { + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "emailAddress": { + "type": "string" + }, + "phoneNumber": { + "type": "string" + }, + "socialNetworkAccount": { + "type": "string" + }, + "reasonToJoin": { + "type": "string" + } + } + }, "PaginatedListOfTodoItemBriefDto": { "type": "object", "additionalProperties": false, From a58afc774f7ee299e9ad14e94567cf90467faf4c Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Sun, 17 Mar 2024 17:00:43 -0400 Subject: [PATCH 4/8] Fixed typo --- .../Data/Migrations/20240317201728_AddFuturCreator.Designer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs index 9244599..a33f51b 100644 --- a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.Designer.cs @@ -13,7 +13,7 @@ namespace Hutopy.Infrastructure.Data.Migrations { [DbContext(typeof(ApplicationDbContext))] [Migration("20240317201728_AddFuturCreators")] - partial class AddfuturCreators + partial class AddFuturCreators { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) From 775d25d31d68f3f5ed0a6192aa2fc5f29801c570 Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Sun, 17 Mar 2024 17:03:35 -0400 Subject: [PATCH 5/8] Fix snapshot --- .../Data/Migrations/ApplicationDbContextModelSnapshot.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs index 7a0ef22..4b12eb4 100644 --- a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -22,7 +22,7 @@ namespace Hutopy.Infrastructure.Data.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("FuturCreator", b => + modelBuilder.Entity("Hutopy.Domain.Entities.FuturCreator", b => { b.Property("Id") .ValueGeneratedOnAdd() From fca3d26aa7bed09e6e844e23b88400e5d401ebfd Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Sun, 17 Mar 2024 21:02:41 -0400 Subject: [PATCH 6/8] Fix: Invalid .NET version --- global.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/global.json b/global.json index 622dcbb..05cf0d8 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,7 @@ { "sdk": { - "version": "8.0.3", - "rollForward": "latestFeature" + "version": "8.0.203", + "rollForward": "latestFeature", + "allowPrerelease": true } } \ No newline at end of file From b7ec5a69a9cf6a16b07c5b98cfb8429a7afffba0 Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Sun, 17 Mar 2024 21:03:08 -0400 Subject: [PATCH 7/8] Feature: Join us api call --- .../Common/Interfaces/IApplicationDbContext.cs | 2 +- src/Application/DependencyInjection.cs | 1 - .../Commands/CreateFutureCreator.cs} | 12 ++++++------ src/Domain/Entities/FuturCreator.cs | 11 ----------- src/Domain/Entities/FutureCreator.cs | 11 +++++++++++ .../Data/ApplicationDbContext.cs | 2 +- .../20240317201728_AddFuturCreator.cs | 4 ++-- .../ApplicationDbContextModelSnapshot.cs | 4 ++-- src/Web/Endpoints/FuturCreators.cs | 18 ------------------ src/Web/Endpoints/JoinUs.cs | 17 +++++++++++++++++ src/Web/wwwroot/api/specification.json | 17 ++++++----------- 11 files changed, 46 insertions(+), 53 deletions(-) rename src/Application/{FuturCreators/Commands/CreateFuturCreator.cs => FutureCreators/Commands/CreateFutureCreator.cs} (75%) delete mode 100644 src/Domain/Entities/FuturCreator.cs create mode 100644 src/Domain/Entities/FutureCreator.cs delete mode 100644 src/Web/Endpoints/FuturCreators.cs create mode 100644 src/Web/Endpoints/JoinUs.cs diff --git a/src/Application/Common/Interfaces/IApplicationDbContext.cs b/src/Application/Common/Interfaces/IApplicationDbContext.cs index 4e5f1fa..9e35843 100644 --- a/src/Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/Application/Common/Interfaces/IApplicationDbContext.cs @@ -8,7 +8,7 @@ public interface IApplicationDbContext DbSet TodoItems { get; } - DbSet FuturCreators { get; } + DbSet FutureCreators { get; } Task SaveChangesAsync(CancellationToken cancellationToken); } diff --git a/src/Application/DependencyInjection.cs b/src/Application/DependencyInjection.cs index ebbe093..3ff3e1e 100644 --- a/src/Application/DependencyInjection.cs +++ b/src/Application/DependencyInjection.cs @@ -1,5 +1,4 @@ using System.Reflection; -using Hutopy.Application.Common.Behaviours; namespace Microsoft.Extensions.DependencyInjection; diff --git a/src/Application/FuturCreators/Commands/CreateFuturCreator.cs b/src/Application/FutureCreators/Commands/CreateFutureCreator.cs similarity index 75% rename from src/Application/FuturCreators/Commands/CreateFuturCreator.cs rename to src/Application/FutureCreators/Commands/CreateFutureCreator.cs index 857a440..54f4e70 100644 --- a/src/Application/FuturCreators/Commands/CreateFuturCreator.cs +++ b/src/Application/FutureCreators/Commands/CreateFutureCreator.cs @@ -1,9 +1,9 @@ using Hutopy.Application.Common.Interfaces; using Hutopy.Domain.Entities; -namespace Hutopy.Application.FuturCreators.Commands.CreateFuturCreator; +namespace Hutopy.Application.FutureCreators.Commands; -public record CreateFuturCreatorCommand : IRequest +public record CreateFutureCreatorCommand : IRequest { public required string FirstName { get; init; } public required string LastName { get; init; } @@ -13,7 +13,7 @@ public record CreateFuturCreatorCommand : IRequest public required string ReasonToJoin { get; init; } } -public class CreateFuturCreatorCommandHandler : IRequestHandler +public class CreateFuturCreatorCommandHandler : IRequestHandler { private readonly IApplicationDbContext _context; @@ -23,9 +23,9 @@ public class CreateFuturCreatorCommandHandler : IRequestHandler Handle(CreateFuturCreatorCommand request, CancellationToken cancellationToken) + public async Task Handle(CreateFutureCreatorCommand request, CancellationToken cancellationToken) { - var entity = new FuturCreator() + var entity = new FutureCreator { FirstName = request.FirstName, LastName = request.LastName, @@ -35,7 +35,7 @@ public class CreateFuturCreatorCommandHandler : IRequestHandler, IApplica public DbSet TodoItems => Set(); - public DbSet FuturCreators => Set(); + public DbSet FutureCreators => Set(); protected override void OnModelCreating(ModelBuilder builder) { diff --git a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs index d2de5c0..a65203a 100644 --- a/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs +++ b/src/Infrastructure/Data/Migrations/20240317201728_AddFuturCreator.cs @@ -48,7 +48,7 @@ namespace Hutopy.Infrastructure.Data.Migrations oldMaxLength: 128); migrationBuilder.CreateTable( - name: "FuturCreators", + name: "FutureCreators", columns: table => new { Id = table.Column(type: "int", nullable: false) @@ -74,7 +74,7 @@ namespace Hutopy.Infrastructure.Data.Migrations protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "FuturCreators"); + name: "FutureCreators"); migrationBuilder.AlterColumn( name: "Name", diff --git a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs index 4b12eb4..0eb80ef 100644 --- a/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/src/Infrastructure/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -22,7 +22,7 @@ namespace Hutopy.Infrastructure.Data.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("Hutopy.Domain.Entities.FuturCreator", b => + modelBuilder.Entity("Hutopy.Domain.Entities.FutureCreator", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -68,7 +68,7 @@ namespace Hutopy.Infrastructure.Data.Migrations b.HasKey("Id"); - b.ToTable("FuturCreator"); + b.ToTable("FutureCreator"); }); modelBuilder.Entity("Hutopy.Domain.Entities.TodoItem", b => diff --git a/src/Web/Endpoints/FuturCreators.cs b/src/Web/Endpoints/FuturCreators.cs deleted file mode 100644 index 383862a..0000000 --- a/src/Web/Endpoints/FuturCreators.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Hutopy.Application.FuturCreators.Commands.CreateFuturCreator; - -namespace Hutopy.Web.Endpoints; - -public class FuturCreators : EndpointGroupBase -{ - public override void Map(WebApplication app) - { - app.MapGroup(this) - .RequireAuthorization() - .MapPost(CreateFuturCreator); - } - - public Task CreateFuturCreator(ISender sender, CreateFuturCreatorCommand command) - { - return sender.Send(command); - } -} diff --git a/src/Web/Endpoints/JoinUs.cs b/src/Web/Endpoints/JoinUs.cs new file mode 100644 index 0000000..d49265f --- /dev/null +++ b/src/Web/Endpoints/JoinUs.cs @@ -0,0 +1,17 @@ +using Hutopy.Application.FutureCreators.Commands; + +namespace Hutopy.Web.Endpoints; + +public class JoinUs : EndpointGroupBase +{ + public override void Map(WebApplication app) + { + app.MapGroup(this) + .MapPost(CreateFutureCreator); + } + + public Task CreateFutureCreator(ISender sender, CreateFutureCreatorCommand command) + { + return sender.Send(command); + } +} diff --git a/src/Web/wwwroot/api/specification.json b/src/Web/wwwroot/api/specification.json index 2794485..c4ab40c 100644 --- a/src/Web/wwwroot/api/specification.json +++ b/src/Web/wwwroot/api/specification.json @@ -6,18 +6,18 @@ "version": "1.0.0" }, "paths": { - "/api/FuturCreators": { + "/api/JoinUs": { "post": { "tags": [ - "FuturCreators" + "JoinUs" ], - "operationId": "CreateFuturCreator", + "operationId": "CreateFutureCreator", "requestBody": { "x-name": "command", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateFuturCreatorCommand" + "$ref": "#/components/schemas/CreateFutureCreatorCommand" } } }, @@ -36,12 +36,7 @@ } } } - }, - "security": [ - { - "JWT": [] - } - ] + } } }, "/api/TodoItems": { @@ -795,7 +790,7 @@ }, "components": { "schemas": { - "CreateFuturCreatorCommand": { + "CreateFutureCreatorCommand": { "type": "object", "additionalProperties": false, "properties": { From cc26d104d15817909418fa477f624549a715b747 Mon Sep 17 00:00:00 2001 From: Dominic Villemure Date: Mon, 18 Mar 2024 21:25:28 -0400 Subject: [PATCH 8/8] Removed useless using --- src/Infrastructure/Data/ApplicationDbContext.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Infrastructure/Data/ApplicationDbContext.cs b/src/Infrastructure/Data/ApplicationDbContext.cs index 6860e86..1a41916 100644 --- a/src/Infrastructure/Data/ApplicationDbContext.cs +++ b/src/Infrastructure/Data/ApplicationDbContext.cs @@ -2,7 +2,6 @@ using Hutopy.Application.Common.Interfaces; using Hutopy.Domain.Entities; using Hutopy.Infrastructure.Identity; -using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;