diff --git a/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.Designer.cs b/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.Designer.cs
new file mode 100644
index 0000000..df3542f
--- /dev/null
+++ b/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.Designer.cs
@@ -0,0 +1,1614 @@
+//
+using System;
+using Memphis.Shared.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 Memphis.Shared.Migrations
+{
+ [DbContext(typeof(DatabaseContext))]
+ [Migration("20250617154106_MoewNewStuff")]
+ partial class MoewNewStuff
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.3")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Memphis.Shared.Models.Airport", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Altimeter")
+ .HasColumnType("text");
+
+ b.Property("Arrivals")
+ .HasColumnType("integer");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Departures")
+ .HasColumnType("integer");
+
+ b.Property("FlightRules")
+ .HasColumnType("text");
+
+ b.Property("Icao")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("MetarRaw")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Temperature")
+ .HasColumnType("text");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Visibility")
+ .HasColumnType("text");
+
+ b.Property("Wind")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Icao");
+
+ b.HasIndex("Name");
+
+ b.ToTable("Airports");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Certification", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Level")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Solo")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("Certification");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Comment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Message")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SubmitterId")
+ .HasColumnType("integer");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SubmitterId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Comments");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.EmailLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("To")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("EmailLogs");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Event", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("BannerUrl")
+ .HasColumnType("text");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Host")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("IsOpen")
+ .HasColumnType("boolean");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Start");
+
+ b.HasIndex("Title");
+
+ b.ToTable("Events");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.EventPosition", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Available")
+ .HasColumnType("boolean");
+
+ b.Property("EventId")
+ .HasColumnType("integer");
+
+ b.Property("MinRating")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EventId");
+
+ b.ToTable("EventPositions");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.EventRegistration", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EventId")
+ .HasColumnType("integer");
+
+ b.Property("EventPositionId")
+ .HasColumnType("integer");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EventId");
+
+ b.HasIndex("EventPositionId");
+
+ b.HasIndex("Start");
+
+ b.HasIndex("Status");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("EventRegistrations");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Exam", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Link")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Exams");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.ExamRequest", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ExamId")
+ .HasColumnType("integer");
+
+ b.Property("InstructorId")
+ .HasColumnType("integer");
+
+ b.Property("Reason")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("StudentId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ExamId");
+
+ b.HasIndex("InstructorId");
+
+ b.HasIndex("StudentId");
+
+ b.ToTable("ExamRequests");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Facility", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Identifier")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Facilities");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Feedback", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Cid")
+ .HasColumnType("integer");
+
+ b.Property("ControllerCallsign")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ControllerId")
+ .HasColumnType("integer");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Level")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Reply")
+ .HasColumnType("text");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ControllerId");
+
+ b.ToTable("Feedback");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.File", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("FileUrl")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Version")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Files");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Hours", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CenterHours")
+ .HasColumnType("double precision");
+
+ b.Property("DeliveryHours")
+ .HasColumnType("double precision");
+
+ b.Property("GroundHours")
+ .HasColumnType("double precision");
+
+ b.Property("Month")
+ .HasColumnType("integer");
+
+ b.Property("TowerHours")
+ .HasColumnType("double precision");
+
+ b.Property("TraconHours")
+ .HasColumnType("double precision");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("Year")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Month");
+
+ b.HasIndex("UserId");
+
+ b.HasIndex("Year");
+
+ b.ToTable("Hours");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.News", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Author")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Content")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.ToTable("News");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Notification", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Link")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Read")
+ .HasColumnType("boolean");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Read");
+
+ b.HasIndex("Title");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Notifications");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.OnlineController", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Callsign")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Cid")
+ .HasColumnType("integer");
+
+ b.Property("Duration")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Frequency")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Rating")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("OnlineControllers");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Ots", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Facility")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("InstructorId")
+ .HasColumnType("integer");
+
+ b.Property("MilestoneId")
+ .HasColumnType("integer");
+
+ b.Property("Result")
+ .HasColumnType("integer");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("SubmitterId")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Facility");
+
+ b.HasIndex("InstructorId");
+
+ b.HasIndex("MilestoneId");
+
+ b.HasIndex("Result");
+
+ b.HasIndex("Status");
+
+ b.HasIndex("SubmitterId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Ots");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Role", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("NameShort")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Roles");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Email = "atm@memphisartcc.com",
+ Name = "Air Traffic Manager",
+ NameShort = "ATM"
+ },
+ new
+ {
+ Id = 2,
+ Email = "datm@memphisartcc.com",
+ Name = "Deputy Air Traffic Manager",
+ NameShort = "DATM"
+ },
+ new
+ {
+ Id = 3,
+ Email = "ta@memphisartcc.com",
+ Name = "Training Administrator",
+ NameShort = "TA"
+ },
+ new
+ {
+ Id = 4,
+ Email = "ata@memphisartcc.com",
+ Name = "Assistant Training Administrator",
+ NameShort = "ATA"
+ },
+ new
+ {
+ Id = 5,
+ Email = "wm@memphisartcc.com",
+ Name = "Webmaster",
+ NameShort = "WM"
+ },
+ new
+ {
+ Id = 6,
+ Email = "awm@memphisartcc.com",
+ Name = "Assistant Webmaster",
+ NameShort = "AWM"
+ },
+ new
+ {
+ Id = 7,
+ Email = "ec@memphisartcc.com",
+ Name = "Events Coordinator",
+ NameShort = "EC"
+ },
+ new
+ {
+ Id = 8,
+ Email = "aec@memphisartcc.com",
+ Name = "Assistant Events Coordinator",
+ NameShort = "AEC"
+ },
+ new
+ {
+ Id = 9,
+ Email = "fe@memphisartcc.com",
+ Name = "Facility Engineer",
+ NameShort = "FE"
+ },
+ new
+ {
+ Id = 10,
+ Email = "afe@memphisartcc.com",
+ Name = "Assistant Facility Engineer",
+ NameShort = "AFE"
+ },
+ new
+ {
+ Id = 11,
+ Email = "web@memphisartcc.com",
+ Name = "Web Team",
+ NameShort = "WEB"
+ },
+ new
+ {
+ Id = 12,
+ Email = "events@memphisartcc.com",
+ Name = "Events Team",
+ NameShort = "EVENTS"
+ },
+ new
+ {
+ Id = 13,
+ Email = "facilities@memphisartcc.com",
+ Name = "Facilities Team",
+ NameShort = "FACILITIES"
+ },
+ new
+ {
+ Id = 14,
+ Email = "socialmedia@memphisartcc.com",
+ Name = "Social Media Team",
+ NameShort = "SOCIAL"
+ },
+ new
+ {
+ Id = 15,
+ Email = "instructors@memphisartcc.com",
+ Name = "Instructor",
+ NameShort = "INS"
+ },
+ new
+ {
+ Id = 16,
+ Email = "mentors@memphisartcc.com",
+ Name = "Mentor",
+ NameShort = "MTR"
+ });
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Session", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Callsign")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Duration")
+ .HasColumnType("interval");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Frequency")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Callsign");
+
+ b.HasIndex("End");
+
+ b.HasIndex("Frequency");
+
+ b.HasIndex("Name");
+
+ b.HasIndex("Start");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Sessions");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.Settings", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("LastUpdated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("RequiredHours")
+ .HasColumnType("integer");
+
+ b.Property("VisitingOpen")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("Settings");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.SoloCert", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Center")
+ .HasColumnType("integer");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("SubmittedId")
+ .HasColumnType("integer");
+
+ b.Property("Tier2")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SubmittedId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("SoloCerts");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.StaffingRequest", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Cid")
+ .HasColumnType("integer");
+
+ b.Property("Duration")
+ .HasColumnType("interval");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("EstimatedPilots")
+ .HasColumnType("integer");
+
+ b.Property("FullName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Organization")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Timetstamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.ToTable("StaffingRequests");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.TrainingMilestone", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Code")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Facility")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Track")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Code");
+
+ b.ToTable("TrainingMilestones");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.TrainingSchedule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("InstructorId")
+ .HasColumnType("integer");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("StudentId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("InstructorId");
+
+ b.HasIndex("StudentId");
+
+ b.ToTable("TrainingSchedules");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.TrainingScheduleEntry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("TrainingScheduleId")
+ .HasColumnType("integer");
+
+ b.Property("TrainingTypeId")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TrainingScheduleId");
+
+ b.HasIndex("TrainingTypeId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("TrainingScheduleEntries");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.TrainingTicket", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MilestoneId")
+ .HasColumnType("integer");
+
+ b.Property("Performance")
+ .HasColumnType("integer");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("TrainerId")
+ .HasColumnType("integer");
+
+ b.Property("TrainingNotes")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("UserNotes")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MilestoneId");
+
+ b.HasIndex("Performance");
+
+ b.HasIndex("TrainerId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("TrainingTickets");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.TrainingType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("TrainingTypes");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.User", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CanRegisterForEvents")
+ .HasColumnType("boolean");
+
+ b.Property("CanRequestTraining")
+ .HasColumnType("boolean");
+
+ b.Property("CenterId")
+ .HasColumnType("integer");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("DiscordId")
+ .HasColumnType("text");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("FirstName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("GroundId")
+ .HasColumnType("integer");
+
+ b.Property("Initials")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Joined")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("LastName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Rating")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("TowerId")
+ .HasColumnType("integer");
+
+ b.Property("TraconId")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Visitor")
+ .HasColumnType("boolean");
+
+ b.Property("VisitorFrom")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CenterId");
+
+ b.HasIndex("Email");
+
+ b.HasIndex("FirstName");
+
+ b.HasIndex("GroundId");
+
+ b.HasIndex("LastName");
+
+ b.HasIndex("Rating");
+
+ b.HasIndex("Status");
+
+ b.HasIndex("TowerId");
+
+ b.HasIndex("TraconId");
+
+ b.ToTable("Users");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.VisitingApplication", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Cid")
+ .HasColumnType("integer");
+
+ b.Property("Created")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("DenialReason")
+ .HasColumnType("text");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("FirstName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("LastName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Rating")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Updated")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.ToTable("VisitingApplications");
+ });
+
+ modelBuilder.Entity("Memphis.Shared.Models.WebsiteLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Cid")
+ .HasColumnType("text");
+
+ b.Property("Ip")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasColumnType("text");
+
+ b.Property("NewData")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OldData")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.ToTable("WebsiteLogs");
+ });
+
+ modelBuilder.Entity("RoleUser", b =>
+ {
+ b.Property("RolesId")
+ .HasColumnType("integer");
+
+ b.Property("UsersId")
+ .HasColumnType("integer");
+
+ b.HasKey("RolesId", "UsersId");
+
+ b.HasIndex("UsersId");
+
+ b.ToTable("RoleUser");
+ });
+
+ modelBuilder.Entity("TrainingScheduleTrainingType", b =>
+ {
+ b.Property("SchedulesId")
+ .HasColumnType("integer");
+
+ b.Property