feat: database migration

This commit is contained in:
Damien Ostler 2024-03-09 22:45:04 -05:00
parent 40653eff04
commit fa58ce555c
9 changed files with 1112 additions and 78 deletions

View File

@ -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

View File

@ -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; }
}

View File

@ -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; }
}
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; }
}

View File

@ -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<Request> Requests { get; set; } = new List<Request>();
[JsonIgnore] public virtual ICollection<Suspension> Suspensions { get; set; } = new List<Suspension>();

View File

@ -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;
}

View File

@ -0,0 +1,682 @@
// <auto-generated />
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
{
/// <inheritdoc />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("ArtistId")
.HasColumnType("integer");
b.Property<string>("BackgroundColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("DescriptionBackgroundColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("DescriptionHeaderColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("DescriptionHeaderImageUrl")
.IsRequired()
.HasColumnType("text");
b.Property<int>("DescriptionHeaderSize")
.HasColumnType("integer");
b.Property<string>("DescriptionHeaderText")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("DescriptionHeaderUseImage")
.HasColumnType("boolean");
b.Property<string>("DescriptionTextColor")
.IsRequired()
.HasColumnType("text");
b.Property<int>("DescriptionTextSize")
.HasColumnType("integer");
b.Property<string>("HeaderColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("HeaderImageUrl")
.IsRequired()
.HasColumnType("text");
b.Property<int>("HeaderTextSize")
.HasColumnType("integer");
b.Property<bool>("HeaderUseImage")
.HasColumnType("boolean");
b.Property<string>("PortfolioBackgroundColor")
.IsRequired()
.HasColumnType("text");
b.Property<int>("PortfolioColumns")
.HasColumnType("integer");
b.Property<bool>("PortfolioEnabledScrolling")
.HasColumnType("boolean");
b.Property<bool>("PortfolioMasonry")
.HasColumnType("boolean");
b.Property<int>("PortfolioMaximumSize")
.HasColumnType("integer");
b.Property<string>("PortfolionHeaderColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PortfolionHeaderImageUrl")
.IsRequired()
.HasColumnType("text");
b.Property<int>("PortfolionHeaderSize")
.HasColumnType("integer");
b.Property<string>("PortfolionHeaderText")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("PortfolionHeaderUseImage")
.HasColumnType("boolean");
b.Property<string>("RequestBackgroundColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestButtonBGColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestButtonHoverBGColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestButtonHoverTextColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestButtonTextColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestHeaderColor")
.IsRequired()
.HasColumnType("text");
b.Property<string>("RequestHeaderImageUrl")
.IsRequired()
.HasColumnType("text");
b.Property<int>("RequestHeaderSize")
.HasColumnType("integer");
b.Property<string>("RequestHeaderText")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("RequestHeaderUseImage")
.HasColumnType("boolean");
b.Property<string>("RequestTermsColor")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtistId")
.IsUnique();
b.ToTable("ArtistPageSettings");
});
modelBuilder.Entity("comissions.app.database.Entities.ArtistPortfolioPiece", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("ArtistId")
.HasColumnType("integer");
b.Property<string>("FileReference")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtistId");
b.ToTable("ArtistPortfolioPieces");
});
modelBuilder.Entity("comissions.app.database.Entities.ArtistRequest", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<bool>("Accepted")
.HasColumnType("boolean");
b.Property<DateTime?>("AcceptedDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("Message")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RequestDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("ArtistRequests");
});
modelBuilder.Entity("comissions.app.database.Entities.ArtistRequestMessage", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtistRequestId")
.HasColumnType("integer");
b.Property<string>("Message")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("SentDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("BanDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("Reason")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("UnbanDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Voided")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Bans");
});
modelBuilder.Entity("comissions.app.database.Entities.Request", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<bool>("Accepted")
.HasColumnType("boolean");
b.Property<DateTime?>("AcceptedDate")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("Amount")
.HasColumnType("numeric");
b.Property<int>("ArtistId")
.HasColumnType("integer");
b.Property<bool>("Completed")
.HasColumnType("boolean");
b.Property<DateTime?>("CompletedDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("Declined")
.HasColumnType("boolean");
b.Property<DateTime?>("DeclinedDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("Message")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Paid")
.HasColumnType("boolean");
b.Property<DateTime?>("PaidDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("PaymentUrl")
.HasColumnType("text");
b.Property<double?>("Rating")
.HasColumnType("double precision");
b.Property<DateTime>("RequestDate")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("ReviewDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("ReviewMessage")
.HasColumnType("text");
b.Property<bool>("Reviewed")
.HasColumnType("boolean");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FileReference")
.IsRequired()
.HasColumnType("text");
b.Property<int>("RequestId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("RequestId");
b.ToTable("RequestAssets");
});
modelBuilder.Entity("comissions.app.database.Entities.RequestReference", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FileReference")
.IsRequired()
.HasColumnType("text");
b.Property<int>("RequestId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("RequestId");
b.ToTable("RequestReferences");
});
modelBuilder.Entity("comissions.app.database.Entities.Suspension", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Reason")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("SuspensionDate")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("UnsuspensionDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Voided")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Suspensions");
});
modelBuilder.Entity("comissions.app.database.Entities.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AdminNotes")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Biography")
.IsRequired()
.HasColumnType("text");
b.Property<string>("DisplayName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("UserArtistId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Users");
});
modelBuilder.Entity("comissions.app.database.Entities.UserArtist", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<bool>("AgeRestricted")
.HasColumnType("boolean");
b.Property<int>("ArtistPageSettingsId")
.HasColumnType("integer");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("PrepaymentRequired")
.HasColumnType("boolean");
b.Property<string>("RequestGuidelines")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SocialMediaLink1")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SocialMediaLink2")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SocialMediaLink3")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SocialMediaLink4")
.IsRequired()
.HasColumnType("text");
b.Property<string>("StripeAccountId")
.HasColumnType("text");
b.Property<string>("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
}
}
}

