using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Govor.Data.Migrations { /// public partial class MessagesInit : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Messages", columns: table => new { Id = table.Column(type: "uuid", nullable: false), SenderId = table.Column(type: "uuid", nullable: false), RecipientId = table.Column(type: "uuid", nullable: false), RecipientType = table.Column(type: "integer", nullable: false), EncryptedContent = table.Column(type: "text", nullable: false), SentAt = table.Column(type: "timestamp with time zone", nullable: false), IsEdited = table.Column(type: "boolean", nullable: false), EditedAt = table.Column(type: "timestamp with time zone", nullable: true), ReplyToMessageId = table.Column(type: "uuid", nullable: true) }, 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); }); migrationBuilder.CreateTable( name: "MediaAttachments", columns: table => new { Id = table.Column(type: "uuid", nullable: false), MessageId = table.Column(type: "uuid", nullable: false), Type = table.Column(type: "text", nullable: false), FilePath = table.Column(type: "text", nullable: false), MimeType = table.Column(type: "text", nullable: false), EncryptedKey = table.Column(type: "character varying(512)", maxLength: 512, nullable: true) }, 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); }); migrationBuilder.CreateTable( name: "MessageReactions", columns: table => new { Id = table.Column(type: "uuid", nullable: false), MessageId = table.Column(type: "uuid", nullable: false), UserId = table.Column(type: "uuid", nullable: false), ReactionCode = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), ReactedAt = table.Column(type: "timestamp with time zone", 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); }); migrationBuilder.CreateTable( name: "MessageViews", columns: table => new { Id = table.Column(type: "uuid", nullable: false), MessageId = table.Column(type: "uuid", nullable: false), UserId = table.Column(type: "uuid", nullable: false), ViewedAt = table.Column(type: "timestamp with time zone", 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); }); 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_ReplyToMessageId", table: "Messages", column: "ReplyToMessageId"); migrationBuilder.CreateIndex( name: "IX_MessageViews_MessageId_UserId", table: "MessageViews", columns: new[] { "MessageId", "UserId" }, unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "MediaAttachments"); migrationBuilder.DropTable( name: "MessageReactions"); migrationBuilder.DropTable( name: "MessageViews"); migrationBuilder.DropTable( name: "Messages"); } } }