From fa58ce555c7a05616cc9fe8d14a7bc4ee514169b Mon Sep 17 00:00:00 2001 From: Damien Ostler Date: Sat, 9 Mar 2024 22:45:04 -0500 Subject: [PATCH] feat: database migration --- .../Controllers/Admin/AdminUsersController.cs | 2 - src/comissions.app.api/Entities/Ban.cs | 5 +- src/comissions.app.api/Entities/Suspension.cs | 24 +- src/comissions.app.api/Entities/User.cs | 1 + .../Middleware/UserMiddleware.cs | 8 +- .../20240310034454_moarr.Designer.cs | 682 ++++++++++++++++++ .../Migrations/20240310034454_moarr.cs | 306 ++++++++ .../ApplicationDbContextModelSnapshot.cs | 159 ++-- src/comissions.app.api/Models/PenaltyModel.cs | 3 - 9 files changed, 1112 insertions(+), 78 deletions(-) create mode 100644 src/comissions.app.api/Migrations/20240310034454_moarr.Designer.cs create mode 100644 src/comissions.app.api/Migrations/20240310034454_moarr.cs diff --git a/src/comissions.app.api/Controllers/Admin/AdminUsersController.cs b/src/comissions.app.api/Controllers/Admin/AdminUsersController.cs index 55f9176..f9e8f11 100644 --- a/src/comissions.app.api/Controllers/Admin/AdminUsersController.cs +++ b/src/comissions.app.api/Controllers/Admin/AdminUsersController.cs @@ -61,7 +61,6 @@ public class AdminUsersController:ControllerBase { UserId = userId, Reason = reason, - AdminId = User.GetUserId(), SuspensionDate = DateTime.UtcNow, UnsuspensionDate = DateTime.UtcNow.AddDays(days), Voided = false @@ -101,7 +100,6 @@ public class AdminUsersController:ControllerBase { UserId = userId, Reason = reason, - AdminId = User.GetUserId(), BanDate = DateTime.UtcNow, UnbanDate = DateTime.UtcNow.AddDays(days), Voided = false diff --git a/src/comissions.app.api/Entities/Ban.cs b/src/comissions.app.api/Entities/Ban.cs index 8a2e501..f1b2179 100644 --- a/src/comissions.app.api/Entities/Ban.cs +++ b/src/comissions.app.api/Entities/Ban.cs @@ -1,14 +1,15 @@ +using System.ComponentModel.DataAnnotations.Schema; + namespace comissions.app.database.Entities; public class Ban { public int Id { get; set; } + [ForeignKey("User")] public string UserId { get; set; } public DateTime BanDate { get; set; } public DateTime UnbanDate { get; set; } public bool Voided { get; set; } = false; public string Reason { get; set; } - public string AdminId { get; set; } - public virtual User Admin { get; set; } public virtual User User { get; set; } } \ No newline at end of file diff --git a/src/comissions.app.api/Entities/Suspension.cs b/src/comissions.app.api/Entities/Suspension.cs index 38a9ab5..94dc537 100644 --- a/src/comissions.app.api/Entities/Suspension.cs +++ b/src/comissions.app.api/Entities/Suspension.cs @@ -1,14 +1,12 @@ -namespace comissions.app.database.Entities; + namespace comissions.app.database.Entities; -public class Suspension -{ - public int Id { get; set; } - public string UserId { get; set; } - public DateTime SuspensionDate { get; set; } - public DateTime UnsuspensionDate { get; set; } - public bool Voided { get; set; } = false; - public string Reason { get; set; } - public string AdminId { get; set; } - public virtual User Admin { get; set; } - public virtual User User { get; set; } -} \ No newline at end of file + public class Suspension + { + public int Id { get; set; } + public string UserId { get; set; } + public DateTime SuspensionDate { get; set; } + public DateTime UnsuspensionDate { get; set; } + public bool Voided { get; set; } = false; + public string Reason { get; set; } + public virtual User User { get; set; } + } \ No newline at end of file diff --git a/src/comissions.app.api/Entities/User.cs b/src/comissions.app.api/Entities/User.cs index 7442d3b..97f3241 100644 --- a/src/comissions.app.api/Entities/User.cs +++ b/src/comissions.app.api/Entities/User.cs @@ -12,6 +12,7 @@ public record User public string Email { get; set; } = null!; public int? UserArtistId { get; set; } + public string AdminNotes { get; set; } [JsonIgnore] public virtual UserArtist? UserArtist { get; set; } [JsonIgnore] public virtual ICollection Requests { get; set; } = new List(); [JsonIgnore] public virtual ICollection Suspensions { get; set; } = new List(); diff --git a/src/comissions.app.api/Middleware/UserMiddleware.cs b/src/comissions.app.api/Middleware/UserMiddleware.cs index 8039a9f..abbb965 100644 --- a/src/comissions.app.api/Middleware/UserMiddleware.cs +++ b/src/comissions.app.api/Middleware/UserMiddleware.cs @@ -28,8 +28,8 @@ public class UserMiddleware var userId = context.User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value; var user = await dbContext.Users.Include(x=>x.UserArtist) - .Include(x=>x.Bans).ThenInclude(x=>x.Admin) - .Include(x=>x.Suspensions).ThenInclude(x=>x.Admin) + .Include(x=>x.Bans) + .Include(x=>x.Suspensions) .FirstOrDefaultAsync(x=>x.Id==userId); if (user == null) @@ -67,7 +67,7 @@ public class UserMiddleware { var suspendDate = suspension.SuspensionDate.ToString("MM/dd/yyyy"); var unsuspendDate = suspension.UnsuspensionDate.ToString("MM/dd/yyyy"); - await context.Response.WriteAsync($"Suspended on {suspendDate} until {unsuspendDate} for {suspension.Reason} by {suspension.Admin.DisplayName}."); + await context.Response.WriteAsync($"Suspended on {suspendDate} until {unsuspendDate} for {suspension.Reason}."); context.Response.StatusCode = StatusCodes.Status403Forbidden; return; } @@ -77,7 +77,7 @@ public class UserMiddleware { var suspendDate = ban.BanDate.ToString("MM/dd/yyyy"); var unsuspendDate = ban.UnbanDate.ToString("MM/dd/yyyy"); - await context.Response.WriteAsync($"Banned on {suspendDate} until {unsuspendDate} for {ban.Reason} by {ban.Admin.DisplayName}."); + await context.Response.WriteAsync($"Banned on {suspendDate} until {unsuspendDate} for {ban.Reason}."); context.Response.StatusCode = StatusCodes.Status403Forbidden; return; } diff --git a/src/comissions.app.api/Migrations/20240310034454_moarr.Designer.cs b/src/comissions.app.api/Migrations/20240310034454_moarr.Designer.cs new file mode 100644 index 0000000..2348fc4 --- /dev/null +++ b/src/comissions.app.api/Migrations/20240310034454_moarr.Designer.cs @@ -0,0 +1,682 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using comissions.app.database; + +#nullable disable + +namespace comissions.app.api.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20240310034454_moarr")] + partial class moarr + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistPageSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ArtistId") + .HasColumnType("integer"); + + b.Property("BackgroundColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionBackgroundColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionHeaderColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionHeaderImageUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionHeaderSize") + .HasColumnType("integer"); + + b.Property("DescriptionHeaderText") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionHeaderUseImage") + .HasColumnType("boolean"); + + b.Property("DescriptionTextColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("DescriptionTextSize") + .HasColumnType("integer"); + + b.Property("HeaderColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("HeaderImageUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("HeaderTextSize") + .HasColumnType("integer"); + + b.Property("HeaderUseImage") + .HasColumnType("boolean"); + + b.Property("PortfolioBackgroundColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("PortfolioColumns") + .HasColumnType("integer"); + + b.Property("PortfolioEnabledScrolling") + .HasColumnType("boolean"); + + b.Property("PortfolioMasonry") + .HasColumnType("boolean"); + + b.Property("PortfolioMaximumSize") + .HasColumnType("integer"); + + b.Property("PortfolionHeaderColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("PortfolionHeaderImageUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("PortfolionHeaderSize") + .HasColumnType("integer"); + + b.Property("PortfolionHeaderText") + .IsRequired() + .HasColumnType("text"); + + b.Property("PortfolionHeaderUseImage") + .HasColumnType("boolean"); + + b.Property("RequestBackgroundColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestButtonBGColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestButtonHoverBGColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestButtonHoverTextColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestButtonTextColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestHeaderColor") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestHeaderImageUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestHeaderSize") + .HasColumnType("integer"); + + b.Property("RequestHeaderText") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestHeaderUseImage") + .HasColumnType("boolean"); + + b.Property("RequestTermsColor") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ArtistId") + .IsUnique(); + + b.ToTable("ArtistPageSettings"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistPortfolioPiece", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ArtistId") + .HasColumnType("integer"); + + b.Property("FileReference") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ArtistId"); + + b.ToTable("ArtistPortfolioPieces"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Accepted") + .HasColumnType("boolean"); + + b.Property("AcceptedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("ArtistRequests"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistRequestMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ArtistRequestId") + .HasColumnType("integer"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text"); + + b.Property("SentDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ArtistRequestId"); + + b.HasIndex("UserId"); + + b.ToTable("ArtistRequestMessages"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Ban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text"); + + b.Property("UnbanDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Voided") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Bans"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Request", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Accepted") + .HasColumnType("boolean"); + + b.Property("AcceptedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("ArtistId") + .HasColumnType("integer"); + + b.Property("Completed") + .HasColumnType("boolean"); + + b.Property("CompletedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Declined") + .HasColumnType("boolean"); + + b.Property("DeclinedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text"); + + b.Property("Paid") + .HasColumnType("boolean"); + + b.Property("PaidDate") + .HasColumnType("timestamp with time zone"); + + b.Property("PaymentUrl") + .HasColumnType("text"); + + b.Property("Rating") + .HasColumnType("double precision"); + + b.Property("RequestDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ReviewDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ReviewMessage") + .HasColumnType("text"); + + b.Property("Reviewed") + .HasColumnType("boolean"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ArtistId"); + + b.HasIndex("UserId"); + + b.ToTable("Requests"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.RequestAsset", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FileReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("RequestAssets"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.RequestReference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FileReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("RequestReferences"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Suspension", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text"); + + b.Property("SuspensionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UnsuspensionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Voided") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Suspensions"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("AdminNotes") + .IsRequired() + .HasColumnType("text"); + + b.Property("Biography") + .IsRequired() + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserArtistId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.UserArtist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AgeRestricted") + .HasColumnType("boolean"); + + b.Property("ArtistPageSettingsId") + .HasColumnType("integer"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("PrepaymentRequired") + .HasColumnType("boolean"); + + b.Property("RequestGuidelines") + .IsRequired() + .HasColumnType("text"); + + b.Property("SocialMediaLink1") + .IsRequired() + .HasColumnType("text"); + + b.Property("SocialMediaLink2") + .IsRequired() + .HasColumnType("text"); + + b.Property("SocialMediaLink3") + .IsRequired() + .HasColumnType("text"); + + b.Property("SocialMediaLink4") + .IsRequired() + .HasColumnType("text"); + + b.Property("StripeAccountId") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("UserArtists"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistPageSettings", b => + { + b.HasOne("comissions.app.database.Entities.UserArtist", "Artist") + .WithOne("ArtistPageSettings") + .HasForeignKey("comissions.app.database.Entities.ArtistPageSettings", "ArtistId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Artist"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistPortfolioPiece", b => + { + b.HasOne("comissions.app.database.Entities.UserArtist", "Artist") + .WithMany("PortfolioPieces") + .HasForeignKey("ArtistId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Artist"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistRequest", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistRequestMessage", b => + { + b.HasOne("comissions.app.database.Entities.ArtistRequest", null) + .WithMany("ArtistRequestMessages") + .HasForeignKey("ArtistRequestId"); + + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Ban", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany("Bans") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Request", b => + { + b.HasOne("comissions.app.database.Entities.UserArtist", "Artist") + .WithMany("Requests") + .HasForeignKey("ArtistId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany("Requests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Artist"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.RequestAsset", b => + { + b.HasOne("comissions.app.database.Entities.Request", "Request") + .WithMany("RequestAssets") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Request"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.RequestReference", b => + { + b.HasOne("comissions.app.database.Entities.Request", "Request") + .WithMany("RequestReferences") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Request"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Suspension", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany("Suspensions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.UserArtist", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithOne("UserArtist") + .HasForeignKey("comissions.app.database.Entities.UserArtist", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.ArtistRequest", b => + { + b.Navigation("ArtistRequestMessages"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.Request", b => + { + b.Navigation("RequestAssets"); + + b.Navigation("RequestReferences"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.User", b => + { + b.Navigation("Bans"); + + b.Navigation("Requests"); + + b.Navigation("Suspensions"); + + b.Navigation("UserArtist"); + }); + + modelBuilder.Entity("comissions.app.database.Entities.UserArtist", b => + { + b.Navigation("ArtistPageSettings") + .IsRequired(); + + b.Navigation("PortfolioPieces"); + + b.Navigation("Requests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/comissions.app.api/Migrations/20240310034454_moarr.cs b/src/comissions.app.api/Migrations/20240310034454_moarr.cs new file mode 100644 index 0000000..937da10 --- /dev/null +++ b/src/comissions.app.api/Migrations/20240310034454_moarr.cs @@ -0,0 +1,306 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace comissions.app.api.Migrations +{ + /// + public partial class moarr : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Requests_ArtistRequests_ArtistRequestId", + table: "Requests"); + + migrationBuilder.DropIndex( + name: "IX_Requests_ArtistRequestId", + table: "Requests"); + + migrationBuilder.DropColumn( + name: "BanAdminId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "Banned", + table: "Users"); + + migrationBuilder.DropColumn( + name: "BannedDate", + table: "Users"); + + migrationBuilder.DropColumn( + name: "BannedReason", + table: "Users"); + + migrationBuilder.DropColumn( + name: "SuspendAdminId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "Suspended", + table: "Users"); + + migrationBuilder.DropColumn( + name: "SuspendedDate", + table: "Users"); + + migrationBuilder.DropColumn( + name: "SuspendedReason", + table: "Users"); + + migrationBuilder.DropColumn( + name: "UnbanDate", + table: "Users"); + + migrationBuilder.DropColumn( + name: "UnsuspendDate", + table: "Users"); + + migrationBuilder.DropColumn( + name: "SuspendAdminId", + table: "UserArtists"); + + migrationBuilder.DropColumn( + name: "Suspended", + table: "UserArtists"); + + migrationBuilder.DropColumn( + name: "SuspendedDate", + table: "UserArtists"); + + migrationBuilder.DropColumn( + name: "SuspendedReason", + table: "UserArtists"); + + migrationBuilder.DropColumn( + name: "UnsuspendDate", + table: "UserArtists"); + + migrationBuilder.DropColumn( + name: "ArtistRequestId", + table: "Requests"); + + migrationBuilder.AddColumn( + name: "AdminNotes", + table: "Users", + type: "text", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "ArtistRequestId", + table: "ArtistRequestMessages", + type: "integer", + nullable: true); + + migrationBuilder.CreateTable( + name: "Bans", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "text", nullable: false), + BanDate = table.Column(type: "timestamp with time zone", nullable: false), + UnbanDate = table.Column(type: "timestamp with time zone", nullable: false), + Voided = table.Column(type: "boolean", nullable: false), + Reason = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Bans", x => x.Id); + table.ForeignKey( + name: "FK_Bans_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Suspensions", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "text", nullable: false), + SuspensionDate = table.Column(type: "timestamp with time zone", nullable: false), + UnsuspensionDate = table.Column(type: "timestamp with time zone", nullable: false), + Voided = table.Column(type: "boolean", nullable: false), + Reason = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Suspensions", x => x.Id); + table.ForeignKey( + name: "FK_Suspensions_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_ArtistRequestMessages_ArtistRequestId", + table: "ArtistRequestMessages", + column: "ArtistRequestId"); + + migrationBuilder.CreateIndex( + name: "IX_Bans_UserId", + table: "Bans", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Suspensions_UserId", + table: "Suspensions", + column: "UserId"); + + migrationBuilder.AddForeignKey( + name: "FK_ArtistRequestMessages_ArtistRequests_ArtistRequestId", + table: "ArtistRequestMessages", + column: "ArtistRequestId", + principalTable: "ArtistRequests", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ArtistRequestMessages_ArtistRequests_ArtistRequestId", + table: "ArtistRequestMessages"); + + migrationBuilder.DropTable( + name: "Bans"); + + migrationBuilder.DropTable( + name: "Suspensions"); + + migrationBuilder.DropIndex( + name: "IX_ArtistRequestMessages_ArtistRequestId", + table: "ArtistRequestMessages"); + + migrationBuilder.DropColumn( + name: "AdminNotes", + table: "Users"); + + migrationBuilder.DropColumn( + name: "ArtistRequestId", + table: "ArtistRequestMessages"); + + migrationBuilder.AddColumn( + name: "BanAdminId", + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "Banned", + table: "Users", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "BannedDate", + table: "Users", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "BannedReason", + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "SuspendAdminId", + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "Suspended", + table: "Users", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "SuspendedDate", + table: "Users", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "SuspendedReason", + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "UnbanDate", + table: "Users", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "UnsuspendDate", + table: "Users", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "SuspendAdminId", + table: "UserArtists", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "Suspended", + table: "UserArtists", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "SuspendedDate", + table: "UserArtists", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "SuspendedReason", + table: "UserArtists", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "UnsuspendDate", + table: "UserArtists", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "ArtistRequestId", + table: "Requests", + type: "integer", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_Requests_ArtistRequestId", + table: "Requests", + column: "ArtistRequestId"); + + migrationBuilder.AddForeignKey( + name: "FK_Requests_ArtistRequests_ArtistRequestId", + table: "Requests", + column: "ArtistRequestId", + principalTable: "ArtistRequests", + principalColumn: "Id"); + } + } +} diff --git a/src/comissions.app.api/Migrations/ApplicationDbContextModelSnapshot.cs b/src/comissions.app.api/Migrations/ApplicationDbContextModelSnapshot.cs index efd9697..1fa1167 100644 --- a/src/comissions.app.api/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/src/comissions.app.api/Migrations/ApplicationDbContextModelSnapshot.cs @@ -226,6 +226,9 @@ namespace comissions.app.api.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + b.Property("ArtistRequestId") + .HasColumnType("integer"); + b.Property("Message") .IsRequired() .HasColumnType("text"); @@ -239,11 +242,45 @@ namespace comissions.app.api.Migrations b.HasKey("Id"); + b.HasIndex("ArtistRequestId"); + b.HasIndex("UserId"); b.ToTable("ArtistRequestMessages"); }); + modelBuilder.Entity("comissions.app.database.Entities.Ban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text"); + + b.Property("UnbanDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Voided") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Bans"); + }); + modelBuilder.Entity("comissions.app.database.Entities.Request", b => { b.Property("Id") @@ -264,9 +301,6 @@ namespace comissions.app.api.Migrations b.Property("ArtistId") .HasColumnType("integer"); - b.Property("ArtistRequestId") - .HasColumnType("integer"); - b.Property("Completed") .HasColumnType("boolean"); @@ -315,8 +349,6 @@ namespace comissions.app.api.Migrations b.HasIndex("ArtistId"); - b.HasIndex("ArtistRequestId"); - b.HasIndex("UserId"); b.ToTable("Requests"); @@ -366,21 +398,45 @@ namespace comissions.app.api.Migrations b.ToTable("RequestReferences"); }); + modelBuilder.Entity("comissions.app.database.Entities.Suspension", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text"); + + b.Property("SuspensionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UnsuspensionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Voided") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Suspensions"); + }); + modelBuilder.Entity("comissions.app.database.Entities.User", b => { b.Property("Id") .HasColumnType("text"); - b.Property("BanAdminId") - .HasColumnType("text"); - - b.Property("Banned") - .HasColumnType("boolean"); - - b.Property("BannedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("BannedReason") + b.Property("AdminNotes") + .IsRequired() .HasColumnType("text"); b.Property("Biography") @@ -395,24 +451,6 @@ namespace comissions.app.api.Migrations .IsRequired() .HasColumnType("text"); - b.Property("SuspendAdminId") - .HasColumnType("text"); - - b.Property("Suspended") - .HasColumnType("boolean"); - - b.Property("SuspendedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SuspendedReason") - .HasColumnType("text"); - - b.Property("UnbanDate") - .HasColumnType("timestamp with time zone"); - - b.Property("UnsuspendDate") - .HasColumnType("timestamp with time zone"); - b.Property("UserArtistId") .HasColumnType("integer"); @@ -469,21 +507,6 @@ namespace comissions.app.api.Migrations b.Property("StripeAccountId") .HasColumnType("text"); - b.Property("SuspendAdminId") - .HasColumnType("text"); - - b.Property("Suspended") - .HasColumnType("boolean"); - - b.Property("SuspendedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SuspendedReason") - .HasColumnType("text"); - - b.Property("UnsuspendDate") - .HasColumnType("timestamp with time zone"); - b.Property("UserId") .IsRequired() .HasColumnType("text"); @@ -531,6 +554,10 @@ namespace comissions.app.api.Migrations modelBuilder.Entity("comissions.app.database.Entities.ArtistRequestMessage", b => { + b.HasOne("comissions.app.database.Entities.ArtistRequest", null) + .WithMany("ArtistRequestMessages") + .HasForeignKey("ArtistRequestId"); + b.HasOne("comissions.app.database.Entities.User", "User") .WithMany() .HasForeignKey("UserId") @@ -540,6 +567,17 @@ namespace comissions.app.api.Migrations b.Navigation("User"); }); + modelBuilder.Entity("comissions.app.database.Entities.Ban", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany("Bans") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + modelBuilder.Entity("comissions.app.database.Entities.Request", b => { b.HasOne("comissions.app.database.Entities.UserArtist", "Artist") @@ -548,12 +586,8 @@ namespace comissions.app.api.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("comissions.app.database.Entities.ArtistRequest", null) - .WithMany("Requests") - .HasForeignKey("ArtistRequestId"); - b.HasOne("comissions.app.database.Entities.User", "User") - .WithMany() + .WithMany("Requests") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -585,6 +619,17 @@ namespace comissions.app.api.Migrations b.Navigation("Request"); }); + modelBuilder.Entity("comissions.app.database.Entities.Suspension", b => + { + b.HasOne("comissions.app.database.Entities.User", "User") + .WithMany("Suspensions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + modelBuilder.Entity("comissions.app.database.Entities.UserArtist", b => { b.HasOne("comissions.app.database.Entities.User", "User") @@ -598,7 +643,7 @@ namespace comissions.app.api.Migrations modelBuilder.Entity("comissions.app.database.Entities.ArtistRequest", b => { - b.Navigation("Requests"); + b.Navigation("ArtistRequestMessages"); }); modelBuilder.Entity("comissions.app.database.Entities.Request", b => @@ -610,6 +655,12 @@ namespace comissions.app.api.Migrations modelBuilder.Entity("comissions.app.database.Entities.User", b => { + b.Navigation("Bans"); + + b.Navigation("Requests"); + + b.Navigation("Suspensions"); + b.Navigation("UserArtist"); }); diff --git a/src/comissions.app.api/Models/PenaltyModel.cs b/src/comissions.app.api/Models/PenaltyModel.cs index fafcd6e..6679b57 100644 --- a/src/comissions.app.api/Models/PenaltyModel.cs +++ b/src/comissions.app.api/Models/PenaltyModel.cs @@ -6,7 +6,6 @@ public class PenaltyModel { public DateTime Date { get; set; } public string Reason { get; set; } - public string Admin { get; set; } } public static class PenaltyModelExtensions @@ -17,7 +16,6 @@ public static class PenaltyModelExtensions { Date = ban.BanDate, Reason = ban.Reason, - Admin = ban.Admin.DisplayName }; } @@ -27,7 +25,6 @@ public static class PenaltyModelExtensions { Date = suspension.SuspensionDate, Reason = suspension.Reason, - Admin = suspension.Admin.DisplayName }; } } \ No newline at end of file