View File

@ -0,0 +1,306 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace comissions.app.api.Migrations
{
/// <inheritdoc />
public partial class moarr : Migration
{
/// <inheritdoc />
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<string>(
name: "AdminNotes",
table: "Users",
type: "text",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<int>(
name: "ArtistRequestId",
table: "ArtistRequestMessages",
type: "integer",
nullable: true);
migrationBuilder.CreateTable(
name: "Bans",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column<string>(type: "text", nullable: false),
BanDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
UnbanDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
Voided = table.Column<bool>(type: "boolean", nullable: false),
Reason = table.Column<string>(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<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column<string>(type: "text", nullable: false),
SuspensionDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
UnsuspensionDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
Voided = table.Column<bool>(type: "boolean", nullable: false),
Reason = table.Column<string>(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");
}
/// <inheritdoc />
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<string>(
name: "BanAdminId",
table: "Users",
type: "text",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "Banned",
table: "Users",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<DateTime>(
name: "BannedDate",
table: "Users",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "BannedReason",
table: "Users",
type: "text",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SuspendAdminId",
table: "Users",
type: "text",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "Suspended",
table: "Users",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<DateTime>(
name: "SuspendedDate",
table: "Users",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SuspendedReason",
table: "Users",
type: "text",
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "UnbanDate",
table: "Users",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "UnsuspendDate",
table: "Users",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SuspendAdminId",
table: "UserArtists",
type: "text",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "Suspended",
table: "UserArtists",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<DateTime>(
name: "SuspendedDate",
table: "UserArtists",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SuspendedReason",
table: "UserArtists",
type: "text",
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "UnsuspendDate",
table: "UserArtists",
type: "timestamp with time zone",
nullable: true);
migrationBuilder.AddColumn<int>(
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");
}
}
}

View File

@ -226,6 +226,9 @@ namespace comissions.app.api.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtistRequestId")
.HasColumnType("integer");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("BanDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("Reason")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("UnbanDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Voided")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Bans");
});
modelBuilder.Entity("comissions.app.database.Entities.Request", b =>
{
b.Property<int>("Id")
@ -264,9 +301,6 @@ namespace comissions.app.api.Migrations
b.Property<int>("ArtistId")
.HasColumnType("integer");
b.Property<int?>("ArtistRequestId")
.HasColumnType("integer");
b.Property<bool>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Reason")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("SuspensionDate")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("UnsuspensionDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Voided")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Suspensions");
});
modelBuilder.Entity("comissions.app.database.Entities.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BanAdminId")
.HasColumnType("text");
b.Property<bool>("Banned")
.HasColumnType("boolean");
b.Property<DateTime?>("BannedDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("BannedReason")
b.Property<string>("AdminNotes")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Biography")
@ -395,24 +451,6 @@ namespace comissions.app.api.Migrations
.IsRequired()
.HasColumnType("text");
b.Property<string>("SuspendAdminId")
.HasColumnType("text");
b.Property<bool>("Suspended")
.HasColumnType("boolean");
b.Property<DateTime?>("SuspendedDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("SuspendedReason")
.HasColumnType("text");
b.Property<DateTime?>("UnbanDate")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("UnsuspendDate")
.HasColumnType("timestamp with time zone");
b.Property<int?>("UserArtistId")
.HasColumnType("integer");
@ -469,21 +507,6 @@ namespace comissions.app.api.Migrations
b.Property<string>("StripeAccountId")
.HasColumnType("text");
b.Property<string>("SuspendAdminId")
.HasColumnType("text");
b.Property<bool>("Suspended")
.HasColumnType("boolean");
b.Property<DateTime?>("SuspendedDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("SuspendedReason")
.HasColumnType("text");
b.Property<DateTime?>("UnsuspendDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("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");
});

View File

@ -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
};
}
}