using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Govor.Data.Migrations { /// public partial class InitialCreate : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AlterDatabase() .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "ChatGroups", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Name = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), InviteCode = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), IsChannel = table.Column(type: "tinyint(1)", nullable: false), IsPrivate = table.Column(type: "tinyint(1)", nullable: false), Admins = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4") }, constraints: table => { table.PrimaryKey("PK_ChatGroups", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "GroupAdmins", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), GroupId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") }, constraints: table => { table.PrimaryKey("PK_GroupAdmins", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "GroupMemberships", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), GroupId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), IsBanned = table.Column(type: "tinyint(1)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_GroupMemberships", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "Invitations", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), IsAdmin = table.Column(type: "tinyint(1)", nullable: false), IsActive = table.Column(type: "tinyint(1)", nullable: false), Code = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Description = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), DateCreated = table.Column(type: "datetime(6)", nullable: false), EndDate = table.Column(type: "datetime(6)", nullable: false), MaxParticipants = table.Column(type: "int", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Invitations", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "PrivateChats", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserAId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserBId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") }, constraints: table => { table.PrimaryKey("PK_PrivateChats", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "Users", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Username = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Description = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), PasswordHash = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), IconId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), CreatedOn = table.Column(type: "date", nullable: false), WasOnline = table.Column(type: "datetime(6)", nullable: false), InviteId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") }, constraints: table => { table.PrimaryKey("PK_Users", x => x.Id); table.ForeignKey( name: "FK_Users_Invitations_InviteId", column: x => x.InviteId, principalTable: "Invitations", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "Messages", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), SenderId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), RecipientId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), RecipientType = table.Column(type: "int", nullable: false), EncryptedContent = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), SentAt = table.Column(type: "datetime(6)", nullable: false), IsEdited = table.Column(type: "tinyint(1)", nullable: false), EditedAt = table.Column(type: "datetime(6)", nullable: true), ReplyToMessageId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), PrivateChatId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") }, constraints: table => { table.PrimaryKey("PK_Messages", x => x.Id); table.ForeignKey( name: "FK_Messages_Messages_ReplyToMessageId", column: x => x.ReplyToMessageId, principalTable: "Messages", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Messages_PrivateChats_PrivateChatId", column: x => x.PrivateChatId, principalTable: "PrivateChats", principalColumn: "Id"); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "Admins", columns: table => new { UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") }, constraints: table => { table.PrimaryKey("PK_Admins", x => x.UserId); table.ForeignKey( name: "FK_Admins_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "Friendships", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), RequesterId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), AddresseeId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Status = table.Column(type: "int", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Friendships", x => x.Id); table.ForeignKey( name: "FK_Friendships_Users_AddresseeId", column: x => x.AddresseeId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Friendships_Users_RequesterId", column: x => x.RequesterId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "MediaAttachments", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), MessageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Type = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), FilePath = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), MimeType = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), EncryptedKey = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) .Annotation("MySql:CharSet", "utf8mb4") }, constraints: table => { table.PrimaryKey("PK_MediaAttachments", x => x.Id); table.ForeignKey( name: "FK_MediaAttachments_Messages_MessageId", column: x => x.MessageId, principalTable: "Messages", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "MessageReactions", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), MessageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), ReactionCode = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), ReactedAt = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_MessageReactions", x => x.Id); table.ForeignKey( name: "FK_MessageReactions_Messages_MessageId", column: x => x.MessageId, principalTable: "Messages", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_MessageReactions_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "MessageViews", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), MessageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), ViewedAt = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_MessageViews", x => x.Id); table.ForeignKey( name: "FK_MessageViews_Messages_MessageId", column: x => x.MessageId, principalTable: "Messages", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateIndex( name: "IX_Friendships_AddresseeId", table: "Friendships", column: "AddresseeId"); migrationBuilder.CreateIndex( name: "IX_Friendships_RequesterId", table: "Friendships", column: "RequesterId"); migrationBuilder.CreateIndex( name: "IX_MediaAttachments_MessageId", table: "MediaAttachments", column: "MessageId"); migrationBuilder.CreateIndex( name: "IX_MessageReactions_MessageId_UserId", table: "MessageReactions", columns: new[] { "MessageId", "UserId" }, unique: true); migrationBuilder.CreateIndex( name: "IX_MessageReactions_UserId", table: "MessageReactions", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_Messages_PrivateChatId", table: "Messages", column: "PrivateChatId"); migrationBuilder.CreateIndex( name: "IX_Messages_ReplyToMessageId", table: "Messages", column: "ReplyToMessageId"); migrationBuilder.CreateIndex( name: "IX_MessageViews_MessageId_UserId", table: "MessageViews", columns: new[] { "MessageId", "UserId" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Users_InviteId", table: "Users", column: "InviteId"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "Admins"); migrationBuilder.DropTable( name: "ChatGroups"); migrationBuilder.DropTable( name: "Friendships"); migrationBuilder.DropTable( name: "GroupAdmins"); migrationBuilder.DropTable( name: "GroupMemberships"); migrationBuilder.DropTable( name: "MediaAttachments"); migrationBuilder.DropTable( name: "MessageReactions"); migrationBuilder.DropTable( name: "MessageViews"); migrationBuilder.DropTable( name: "Users"); migrationBuilder.DropTable( name: "Messages"); migrationBuilder.DropTable( name: "Invitations"); migrationBuilder.DropTable( name: "PrivateChats"); } } }