From 3250cf14674f0b44c0a5b744cef5b201078defc6 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Thu, 20 Nov 2025 13:53:58 -0500 Subject: [PATCH] [FA-9] Postgres backing works --- ...ionArchive.Service.SchedulerService.csproj | 6 + .../GraphQL/Mutation.cs | 2 +- .../20251120151130_Initial.Designer.cs | 543 ++++++++++++++++++ .../Migrations/20251120151130_Initial.cs | 373 ++++++++++++ .../SchedulerServiceDbContextModelSnapshot.cs | 540 +++++++++++++++++ .../Program.cs | 24 +- .../Services/SchedulerServiceDbContext.cs | 19 + .../appsettings.json | 3 + 8 files changed, 1508 insertions(+), 2 deletions(-) create mode 100644 FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.Designer.cs create mode 100644 FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.cs create mode 100644 FictionArchive.Service.SchedulerService/Migrations/SchedulerServiceDbContextModelSnapshot.cs create mode 100644 FictionArchive.Service.SchedulerService/Services/SchedulerServiceDbContext.cs diff --git a/FictionArchive.Service.SchedulerService/FictionArchive.Service.SchedulerService.csproj b/FictionArchive.Service.SchedulerService/FictionArchive.Service.SchedulerService.csproj index ccdea73..055a4f1 100644 --- a/FictionArchive.Service.SchedulerService/FictionArchive.Service.SchedulerService.csproj +++ b/FictionArchive.Service.SchedulerService/FictionArchive.Service.SchedulerService.csproj @@ -18,9 +18,15 @@ + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/FictionArchive.Service.SchedulerService/GraphQL/Mutation.cs b/FictionArchive.Service.SchedulerService/GraphQL/Mutation.cs index e5118b5..f1a6b65 100644 --- a/FictionArchive.Service.SchedulerService/GraphQL/Mutation.cs +++ b/FictionArchive.Service.SchedulerService/GraphQL/Mutation.cs @@ -27,7 +27,7 @@ public class Mutation bool deleted = await jobManager.DeleteJob(jobKey); if (!deleted) { - throw new KeyNotFoundException($"Job with key {jobKey} was not found"); + throw new KeyNotFoundException($"Job with key '{jobKey}' was not found"); } return true; diff --git a/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.Designer.cs b/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.Designer.cs new file mode 100644 index 0000000..1026246 --- /dev/null +++ b/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.Designer.cs @@ -0,0 +1,543 @@ +// +using FictionArchive.Service.SchedulerService.Services; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace FictionArchive.Service.SchedulerService.Migrations +{ + [DbContext(typeof(SchedulerServiceDbContext))] + [Migration("20251120151130_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzBlobTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("BlobData") + .HasColumnType("bytea") + .HasColumnName("blob_data"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_blob_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCalendar", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("CalendarName") + .HasColumnType("text") + .HasColumnName("calendar_name"); + + b.Property("Calendar") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("calendar"); + + b.HasKey("SchedulerName", "CalendarName"); + + b.ToTable("qrtz_calendars", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCronTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("CronExpression") + .IsRequired() + .HasColumnType("text") + .HasColumnName("cron_expression"); + + b.Property("TimeZoneId") + .HasColumnType("text") + .HasColumnName("time_zone_id"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_cron_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzFiredTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("EntryId") + .HasColumnType("text") + .HasColumnName("entry_id"); + + b.Property("FiredTime") + .HasColumnType("bigint") + .HasColumnName("fired_time"); + + b.Property("InstanceName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("instance_name"); + + b.Property("IsNonConcurrent") + .HasColumnType("bool") + .HasColumnName("is_nonconcurrent"); + + b.Property("JobGroup") + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("JobName") + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("RequestsRecovery") + .HasColumnType("bool") + .HasColumnName("requests_recovery"); + + b.Property("ScheduledTime") + .HasColumnType("bigint") + .HasColumnName("sched_time"); + + b.Property("State") + .IsRequired() + .HasColumnType("text") + .HasColumnName("state"); + + b.Property("TriggerGroup") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("TriggerName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.HasKey("SchedulerName", "EntryId"); + + b.HasIndex("InstanceName") + .HasDatabaseName("idx_qrtz_ft_trig_inst_name"); + + b.HasIndex("JobGroup") + .HasDatabaseName("idx_qrtz_ft_job_group"); + + b.HasIndex("JobName") + .HasDatabaseName("idx_qrtz_ft_job_name"); + + b.HasIndex("RequestsRecovery") + .HasDatabaseName("idx_qrtz_ft_job_req_recovery"); + + b.HasIndex("TriggerGroup") + .HasDatabaseName("idx_qrtz_ft_trig_group"); + + b.HasIndex("TriggerName") + .HasDatabaseName("idx_qrtz_ft_trig_name"); + + b.HasIndex("SchedulerName", "TriggerName", "TriggerGroup") + .HasDatabaseName("idx_qrtz_ft_trig_nm_gp"); + + b.ToTable("qrtz_fired_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("JobName") + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("JobGroup") + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsDurable") + .HasColumnType("bool") + .HasColumnName("is_durable"); + + b.Property("IsNonConcurrent") + .HasColumnType("bool") + .HasColumnName("is_nonconcurrent"); + + b.Property("IsUpdateData") + .HasColumnType("bool") + .HasColumnName("is_update_data"); + + b.Property("JobClassName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_class_name"); + + b.Property("JobData") + .HasColumnType("bytea") + .HasColumnName("job_data"); + + b.Property("RequestsRecovery") + .HasColumnType("bool") + .HasColumnName("requests_recovery"); + + b.HasKey("SchedulerName", "JobName", "JobGroup"); + + b.HasIndex("RequestsRecovery") + .HasDatabaseName("idx_qrtz_j_req_recovery"); + + b.ToTable("qrtz_job_details", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzLock", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("LockName") + .HasColumnType("text") + .HasColumnName("lock_name"); + + b.HasKey("SchedulerName", "LockName"); + + b.ToTable("qrtz_locks", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzPausedTriggerGroup", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.HasKey("SchedulerName", "TriggerGroup"); + + b.ToTable("qrtz_paused_trigger_grps", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSchedulerState", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("InstanceName") + .HasColumnType("text") + .HasColumnName("instance_name"); + + b.Property("CheckInInterval") + .HasColumnType("bigint") + .HasColumnName("checkin_interval"); + + b.Property("LastCheckInTime") + .HasColumnType("bigint") + .HasColumnName("last_checkin_time"); + + b.HasKey("SchedulerName", "InstanceName"); + + b.ToTable("qrtz_scheduler_state", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimplePropertyTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("BooleanProperty1") + .HasColumnType("bool") + .HasColumnName("bool_prop_1"); + + b.Property("BooleanProperty2") + .HasColumnType("bool") + .HasColumnName("bool_prop_2"); + + b.Property("DecimalProperty1") + .HasColumnType("numeric") + .HasColumnName("dec_prop_1"); + + b.Property("DecimalProperty2") + .HasColumnType("numeric") + .HasColumnName("dec_prop_2"); + + b.Property("IntegerProperty1") + .HasColumnType("integer") + .HasColumnName("int_prop_1"); + + b.Property("IntegerProperty2") + .HasColumnType("integer") + .HasColumnName("int_prop_2"); + + b.Property("LongProperty1") + .HasColumnType("bigint") + .HasColumnName("long_prop_1"); + + b.Property("LongProperty2") + .HasColumnType("bigint") + .HasColumnName("long_prop_2"); + + b.Property("StringProperty1") + .HasColumnType("text") + .HasColumnName("str_prop_1"); + + b.Property("StringProperty2") + .HasColumnType("text") + .HasColumnName("str_prop_2"); + + b.Property("StringProperty3") + .HasColumnType("text") + .HasColumnName("str_prop_3"); + + b.Property("TimeZoneId") + .HasColumnType("text") + .HasColumnName("time_zone_id"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_simprop_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimpleTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("RepeatCount") + .HasColumnType("bigint") + .HasColumnName("repeat_count"); + + b.Property("RepeatInterval") + .HasColumnType("bigint") + .HasColumnName("repeat_interval"); + + b.Property("TimesTriggered") + .HasColumnType("bigint") + .HasColumnName("times_triggered"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_simple_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("CalendarName") + .HasColumnType("text") + .HasColumnName("calendar_name"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("EndTime") + .HasColumnType("bigint") + .HasColumnName("end_time"); + + b.Property("JobData") + .HasColumnType("bytea") + .HasColumnName("job_data"); + + b.Property("JobGroup") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("MisfireInstruction") + .HasColumnType("smallint") + .HasColumnName("misfire_instr"); + + b.Property("NextFireTime") + .HasColumnType("bigint") + .HasColumnName("next_fire_time"); + + b.Property("PreviousFireTime") + .HasColumnType("bigint") + .HasColumnName("prev_fire_time"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("StartTime") + .HasColumnType("bigint") + .HasColumnName("start_time"); + + b.Property("TriggerState") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_state"); + + b.Property("TriggerType") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_type"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.HasIndex("NextFireTime") + .HasDatabaseName("idx_qrtz_t_next_fire_time"); + + b.HasIndex("TriggerState") + .HasDatabaseName("idx_qrtz_t_state"); + + b.HasIndex("NextFireTime", "TriggerState") + .HasDatabaseName("idx_qrtz_t_nft_st"); + + b.HasIndex("SchedulerName", "JobName", "JobGroup"); + + b.ToTable("qrtz_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzBlobTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("BlobTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCronTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("CronTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimplePropertyTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("SimplePropertyTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimpleTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("SimpleTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", "JobDetail") + .WithMany("Triggers") + .HasForeignKey("SchedulerName", "JobName", "JobGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("JobDetail"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", b => + { + b.Navigation("Triggers"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.Navigation("BlobTriggers"); + + b.Navigation("CronTriggers"); + + b.Navigation("SimplePropertyTriggers"); + + b.Navigation("SimpleTriggers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.cs b/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.cs new file mode 100644 index 0000000..6210aa1 --- /dev/null +++ b/FictionArchive.Service.SchedulerService/Migrations/20251120151130_Initial.cs @@ -0,0 +1,373 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FictionArchive.Service.SchedulerService.Migrations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "quartz"); + + migrationBuilder.CreateTable( + name: "qrtz_calendars", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + calendar_name = table.Column(type: "text", nullable: false), + calendar = table.Column(type: "bytea", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_calendars", x => new { x.sched_name, x.calendar_name }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_fired_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + entry_id = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + instance_name = table.Column(type: "text", nullable: false), + fired_time = table.Column(type: "bigint", nullable: false), + sched_time = table.Column(type: "bigint", nullable: false), + priority = table.Column(type: "integer", nullable: false), + state = table.Column(type: "text", nullable: false), + job_name = table.Column(type: "text", nullable: true), + job_group = table.Column(type: "text", nullable: true), + is_nonconcurrent = table.Column(type: "bool", nullable: false), + requests_recovery = table.Column(type: "bool", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_fired_triggers", x => new { x.sched_name, x.entry_id }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_job_details", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + job_name = table.Column(type: "text", nullable: false), + job_group = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + job_class_name = table.Column(type: "text", nullable: false), + is_durable = table.Column(type: "bool", nullable: false), + is_nonconcurrent = table.Column(type: "bool", nullable: false), + is_update_data = table.Column(type: "bool", nullable: false), + requests_recovery = table.Column(type: "bool", nullable: false), + job_data = table.Column(type: "bytea", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_job_details", x => new { x.sched_name, x.job_name, x.job_group }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_locks", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + lock_name = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_locks", x => new { x.sched_name, x.lock_name }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_paused_trigger_grps", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_paused_trigger_grps", x => new { x.sched_name, x.trigger_group }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_scheduler_state", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + instance_name = table.Column(type: "text", nullable: false), + last_checkin_time = table.Column(type: "bigint", nullable: false), + checkin_interval = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_scheduler_state", x => new { x.sched_name, x.instance_name }); + }); + + migrationBuilder.CreateTable( + name: "qrtz_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + job_name = table.Column(type: "text", nullable: false), + job_group = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + next_fire_time = table.Column(type: "bigint", nullable: true), + prev_fire_time = table.Column(type: "bigint", nullable: true), + priority = table.Column(type: "integer", nullable: true), + trigger_state = table.Column(type: "text", nullable: false), + trigger_type = table.Column(type: "text", nullable: false), + start_time = table.Column(type: "bigint", nullable: false), + end_time = table.Column(type: "bigint", nullable: true), + calendar_name = table.Column(type: "text", nullable: true), + misfire_instr = table.Column(type: "smallint", nullable: true), + job_data = table.Column(type: "bytea", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_triggers", x => new { x.sched_name, x.trigger_name, x.trigger_group }); + table.ForeignKey( + name: "FK_qrtz_triggers_qrtz_job_details_sched_name_job_name_job_group", + columns: x => new { x.sched_name, x.job_name, x.job_group }, + principalSchema: "quartz", + principalTable: "qrtz_job_details", + principalColumns: new[] { "sched_name", "job_name", "job_group" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "qrtz_blob_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + blob_data = table.Column(type: "bytea", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_blob_triggers", x => new { x.sched_name, x.trigger_name, x.trigger_group }); + table.ForeignKey( + name: "FK_qrtz_blob_triggers_qrtz_triggers_sched_name_trigger_name_tr~", + columns: x => new { x.sched_name, x.trigger_name, x.trigger_group }, + principalSchema: "quartz", + principalTable: "qrtz_triggers", + principalColumns: new[] { "sched_name", "trigger_name", "trigger_group" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "qrtz_cron_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + cron_expression = table.Column(type: "text", nullable: false), + time_zone_id = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_cron_triggers", x => new { x.sched_name, x.trigger_name, x.trigger_group }); + table.ForeignKey( + name: "FK_qrtz_cron_triggers_qrtz_triggers_sched_name_trigger_name_tr~", + columns: x => new { x.sched_name, x.trigger_name, x.trigger_group }, + principalSchema: "quartz", + principalTable: "qrtz_triggers", + principalColumns: new[] { "sched_name", "trigger_name", "trigger_group" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "qrtz_simple_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + repeat_count = table.Column(type: "bigint", nullable: false), + repeat_interval = table.Column(type: "bigint", nullable: false), + times_triggered = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_simple_triggers", x => new { x.sched_name, x.trigger_name, x.trigger_group }); + table.ForeignKey( + name: "FK_qrtz_simple_triggers_qrtz_triggers_sched_name_trigger_name_~", + columns: x => new { x.sched_name, x.trigger_name, x.trigger_group }, + principalSchema: "quartz", + principalTable: "qrtz_triggers", + principalColumns: new[] { "sched_name", "trigger_name", "trigger_group" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "qrtz_simprop_triggers", + schema: "quartz", + columns: table => new + { + sched_name = table.Column(type: "text", nullable: false), + trigger_name = table.Column(type: "text", nullable: false), + trigger_group = table.Column(type: "text", nullable: false), + str_prop_1 = table.Column(type: "text", nullable: true), + str_prop_2 = table.Column(type: "text", nullable: true), + str_prop_3 = table.Column(type: "text", nullable: true), + int_prop_1 = table.Column(type: "integer", nullable: true), + int_prop_2 = table.Column(type: "integer", nullable: true), + long_prop_1 = table.Column(type: "bigint", nullable: true), + long_prop_2 = table.Column(type: "bigint", nullable: true), + dec_prop_1 = table.Column(type: "numeric", nullable: true), + dec_prop_2 = table.Column(type: "numeric", nullable: true), + bool_prop_1 = table.Column(type: "bool", nullable: true), + bool_prop_2 = table.Column(type: "bool", nullable: true), + time_zone_id = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_qrtz_simprop_triggers", x => new { x.sched_name, x.trigger_name, x.trigger_group }); + table.ForeignKey( + name: "FK_qrtz_simprop_triggers_qrtz_triggers_sched_name_trigger_name~", + columns: x => new { x.sched_name, x.trigger_name, x.trigger_group }, + principalSchema: "quartz", + principalTable: "qrtz_triggers", + principalColumns: new[] { "sched_name", "trigger_name", "trigger_group" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_job_group", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "job_group"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_job_name", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "job_name"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_job_req_recovery", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "requests_recovery"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_trig_group", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "trigger_group"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_trig_inst_name", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "instance_name"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_trig_name", + schema: "quartz", + table: "qrtz_fired_triggers", + column: "trigger_name"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_ft_trig_nm_gp", + schema: "quartz", + table: "qrtz_fired_triggers", + columns: new[] { "sched_name", "trigger_name", "trigger_group" }); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_j_req_recovery", + schema: "quartz", + table: "qrtz_job_details", + column: "requests_recovery"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_t_next_fire_time", + schema: "quartz", + table: "qrtz_triggers", + column: "next_fire_time"); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_t_nft_st", + schema: "quartz", + table: "qrtz_triggers", + columns: new[] { "next_fire_time", "trigger_state" }); + + migrationBuilder.CreateIndex( + name: "idx_qrtz_t_state", + schema: "quartz", + table: "qrtz_triggers", + column: "trigger_state"); + + migrationBuilder.CreateIndex( + name: "IX_qrtz_triggers_sched_name_job_name_job_group", + schema: "quartz", + table: "qrtz_triggers", + columns: new[] { "sched_name", "job_name", "job_group" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "qrtz_blob_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_calendars", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_cron_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_fired_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_locks", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_paused_trigger_grps", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_scheduler_state", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_simple_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_simprop_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_triggers", + schema: "quartz"); + + migrationBuilder.DropTable( + name: "qrtz_job_details", + schema: "quartz"); + } + } +} diff --git a/FictionArchive.Service.SchedulerService/Migrations/SchedulerServiceDbContextModelSnapshot.cs b/FictionArchive.Service.SchedulerService/Migrations/SchedulerServiceDbContextModelSnapshot.cs new file mode 100644 index 0000000..1a4a2b3 --- /dev/null +++ b/FictionArchive.Service.SchedulerService/Migrations/SchedulerServiceDbContextModelSnapshot.cs @@ -0,0 +1,540 @@ +// +using FictionArchive.Service.SchedulerService.Services; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace FictionArchive.Service.SchedulerService.Migrations +{ + [DbContext(typeof(SchedulerServiceDbContext))] + partial class SchedulerServiceDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzBlobTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("BlobData") + .HasColumnType("bytea") + .HasColumnName("blob_data"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_blob_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCalendar", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("CalendarName") + .HasColumnType("text") + .HasColumnName("calendar_name"); + + b.Property("Calendar") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("calendar"); + + b.HasKey("SchedulerName", "CalendarName"); + + b.ToTable("qrtz_calendars", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCronTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("CronExpression") + .IsRequired() + .HasColumnType("text") + .HasColumnName("cron_expression"); + + b.Property("TimeZoneId") + .HasColumnType("text") + .HasColumnName("time_zone_id"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_cron_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzFiredTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("EntryId") + .HasColumnType("text") + .HasColumnName("entry_id"); + + b.Property("FiredTime") + .HasColumnType("bigint") + .HasColumnName("fired_time"); + + b.Property("InstanceName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("instance_name"); + + b.Property("IsNonConcurrent") + .HasColumnType("bool") + .HasColumnName("is_nonconcurrent"); + + b.Property("JobGroup") + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("JobName") + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("RequestsRecovery") + .HasColumnType("bool") + .HasColumnName("requests_recovery"); + + b.Property("ScheduledTime") + .HasColumnType("bigint") + .HasColumnName("sched_time"); + + b.Property("State") + .IsRequired() + .HasColumnType("text") + .HasColumnName("state"); + + b.Property("TriggerGroup") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("TriggerName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.HasKey("SchedulerName", "EntryId"); + + b.HasIndex("InstanceName") + .HasDatabaseName("idx_qrtz_ft_trig_inst_name"); + + b.HasIndex("JobGroup") + .HasDatabaseName("idx_qrtz_ft_job_group"); + + b.HasIndex("JobName") + .HasDatabaseName("idx_qrtz_ft_job_name"); + + b.HasIndex("RequestsRecovery") + .HasDatabaseName("idx_qrtz_ft_job_req_recovery"); + + b.HasIndex("TriggerGroup") + .HasDatabaseName("idx_qrtz_ft_trig_group"); + + b.HasIndex("TriggerName") + .HasDatabaseName("idx_qrtz_ft_trig_name"); + + b.HasIndex("SchedulerName", "TriggerName", "TriggerGroup") + .HasDatabaseName("idx_qrtz_ft_trig_nm_gp"); + + b.ToTable("qrtz_fired_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("JobName") + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("JobGroup") + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsDurable") + .HasColumnType("bool") + .HasColumnName("is_durable"); + + b.Property("IsNonConcurrent") + .HasColumnType("bool") + .HasColumnName("is_nonconcurrent"); + + b.Property("IsUpdateData") + .HasColumnType("bool") + .HasColumnName("is_update_data"); + + b.Property("JobClassName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_class_name"); + + b.Property("JobData") + .HasColumnType("bytea") + .HasColumnName("job_data"); + + b.Property("RequestsRecovery") + .HasColumnType("bool") + .HasColumnName("requests_recovery"); + + b.HasKey("SchedulerName", "JobName", "JobGroup"); + + b.HasIndex("RequestsRecovery") + .HasDatabaseName("idx_qrtz_j_req_recovery"); + + b.ToTable("qrtz_job_details", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzLock", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("LockName") + .HasColumnType("text") + .HasColumnName("lock_name"); + + b.HasKey("SchedulerName", "LockName"); + + b.ToTable("qrtz_locks", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzPausedTriggerGroup", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.HasKey("SchedulerName", "TriggerGroup"); + + b.ToTable("qrtz_paused_trigger_grps", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSchedulerState", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("InstanceName") + .HasColumnType("text") + .HasColumnName("instance_name"); + + b.Property("CheckInInterval") + .HasColumnType("bigint") + .HasColumnName("checkin_interval"); + + b.Property("LastCheckInTime") + .HasColumnType("bigint") + .HasColumnName("last_checkin_time"); + + b.HasKey("SchedulerName", "InstanceName"); + + b.ToTable("qrtz_scheduler_state", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimplePropertyTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("BooleanProperty1") + .HasColumnType("bool") + .HasColumnName("bool_prop_1"); + + b.Property("BooleanProperty2") + .HasColumnType("bool") + .HasColumnName("bool_prop_2"); + + b.Property("DecimalProperty1") + .HasColumnType("numeric") + .HasColumnName("dec_prop_1"); + + b.Property("DecimalProperty2") + .HasColumnType("numeric") + .HasColumnName("dec_prop_2"); + + b.Property("IntegerProperty1") + .HasColumnType("integer") + .HasColumnName("int_prop_1"); + + b.Property("IntegerProperty2") + .HasColumnType("integer") + .HasColumnName("int_prop_2"); + + b.Property("LongProperty1") + .HasColumnType("bigint") + .HasColumnName("long_prop_1"); + + b.Property("LongProperty2") + .HasColumnType("bigint") + .HasColumnName("long_prop_2"); + + b.Property("StringProperty1") + .HasColumnType("text") + .HasColumnName("str_prop_1"); + + b.Property("StringProperty2") + .HasColumnType("text") + .HasColumnName("str_prop_2"); + + b.Property("StringProperty3") + .HasColumnType("text") + .HasColumnName("str_prop_3"); + + b.Property("TimeZoneId") + .HasColumnType("text") + .HasColumnName("time_zone_id"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_simprop_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimpleTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("RepeatCount") + .HasColumnType("bigint") + .HasColumnName("repeat_count"); + + b.Property("RepeatInterval") + .HasColumnType("bigint") + .HasColumnName("repeat_interval"); + + b.Property("TimesTriggered") + .HasColumnType("bigint") + .HasColumnName("times_triggered"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.ToTable("qrtz_simple_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.Property("SchedulerName") + .HasColumnType("text") + .HasColumnName("sched_name"); + + b.Property("TriggerName") + .HasColumnType("text") + .HasColumnName("trigger_name"); + + b.Property("TriggerGroup") + .HasColumnType("text") + .HasColumnName("trigger_group"); + + b.Property("CalendarName") + .HasColumnType("text") + .HasColumnName("calendar_name"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("EndTime") + .HasColumnType("bigint") + .HasColumnName("end_time"); + + b.Property("JobData") + .HasColumnType("bytea") + .HasColumnName("job_data"); + + b.Property("JobGroup") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_group"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("MisfireInstruction") + .HasColumnType("smallint") + .HasColumnName("misfire_instr"); + + b.Property("NextFireTime") + .HasColumnType("bigint") + .HasColumnName("next_fire_time"); + + b.Property("PreviousFireTime") + .HasColumnType("bigint") + .HasColumnName("prev_fire_time"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("StartTime") + .HasColumnType("bigint") + .HasColumnName("start_time"); + + b.Property("TriggerState") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_state"); + + b.Property("TriggerType") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trigger_type"); + + b.HasKey("SchedulerName", "TriggerName", "TriggerGroup"); + + b.HasIndex("NextFireTime") + .HasDatabaseName("idx_qrtz_t_next_fire_time"); + + b.HasIndex("TriggerState") + .HasDatabaseName("idx_qrtz_t_state"); + + b.HasIndex("NextFireTime", "TriggerState") + .HasDatabaseName("idx_qrtz_t_nft_st"); + + b.HasIndex("SchedulerName", "JobName", "JobGroup"); + + b.ToTable("qrtz_triggers", "quartz"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzBlobTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("BlobTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzCronTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("CronTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimplePropertyTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("SimplePropertyTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzSimpleTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", "Trigger") + .WithMany("SimpleTriggers") + .HasForeignKey("SchedulerName", "TriggerName", "TriggerGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Trigger"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.HasOne("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", "JobDetail") + .WithMany("Triggers") + .HasForeignKey("SchedulerName", "JobName", "JobGroup") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("JobDetail"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzJobDetail", b => + { + b.Navigation("Triggers"); + }); + + modelBuilder.Entity("AppAny.Quartz.EntityFrameworkCore.Migrations.QuartzTrigger", b => + { + b.Navigation("BlobTriggers"); + + b.Navigation("CronTriggers"); + + b.Navigation("SimplePropertyTriggers"); + + b.Navigation("SimpleTriggers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FictionArchive.Service.SchedulerService/Program.cs b/FictionArchive.Service.SchedulerService/Program.cs index 69406f4..1710637 100644 --- a/FictionArchive.Service.SchedulerService/Program.cs +++ b/FictionArchive.Service.SchedulerService/Program.cs @@ -3,6 +3,7 @@ using FictionArchive.Service.SchedulerService.Services; using FictionArchive.Service.Shared.Extensions; using FictionArchive.Service.Shared.Services.EventBus.Implementations; using Quartz; +using Quartz.Impl.AdoJobStore; namespace FictionArchive.Service.SchedulerService; @@ -17,6 +18,12 @@ public class Program builder.Services.AddHealthChecks(); builder.Services.AddTransient(); + #region Database + + builder.Services.RegisterDbContext(builder.Configuration.GetConnectionString("DefaultConnection")); + + #endregion + #region Event Bus builder.Services.AddRabbitMQ(opt => @@ -30,7 +37,16 @@ public class Program builder.Services.AddQuartz(opt => { - opt.UseMicrosoftDependencyInjectionJobFactory(); + opt.UsePersistentStore(pso => + { + pso.UsePostgres(pgsql => + { + pgsql.ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"); + pgsql.UseDriverDelegate(); + pgsql.TablePrefix = "quartz.qrtz_"; // Needed for Postgres due to the differing schema used + }); + pso.UseNewtonsoftJsonSerializer(); + }); }); builder.Services.AddQuartzHostedService(opt => { @@ -40,6 +56,12 @@ public class Program #endregion var app = builder.Build(); + + using (var scope = app.Services.CreateScope()) + { + var dbContext = scope.ServiceProvider.GetRequiredService(); + dbContext.UpdateDatabase(); + } app.UseHttpsRedirection(); diff --git a/FictionArchive.Service.SchedulerService/Services/SchedulerServiceDbContext.cs b/FictionArchive.Service.SchedulerService/Services/SchedulerServiceDbContext.cs new file mode 100644 index 0000000..cd4844e --- /dev/null +++ b/FictionArchive.Service.SchedulerService/Services/SchedulerServiceDbContext.cs @@ -0,0 +1,19 @@ +using AppAny.Quartz.EntityFrameworkCore.Migrations; +using AppAny.Quartz.EntityFrameworkCore.Migrations.PostgreSQL; +using FictionArchive.Service.Shared.Services.Database; +using Microsoft.EntityFrameworkCore; + +namespace FictionArchive.Service.SchedulerService.Services; + +public class SchedulerServiceDbContext : FictionArchiveDbContext +{ + public SchedulerServiceDbContext(DbContextOptions options, ILogger logger) : base(options, logger) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.AddQuartz(builder => builder.UsePostgreSql()); + base.OnModelCreating(modelBuilder); + } +} \ No newline at end of file diff --git a/FictionArchive.Service.SchedulerService/appsettings.json b/FictionArchive.Service.SchedulerService/appsettings.json index 250543c..6d027f1 100644 --- a/FictionArchive.Service.SchedulerService/appsettings.json +++ b/FictionArchive.Service.SchedulerService/appsettings.json @@ -9,5 +9,8 @@ "ConnectionString": "amqp://localhost", "ClientIdentifier": "SchedulerService" }, + "ConnectionStrings": { + "DefaultConnection": "Host=localhost;Database=FictionArchive_SchedulerService;Username=postgres;password=postgres" + }, "AllowedHosts": "*" }