using System; using Microsoft.EntityFrameworkCore.Migrations; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace Socialize.Api.Migrations { /// public partial class Initial : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "ApprovalDecisions", columns: table => new { Id = table.Column(type: "uuid", nullable: false), ApprovalRequestId = table.Column(type: "uuid", nullable: false), Decision = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), Comment = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), DecidedByUserId = table.Column(type: "uuid", nullable: true), DecidedByName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), DecidedByEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_ApprovalDecisions", x => x.Id); }); migrationBuilder.CreateTable( name: "ApprovalRequests", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ContentItemId = table.Column(type: "uuid", nullable: false), Stage = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), ReviewerName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), ReviewerEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), RequestedByUserId = table.Column(type: "uuid", nullable: false), DueAt = table.Column(type: "timestamp with time zone", nullable: true), State = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), AccessToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), SentAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP"), CompletedAt = table.Column(type: "timestamp with time zone", nullable: true) }, constraints: table => { table.PrimaryKey("PK_ApprovalRequests", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetRoles", columns: table => new { Id = table.Column(type: "uuid", nullable: false), Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), ConcurrencyStamp = table.Column(type: "text", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoles", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetUsers", columns: table => new { Id = table.Column(type: "uuid", nullable: false), Alias = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), Firstname = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), Lastname = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), BirthDate = table.Column(type: "timestamp with time zone", nullable: true), Address = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), PortraitUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), GoogleId = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), FacebookId = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), RefreshToken = table.Column(type: "character varying(44)", maxLength: 44, nullable: true), RefreshTokenExpiryTime = table.Column(type: "timestamp with time zone", nullable: false), UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), EmailConfirmed = table.Column(type: "boolean", nullable: false), PasswordHash = table.Column(type: "text", nullable: true), SecurityStamp = table.Column(type: "text", nullable: true), ConcurrencyStamp = table.Column(type: "text", nullable: true), PhoneNumber = table.Column(type: "text", nullable: true), PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), TwoFactorEnabled = table.Column(type: "boolean", nullable: false), LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), LockoutEnabled = table.Column(type: "boolean", nullable: false), AccessFailedCount = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); }); migrationBuilder.CreateTable( name: "AssetRevisions", columns: table => new { Id = table.Column(type: "uuid", nullable: false), AssetId = table.Column(type: "uuid", nullable: false), RevisionNumber = table.Column(type: "integer", nullable: false), SourceReference = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: false), PreviewUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), Notes = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), CreatedByUserId = table.Column(type: "uuid", nullable: true), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_AssetRevisions", x => x.Id); }); migrationBuilder.CreateTable( name: "Assets", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ContentItemId = table.Column(type: "uuid", nullable: false), AssetType = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), SourceType = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), GoogleDriveFileId = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), GoogleDriveLink = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), PreviewUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), CurrentRevisionNumber = table.Column(type: "integer", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_Assets", x => x.Id); }); migrationBuilder.CreateTable( name: "Clients", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), Status = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), PortraitUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), PrimaryContactName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), PrimaryContactEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), PrimaryContactPortraitUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_Clients", x => x.Id); }); migrationBuilder.CreateTable( name: "Comments", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ContentItemId = table.Column(type: "uuid", nullable: false), ParentCommentId = table.Column(type: "uuid", nullable: true), AuthorUserId = table.Column(type: "uuid", nullable: false), AuthorDisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), AuthorEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), Body = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), IsResolved = table.Column(type: "boolean", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP"), ResolvedAt = table.Column(type: "timestamp with time zone", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Comments", x => x.Id); }); migrationBuilder.CreateTable( name: "ContentItemRevisions", columns: table => new { Id = table.Column(type: "uuid", nullable: false), ContentItemId = table.Column(type: "uuid", nullable: false), RevisionNumber = table.Column(type: "integer", nullable: false), RevisionLabel = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), Title = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), PublicationMessage = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), PublicationTargets = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), Hashtags = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), ChangeSummary = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), CreatedByUserId = table.Column(type: "uuid", nullable: true), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_ContentItemRevisions", x => x.Id); }); migrationBuilder.CreateTable( name: "ContentItems", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ClientId = table.Column(type: "uuid", nullable: false), ProjectId = table.Column(type: "uuid", nullable: false), Title = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), PublicationMessage = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), PublicationTargets = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), Hashtags = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), Status = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), DueDate = table.Column(type: "timestamp with time zone", nullable: true), CurrentRevisionLabel = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), CurrentRevisionNumber = table.Column(type: "integer", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_ContentItems", x => x.Id); }); migrationBuilder.CreateTable( name: "NotificationEvents", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ContentItemId = table.Column(type: "uuid", nullable: true), EventType = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), EntityType = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), EntityId = table.Column(type: "uuid", nullable: false), Message = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false), RecipientUserId = table.Column(type: "uuid", nullable: true), RecipientEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), MetadataJson = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP"), ReadAt = table.Column(type: "timestamp with time zone", nullable: true) }, constraints: table => { table.PrimaryKey("PK_NotificationEvents", x => x.Id); }); migrationBuilder.CreateTable( name: "Projects", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), ClientId = table.Column(type: "uuid", nullable: false), Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), Status = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), StartDate = table.Column(type: "timestamp with time zone", nullable: false), EndDate = table.Column(type: "timestamp with time zone", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_Projects", x => x.Id); }); migrationBuilder.CreateTable( name: "WorkspaceInvites", columns: table => new { Id = table.Column(type: "uuid", nullable: false), WorkspaceId = table.Column(type: "uuid", nullable: false), Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), Role = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), Status = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), InvitedByUserId = table.Column(type: "uuid", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_WorkspaceInvites", x => x.Id); }); migrationBuilder.CreateTable( name: "Workspaces", columns: table => new { Id = table.Column(type: "uuid", nullable: false), Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), Slug = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), OwnerUserId = table.Column(type: "uuid", nullable: false), TimeZone = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP") }, constraints: table => { table.PrimaryKey("PK_Workspaces", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetRoleClaims", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), RoleId = table.Column(type: "uuid", nullable: false), ClaimType = table.Column(type: "text", nullable: true), ClaimValue = table.Column(type: "text", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserClaims", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), UserId = table.Column(type: "uuid", nullable: false), ClaimType = table.Column(type: "text", nullable: true), ClaimValue = table.Column(type: "text", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetUserClaims_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserLogins", columns: table => new { LoginProvider = table.Column(type: "text", nullable: false), ProviderKey = table.Column(type: "text", nullable: false), ProviderDisplayName = table.Column(type: "text", nullable: true), UserId = table.Column(type: "uuid", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); table.ForeignKey( name: "FK_AspNetUserLogins_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserRoles", columns: table => new { UserId = table.Column(type: "uuid", nullable: false), RoleId = table.Column(type: "uuid", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserTokens", columns: table => new { UserId = table.Column(type: "uuid", nullable: false), LoginProvider = table.Column(type: "text", nullable: false), Name = table.Column(type: "text", nullable: false), Value = table.Column(type: "text", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); table.ForeignKey( name: "FK_AspNetUserTokens_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_ApprovalDecisions_ApprovalRequestId", table: "ApprovalDecisions", column: "ApprovalRequestId"); migrationBuilder.CreateIndex( name: "IX_ApprovalRequests_ContentItemId", table: "ApprovalRequests", column: "ContentItemId"); migrationBuilder.CreateIndex( name: "IX_ApprovalRequests_ReviewerEmail", table: "ApprovalRequests", column: "ReviewerEmail"); migrationBuilder.CreateIndex( name: "IX_ApprovalRequests_WorkspaceId", table: "ApprovalRequests", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", column: "RoleId"); migrationBuilder.CreateIndex( name: "RoleNameIndex", table: "AspNetRoles", column: "NormalizedName", unique: true); migrationBuilder.CreateIndex( name: "IX_AspNetUserClaims_UserId", table: "AspNetUserClaims", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserLogins_UserId", table: "AspNetUserLogins", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserRoles_RoleId", table: "AspNetUserRoles", column: "RoleId"); migrationBuilder.CreateIndex( name: "EmailIndex", table: "AspNetUsers", column: "NormalizedEmail"); migrationBuilder.CreateIndex( name: "UserNameIndex", table: "AspNetUsers", column: "NormalizedUserName", unique: true); migrationBuilder.CreateIndex( name: "IX_AssetRevisions_AssetId", table: "AssetRevisions", column: "AssetId"); migrationBuilder.CreateIndex( name: "IX_AssetRevisions_AssetId_RevisionNumber", table: "AssetRevisions", columns: new[] { "AssetId", "RevisionNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Assets_ContentItemId", table: "Assets", column: "ContentItemId"); migrationBuilder.CreateIndex( name: "IX_Assets_WorkspaceId", table: "Assets", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_Clients_WorkspaceId", table: "Clients", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_Clients_WorkspaceId_Name", table: "Clients", columns: new[] { "WorkspaceId", "Name" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Comments_ContentItemId", table: "Comments", column: "ContentItemId"); migrationBuilder.CreateIndex( name: "IX_Comments_ParentCommentId", table: "Comments", column: "ParentCommentId"); migrationBuilder.CreateIndex( name: "IX_Comments_WorkspaceId", table: "Comments", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_ContentItemRevisions_ContentItemId", table: "ContentItemRevisions", column: "ContentItemId"); migrationBuilder.CreateIndex( name: "IX_ContentItemRevisions_ContentItemId_RevisionNumber", table: "ContentItemRevisions", columns: new[] { "ContentItemId", "RevisionNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_ContentItems_ClientId", table: "ContentItems", column: "ClientId"); migrationBuilder.CreateIndex( name: "IX_ContentItems_ProjectId", table: "ContentItems", column: "ProjectId"); migrationBuilder.CreateIndex( name: "IX_ContentItems_WorkspaceId", table: "ContentItems", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_NotificationEvents_ContentItemId", table: "NotificationEvents", column: "ContentItemId"); migrationBuilder.CreateIndex( name: "IX_NotificationEvents_CreatedAt", table: "NotificationEvents", column: "CreatedAt"); migrationBuilder.CreateIndex( name: "IX_NotificationEvents_RecipientUserId", table: "NotificationEvents", column: "RecipientUserId"); migrationBuilder.CreateIndex( name: "IX_NotificationEvents_WorkspaceId", table: "NotificationEvents", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_Projects_ClientId", table: "Projects", column: "ClientId"); migrationBuilder.CreateIndex( name: "IX_Projects_ClientId_Name", table: "Projects", columns: new[] { "ClientId", "Name" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Projects_WorkspaceId", table: "Projects", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_WorkspaceInvites_WorkspaceId", table: "WorkspaceInvites", column: "WorkspaceId"); migrationBuilder.CreateIndex( name: "IX_WorkspaceInvites_WorkspaceId_Email_Status", table: "WorkspaceInvites", columns: new[] { "WorkspaceId", "Email", "Status" }); migrationBuilder.CreateIndex( name: "IX_Workspaces_OwnerUserId", table: "Workspaces", column: "OwnerUserId"); migrationBuilder.CreateIndex( name: "IX_Workspaces_Slug", table: "Workspaces", column: "Slug", unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "ApprovalDecisions"); migrationBuilder.DropTable( name: "ApprovalRequests"); migrationBuilder.DropTable( name: "AspNetRoleClaims"); migrationBuilder.DropTable( name: "AspNetUserClaims"); migrationBuilder.DropTable( name: "AspNetUserLogins"); migrationBuilder.DropTable( name: "AspNetUserRoles"); migrationBuilder.DropTable( name: "AspNetUserTokens"); migrationBuilder.DropTable( name: "AssetRevisions"); migrationBuilder.DropTable( name: "Assets"); migrationBuilder.DropTable( name: "Clients"); migrationBuilder.DropTable( name: "Comments"); migrationBuilder.DropTable( name: "ContentItemRevisions"); migrationBuilder.DropTable( name: "ContentItems"); migrationBuilder.DropTable( name: "NotificationEvents"); migrationBuilder.DropTable( name: "Projects"); migrationBuilder.DropTable( name: "WorkspaceInvites"); migrationBuilder.DropTable( name: "Workspaces"); migrationBuilder.DropTable( name: "AspNetRoles"); migrationBuilder.DropTable( name: "AspNetUsers"); } } }