using System; using Microsoft.EntityFrameworkCore.Migrations; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace Shadow.Migrations { /// public partial class InitialMigration : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Artists", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), NormalizedName = table.Column(type: "text", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Artists", x => x.Id); }); migrationBuilder.CreateTable( name: "Genres", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), NormalizedName = table.Column(type: "text", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Genres", x => x.Id); }); migrationBuilder.CreateTable( name: "Users", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), NormalizedName = table.Column(type: "text", nullable: false), Password = table.Column(type: "text", nullable: false), Role = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Users", x => x.Id); }); migrationBuilder.CreateTable( name: "Albums", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), Uri = table.Column(type: "text", nullable: false), State = table.Column(type: "integer", nullable: false), ArtistId = table.Column(type: "integer", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Albums", x => x.Id); table.ForeignKey( name: "FK_Albums_Artists_ArtistId", column: x => x.ArtistId, principalTable: "Artists", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "Playlists", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), Uri = table.Column(type: "text", nullable: false), Description = table.Column(type: "text", nullable: false), CreatorId = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Playlists", x => x.Id); table.ForeignKey( name: "FK_Playlists_Users_CreatorId", column: x => x.CreatorId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Radios", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(type: "text", nullable: false), NormalizedName = table.Column(type: "text", nullable: false), Homepage = table.Column(type: "text", nullable: true), Url = table.Column(type: "text", nullable: false), UserId = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Radios", x => x.Id); table.ForeignKey( name: "FK_Radios_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AlbumInteractions", columns: table => new { AlbumId = table.Column(type: "integer", nullable: false), UserId = table.Column(type: "integer", nullable: false), Id = table.Column(type: "integer", nullable: false), PlayDate = table.Column(type: "timestamp with time zone", nullable: true), Starred = table.Column(type: "boolean", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AlbumInteractions", x => new { x.AlbumId, x.UserId }); table.ForeignKey( name: "FK_AlbumInteractions_Albums_AlbumId", column: x => x.AlbumId, principalTable: "Albums", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_AlbumInteractions_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Songs", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Title = table.Column(type: "text", nullable: false), Uri = table.Column(type: "text", nullable: false), Filepath = table.Column(type: "text", nullable: false), State = table.Column(type: "integer", nullable: false), Filetype = table.Column(type: "text", nullable: false), Date = table.Column(type: "timestamp with time zone", nullable: false), Duration = table.Column(type: "integer", nullable: false), Bitrate = table.Column(type: "integer", nullable: false), Size = table.Column(type: "integer", nullable: false), Comment = table.Column(type: "text", nullable: true), Channels = table.Column(type: "integer", nullable: false), SamplingRate = table.Column(type: "integer", nullable: false), BitDepth = table.Column(type: "integer", nullable: true), Index = table.Column(type: "integer", nullable: false), TrackNumber = table.Column(type: "integer", nullable: true), DiscNumber = table.Column(type: "integer", nullable: true), AlbumId = table.Column(type: "integer", nullable: false), ArtistId = table.Column(type: "integer", nullable: false), ImageId = table.Column(type: "integer", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Songs", x => x.Id); table.ForeignKey( name: "FK_Songs_Albums_AlbumId", column: x => x.AlbumId, principalTable: "Albums", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Songs_Artists_ArtistId", column: x => x.ArtistId, principalTable: "Artists", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "PlaylistUsers", columns: table => new { PlaylistId = table.Column(type: "integer", nullable: false), UserId = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_PlaylistUsers", x => new { x.PlaylistId, x.UserId }); table.ForeignKey( name: "FK_PlaylistUsers_Playlists_PlaylistId", column: x => x.PlaylistId, principalTable: "Playlists", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_PlaylistUsers_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "GenreSongs", columns: table => new { GenreId = table.Column(type: "integer", nullable: false), SongId = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_GenreSongs", x => new { x.GenreId, x.SongId }); table.ForeignKey( name: "FK_GenreSongs_Genres_GenreId", column: x => x.GenreId, principalTable: "Genres", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_GenreSongs_Songs_SongId", column: x => x.SongId, principalTable: "Songs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Images", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Uri = table.Column(type: "text", nullable: false), State = table.Column(type: "integer", nullable: false), SongId = table.Column(type: "integer", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Images", x => x.Id); table.ForeignKey( name: "FK_Images_Songs_SongId", column: x => x.SongId, principalTable: "Songs", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "PlaylistSongs", columns: table => new { PlaylistId = table.Column(type: "integer", nullable: false), SongId = table.Column(type: "integer", nullable: false), Index = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_PlaylistSongs", x => new { x.PlaylistId, x.SongId }); table.ForeignKey( name: "FK_PlaylistSongs_Playlists_PlaylistId", column: x => x.PlaylistId, principalTable: "Playlists", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_PlaylistSongs_Songs_SongId", column: x => x.SongId, principalTable: "Songs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "SongInteractions", columns: table => new { SongId = table.Column(type: "integer", nullable: false), UserId = table.Column(type: "integer", nullable: false), Id = table.Column(type: "integer", nullable: false), PlayCount = table.Column(type: "integer", nullable: false), Starred = table.Column(type: "boolean", nullable: true), Rating = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_SongInteractions", x => new { x.SongId, x.UserId }); table.ForeignKey( name: "FK_SongInteractions_Songs_SongId", column: x => x.SongId, principalTable: "Songs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_SongInteractions_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_AlbumInteractions_UserId", table: "AlbumInteractions", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_Albums_ArtistId", table: "Albums", column: "ArtistId"); migrationBuilder.CreateIndex( name: "IX_Albums_Uri", table: "Albums", column: "Uri", unique: true); migrationBuilder.CreateIndex( name: "IX_Artists_NormalizedName", table: "Artists", column: "NormalizedName", unique: true); migrationBuilder.CreateIndex( name: "IX_Genres_NormalizedName", table: "Genres", column: "NormalizedName", unique: true); migrationBuilder.CreateIndex( name: "IX_GenreSongs_SongId", table: "GenreSongs", column: "SongId"); migrationBuilder.CreateIndex( name: "IX_Images_SongId", table: "Images", column: "SongId", unique: true); migrationBuilder.CreateIndex( name: "IX_Playlists_CreatorId", table: "Playlists", column: "CreatorId"); migrationBuilder.CreateIndex( name: "IX_Playlists_Uri", table: "Playlists", column: "Uri", unique: true); migrationBuilder.CreateIndex( name: "IX_PlaylistSongs_SongId", table: "PlaylistSongs", column: "SongId"); migrationBuilder.CreateIndex( name: "IX_PlaylistUsers_UserId", table: "PlaylistUsers", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_Radios_NormalizedName", table: "Radios", column: "NormalizedName", unique: true); migrationBuilder.CreateIndex( name: "IX_Radios_UserId", table: "Radios", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_SongInteractions_UserId", table: "SongInteractions", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_Songs_AlbumId", table: "Songs", column: "AlbumId"); migrationBuilder.CreateIndex( name: "IX_Songs_ArtistId", table: "Songs", column: "ArtistId"); migrationBuilder.CreateIndex( name: "IX_Songs_Uri", table: "Songs", column: "Uri", unique: true); migrationBuilder.CreateIndex( name: "IX_Users_Name", table: "Users", column: "Name", unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "AlbumInteractions"); migrationBuilder.DropTable( name: "GenreSongs"); migrationBuilder.DropTable( name: "Images"); migrationBuilder.DropTable( name: "PlaylistSongs"); migrationBuilder.DropTable( name: "PlaylistUsers"); migrationBuilder.DropTable( name: "Radios"); migrationBuilder.DropTable( name: "SongInteractions"); migrationBuilder.DropTable( name: "Genres"); migrationBuilder.DropTable( name: "Playlists"); migrationBuilder.DropTable( name: "Songs"); migrationBuilder.DropTable( name: "Users"); migrationBuilder.DropTable( name: "Albums"); migrationBuilder.DropTable( name: "Artists"); } } }