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("TrainingTypesId") + .HasColumnType("integer"); + + b.HasKey("SchedulesId", "TrainingTypesId"); + + b.HasIndex("TrainingTypesId"); + + b.ToTable("TrainingScheduleTrainingType"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Comment", b => + { + b.HasOne("Memphis.Shared.Models.User", "Submitter") + .WithMany() + .HasForeignKey("SubmitterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Submitter"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.EventPosition", b => + { + b.HasOne("Memphis.Shared.Models.Event", "Event") + .WithMany() + .HasForeignKey("EventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Event"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.EventRegistration", b => + { + b.HasOne("Memphis.Shared.Models.Event", "Event") + .WithMany() + .HasForeignKey("EventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.EventPosition", "EventPosition") + .WithMany() + .HasForeignKey("EventPositionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Event"); + + b.Navigation("EventPosition"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.ExamRequest", b => + { + b.HasOne("Memphis.Shared.Models.Exam", "Exam") + .WithMany() + .HasForeignKey("ExamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "Instructor") + .WithMany() + .HasForeignKey("InstructorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "Student") + .WithMany() + .HasForeignKey("StudentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Exam"); + + b.Navigation("Instructor"); + + b.Navigation("Student"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Feedback", b => + { + b.HasOne("Memphis.Shared.Models.User", "Controller") + .WithMany() + .HasForeignKey("ControllerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Controller"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Hours", b => + { + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Notification", b => + { + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Ots", b => + { + b.HasOne("Memphis.Shared.Models.User", "Instructor") + .WithMany() + .HasForeignKey("InstructorId"); + + b.HasOne("Memphis.Shared.Models.TrainingMilestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "Submitter") + .WithMany() + .HasForeignKey("SubmitterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instructor"); + + b.Navigation("Milestone"); + + b.Navigation("Submitter"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.Session", b => + { + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.SoloCert", b => + { + b.HasOne("Memphis.Shared.Models.User", "Submitted") + .WithMany() + .HasForeignKey("SubmittedId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Submitted"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.TrainingSchedule", b => + { + b.HasOne("Memphis.Shared.Models.User", "Instructor") + .WithMany() + .HasForeignKey("InstructorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "Student") + .WithMany() + .HasForeignKey("StudentId"); + + b.Navigation("Instructor"); + + b.Navigation("Student"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.TrainingScheduleEntry", b => + { + b.HasOne("Memphis.Shared.Models.TrainingSchedule", "TrainingSchedule") + .WithMany() + .HasForeignKey("TrainingScheduleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.TrainingType", "TrainingType") + .WithMany() + .HasForeignKey("TrainingTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TrainingSchedule"); + + b.Navigation("TrainingType"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.TrainingTicket", b => + { + b.HasOne("Memphis.Shared.Models.TrainingMilestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "Trainer") + .WithMany() + .HasForeignKey("TrainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Milestone"); + + b.Navigation("Trainer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Memphis.Shared.Models.User", b => + { + b.HasOne("Memphis.Shared.Models.Certification", "Center") + .WithMany() + .HasForeignKey("CenterId"); + + b.HasOne("Memphis.Shared.Models.Certification", "Ground") + .WithMany() + .HasForeignKey("GroundId"); + + b.HasOne("Memphis.Shared.Models.Certification", "Tower") + .WithMany() + .HasForeignKey("TowerId"); + + b.HasOne("Memphis.Shared.Models.Certification", "Tracon") + .WithMany() + .HasForeignKey("TraconId"); + + b.Navigation("Center"); + + b.Navigation("Ground"); + + b.Navigation("Tower"); + + b.Navigation("Tracon"); + }); + + modelBuilder.Entity("RoleUser", b => + { + b.HasOne("Memphis.Shared.Models.Role", null) + .WithMany() + .HasForeignKey("RolesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.User", null) + .WithMany() + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("TrainingScheduleTrainingType", b => + { + b.HasOne("Memphis.Shared.Models.TrainingSchedule", null) + .WithMany() + .HasForeignKey("SchedulesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Memphis.Shared.Models.TrainingType", null) + .WithMany() + .HasForeignKey("TrainingTypesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.cs b/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.cs new file mode 100644 index 0000000..594de2c --- /dev/null +++ b/Memphis.Shared/Migrations/20250617154106_MoewNewStuff.cs @@ -0,0 +1,41 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Memphis.Shared.Migrations +{ + /// + public partial class MoewNewStuff : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Confidential", + table: "Comments"); + + migrationBuilder.AddColumn( + name: "Timetstamp", + table: "StaffingRequests", + type: "timestamp with time zone", + nullable: false, + defaultValue: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0))); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Timetstamp", + table: "StaffingRequests"); + + migrationBuilder.AddColumn( + name: "Confidential", + table: "Comments", + type: "boolean", + nullable: false, + defaultValue: false); + } + } +} diff --git a/Memphis.Shared/Migrations/DatabaseContextModelSnapshot.cs b/Memphis.Shared/Migrations/DatabaseContextModelSnapshot.cs index 4946d2f..0cb3915 100644 --- a/Memphis.Shared/Migrations/DatabaseContextModelSnapshot.cs +++ b/Memphis.Shared/Migrations/DatabaseContextModelSnapshot.cs @@ -108,9 +108,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("Confidential") - .HasColumnType("boolean"); - b.Property("Message") .IsRequired() .HasColumnType("text"); @@ -927,6 +924,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Status") .HasColumnType("integer"); + b.Property("Timetstamp") + .HasColumnType("timestamp with time zone"); + b.HasKey("Id"); b.ToTable("StaffingRequests");