From 135a554bc5412ed6a9c94beadf9a63b7a73ca550 Mon Sep 17 00:00:00 2001 From: Noi Date: Sat, 19 Mar 2022 14:51:41 -0700 Subject: [PATCH] Add migrations --- BirthdayBot.csproj | 5 + .../20220319195852_InitialEFSetup.Designer.cs | 160 ++++++++++++++++++ .../20220319195852_InitialEFSetup.cs | 89 ++++++++++ .../BotDatabaseContextModelSnapshot.cs | 158 +++++++++++++++++ Program.cs | 13 +- 5 files changed, 421 insertions(+), 4 deletions(-) create mode 100644 Data/Migrations/20220319195852_InitialEFSetup.Designer.cs create mode 100644 Data/Migrations/20220319195852_InitialEFSetup.cs create mode 100644 Data/Migrations/BotDatabaseContextModelSnapshot.cs diff --git a/BirthdayBot.csproj b/BirthdayBot.csproj index 3a6427a..176c04d 100644 --- a/BirthdayBot.csproj +++ b/BirthdayBot.csproj @@ -24,11 +24,16 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/Data/Migrations/20220319195852_InitialEFSetup.Designer.cs b/Data/Migrations/20220319195852_InitialEFSetup.Designer.cs new file mode 100644 index 0000000..2f3f57b --- /dev/null +++ b/Data/Migrations/20220319195852_InitialEFSetup.Designer.cs @@ -0,0 +1,160 @@ +// +using System; +using BirthdayBot.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace BirthdayBot.Data.Migrations +{ + [DbContext(typeof(BotDatabaseContext))] + [Migration("20220319195852_InitialEFSetup")] + partial class InitialEFSetup + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("BirthdayBot.Data.BlocklistEntry", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("UserId") + .HasColumnType("bigint") + .HasColumnName("user_id"); + + b.HasKey("GuildId", "UserId") + .HasName("banned_users_pkey"); + + b.ToTable("banned_users", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.GuildConfig", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("AnnounceMessage") + .HasColumnType("text") + .HasColumnName("announce_message"); + + b.Property("AnnounceMessagePl") + .HasColumnType("text") + .HasColumnName("announce_message_pl"); + + b.Property("AnnouncePing") + .HasColumnType("boolean") + .HasColumnName("announce_ping"); + + b.Property("ChannelAnnounceId") + .HasColumnType("bigint") + .HasColumnName("channel_announce_id"); + + b.Property("LastSeen") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen") + .HasDefaultValueSql("now()"); + + b.Property("Moderated") + .HasColumnType("boolean") + .HasColumnName("moderated"); + + b.Property("ModeratorRole") + .HasColumnType("bigint") + .HasColumnName("moderator_role"); + + b.Property("RoleId") + .HasColumnType("bigint") + .HasColumnName("role_id"); + + b.Property("TimeZone") + .HasColumnType("text") + .HasColumnName("time_zone"); + + b.HasKey("GuildId") + .HasName("settings_pkey"); + + b.ToTable("settings", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.UserEntry", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("UserId") + .HasColumnType("bigint") + .HasColumnName("user_id"); + + b.Property("BirthDay") + .HasColumnType("integer") + .HasColumnName("birth_day"); + + b.Property("BirthMonth") + .HasColumnType("integer") + .HasColumnName("birth_month"); + + b.Property("LastSeen") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen") + .HasDefaultValueSql("now()"); + + b.Property("TimeZone") + .HasColumnType("text") + .HasColumnName("time_zone"); + + b.HasKey("GuildId", "UserId") + .HasName("user_birthdays_pkey"); + + b.ToTable("user_birthdays", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.BlocklistEntry", b => + { + b.HasOne("BirthdayBot.Data.GuildConfig", "Guild") + .WithMany("BlockedUsers") + .HasForeignKey("GuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("banned_users_guild_id_fkey"); + + b.Navigation("Guild"); + }); + + modelBuilder.Entity("BirthdayBot.Data.UserEntry", b => + { + b.HasOne("BirthdayBot.Data.GuildConfig", "Guild") + .WithMany("UserEntries") + .HasForeignKey("GuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("user_birthdays_guild_id_fkey"); + + b.Navigation("Guild"); + }); + + modelBuilder.Entity("BirthdayBot.Data.GuildConfig", b => + { + b.Navigation("BlockedUsers"); + + b.Navigation("UserEntries"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Data/Migrations/20220319195852_InitialEFSetup.cs b/Data/Migrations/20220319195852_InitialEFSetup.cs new file mode 100644 index 0000000..a3b13b0 --- /dev/null +++ b/Data/Migrations/20220319195852_InitialEFSetup.cs @@ -0,0 +1,89 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +// command used: +// dotnet ef migrations add InitialEFSetup --output-dir Data/Migrations +// (don't forget to replace with a proper migration name) + +#nullable disable + +namespace BirthdayBot.Data.Migrations +{ + public partial class InitialEFSetup : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "settings", + columns: table => new + { + guild_id = table.Column(type: "bigint", nullable: false), + role_id = table.Column(type: "bigint", nullable: true), + channel_announce_id = table.Column(type: "bigint", nullable: true), + time_zone = table.Column(type: "text", nullable: true), + moderated = table.Column(type: "boolean", nullable: false), + moderator_role = table.Column(type: "bigint", nullable: true), + announce_message = table.Column(type: "text", nullable: true), + announce_message_pl = table.Column(type: "text", nullable: true), + announce_ping = table.Column(type: "boolean", nullable: false), + last_seen = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()") + }, + constraints: table => + { + table.PrimaryKey("settings_pkey", x => x.guild_id); + }); + + migrationBuilder.CreateTable( + name: "banned_users", + columns: table => new + { + guild_id = table.Column(type: "bigint", nullable: false), + user_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("banned_users_pkey", x => new { x.guild_id, x.user_id }); + table.ForeignKey( + name: "banned_users_guild_id_fkey", + column: x => x.guild_id, + principalTable: "settings", + principalColumn: "guild_id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_birthdays", + columns: table => new + { + guild_id = table.Column(type: "bigint", nullable: false), + user_id = table.Column(type: "bigint", nullable: false), + birth_month = table.Column(type: "integer", nullable: false), + birth_day = table.Column(type: "integer", nullable: false), + time_zone = table.Column(type: "text", nullable: true), + last_seen = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()") + }, + constraints: table => + { + table.PrimaryKey("user_birthdays_pkey", x => new { x.guild_id, x.user_id }); + table.ForeignKey( + name: "user_birthdays_guild_id_fkey", + column: x => x.guild_id, + principalTable: "settings", + principalColumn: "guild_id", + onDelete: ReferentialAction.Cascade); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "banned_users"); + + migrationBuilder.DropTable( + name: "user_birthdays"); + + migrationBuilder.DropTable( + name: "settings"); + } + } +} diff --git a/Data/Migrations/BotDatabaseContextModelSnapshot.cs b/Data/Migrations/BotDatabaseContextModelSnapshot.cs new file mode 100644 index 0000000..837075b --- /dev/null +++ b/Data/Migrations/BotDatabaseContextModelSnapshot.cs @@ -0,0 +1,158 @@ +// +using System; +using BirthdayBot.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace BirthdayBot.Data.Migrations +{ + [DbContext(typeof(BotDatabaseContext))] + partial class BotDatabaseContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("BirthdayBot.Data.BlocklistEntry", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("UserId") + .HasColumnType("bigint") + .HasColumnName("user_id"); + + b.HasKey("GuildId", "UserId") + .HasName("banned_users_pkey"); + + b.ToTable("banned_users", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.GuildConfig", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("AnnounceMessage") + .HasColumnType("text") + .HasColumnName("announce_message"); + + b.Property("AnnounceMessagePl") + .HasColumnType("text") + .HasColumnName("announce_message_pl"); + + b.Property("AnnouncePing") + .HasColumnType("boolean") + .HasColumnName("announce_ping"); + + b.Property("ChannelAnnounceId") + .HasColumnType("bigint") + .HasColumnName("channel_announce_id"); + + b.Property("LastSeen") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen") + .HasDefaultValueSql("now()"); + + b.Property("Moderated") + .HasColumnType("boolean") + .HasColumnName("moderated"); + + b.Property("ModeratorRole") + .HasColumnType("bigint") + .HasColumnName("moderator_role"); + + b.Property("RoleId") + .HasColumnType("bigint") + .HasColumnName("role_id"); + + b.Property("TimeZone") + .HasColumnType("text") + .HasColumnName("time_zone"); + + b.HasKey("GuildId") + .HasName("settings_pkey"); + + b.ToTable("settings", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.UserEntry", b => + { + b.Property("GuildId") + .HasColumnType("bigint") + .HasColumnName("guild_id"); + + b.Property("UserId") + .HasColumnType("bigint") + .HasColumnName("user_id"); + + b.Property("BirthDay") + .HasColumnType("integer") + .HasColumnName("birth_day"); + + b.Property("BirthMonth") + .HasColumnType("integer") + .HasColumnName("birth_month"); + + b.Property("LastSeen") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen") + .HasDefaultValueSql("now()"); + + b.Property("TimeZone") + .HasColumnType("text") + .HasColumnName("time_zone"); + + b.HasKey("GuildId", "UserId") + .HasName("user_birthdays_pkey"); + + b.ToTable("user_birthdays", (string)null); + }); + + modelBuilder.Entity("BirthdayBot.Data.BlocklistEntry", b => + { + b.HasOne("BirthdayBot.Data.GuildConfig", "Guild") + .WithMany("BlockedUsers") + .HasForeignKey("GuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("banned_users_guild_id_fkey"); + + b.Navigation("Guild"); + }); + + modelBuilder.Entity("BirthdayBot.Data.UserEntry", b => + { + b.HasOne("BirthdayBot.Data.GuildConfig", "Guild") + .WithMany("UserEntries") + .HasForeignKey("GuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("user_birthdays_guild_id_fkey"); + + b.Navigation("Guild"); + }); + + modelBuilder.Entity("BirthdayBot.Data.GuildConfig", b => + { + b.Navigation("BlockedUsers"); + + b.Navigation("UserEntries"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Program.cs b/Program.cs index 32456c8..9546c6f 100644 --- a/Program.cs +++ b/Program.cs @@ -1,6 +1,5 @@ using BirthdayBot.Data; -using System; -using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace BirthdayBot; @@ -21,14 +20,20 @@ class Program { Console.WriteLine(ex); Environment.Exit((int)ExitCodes.ConfigError); } - + + BotDatabaseContext.NpgsqlConnectionString = cfg.DatabaseConnectionString; + using (var db = new BotDatabaseContext()) { + db.Database.Migrate(); + } + + Database.DBConnectionString = cfg.DatabaseConnectionString; try { await Database.DoInitialDatabaseSetupAsync(); } catch (Npgsql.NpgsqlException e) { Console.WriteLine("Error when attempting to connect to database: " + e.Message); Environment.Exit((int)ExitCodes.DatabaseError); } - + Console.CancelKeyPress += OnCancelKeyPressed; _bot = new ShardManager(cfg);