// <auto-generated />
using System;
using JobsMedical.Web.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 JobsMedical.Web.Migrations
{
    [DbContext(typeof(AppDbContext))]
    [Migration("20260603204652_GenderRequirement")]
    partial class GenderRequirement
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "10.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("JobsMedical.Web.Models.AppSetting", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("AiApiKey")
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)");

                    b.Property<bool>("AiAutoApprove")
                        .HasColumnType("boolean");

                    b.Property<bool>("AiEnabled")
                        .HasColumnType("boolean");

                    b.Property<string>("AiEndpoint")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<string>("AiModel")
                        .HasMaxLength(120)
                        .HasColumnType("character varying(120)");

                    b.Property<string>("AiSystemPrompt")
                        .IsRequired()
                        .HasMaxLength(4000)
                        .HasColumnType("character varying(4000)");

                    b.Property<int>("AutoPublishMinConfidence")
                        .HasColumnType("integer");

                    b.Property<int>("Mode")
                        .HasColumnType("integer");

                    b.Property<DateTime>("UpdatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.HasKey("Id");

                    b.ToTable("AppSettings");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Application", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<int>("DoctorId")
                        .HasColumnType("integer");

                    b.Property<string>("Message")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<int>("ShiftId")
                        .HasColumnType("integer");

                    b.Property<int>("Status")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("DoctorId");

                    b.HasIndex("ShiftId", "DoctorId")
                        .IsUnique();

                    b.ToTable("Applications");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.City", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)");

                    b.Property<string>("Province")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)");

                    b.HasKey("Id");

                    b.ToTable("Cities");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.District", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int>("CityId")
                        .HasColumnType("integer");

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(120)
                        .HasColumnType("character varying(120)");

                    b.HasKey("Id");

                    b.HasIndex("CityId");

                    b.ToTable("Districts");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.DoctorProfile", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Bio")
                        .HasMaxLength(1000)
                        .HasColumnType("character varying(1000)");

                    b.Property<int?>("CityId")
                        .HasColumnType("integer");

                    b.Property<bool>("IsVerified")
                        .HasColumnType("boolean");

                    b.Property<string>("LicenseNo")
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)");

                    b.Property<int?>("RoleId")
                        .HasColumnType("integer");

                    b.Property<string>("Specialty")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)");

                    b.Property<int>("UserId")
                        .HasColumnType("integer");

                    b.Property<int>("YearsExperience")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("CityId");

                    b.HasIndex("RoleId");

                    b.HasIndex("UserId")
                        .IsUnique();

                    b.ToTable("DoctorProfiles");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Facility", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Address")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<string>("BaleId")
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)");

                    b.Property<int>("CityId")
                        .HasColumnType("integer");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<int?>("DistrictId")
                        .HasColumnType("integer");

                    b.Property<bool>("IsVerified")
                        .HasColumnType("boolean");

                    b.Property<double?>("Lat")
                        .HasColumnType("double precision");

                    b.Property<double?>("Lng")
                        .HasColumnType("double precision");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)");

                    b.Property<int?>("OwnerUserId")
                        .HasColumnType("integer");

                    b.Property<string>("Phone")
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)");

                    b.Property<int>("Type")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("CityId");

                    b.HasIndex("DistrictId");

                    b.HasIndex("OwnerUserId");

                    b.ToTable("Facilities");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.InterestEvent", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<int>("EventType")
                        .HasColumnType("integer");

                    b.Property<int?>("JobOpeningId")
                        .HasColumnType("integer");

                    b.Property<int?>("ShiftId")
                        .HasColumnType("integer");

                    b.Property<string>("VisitorId")
                        .IsRequired()
                        .HasColumnType("character varying(36)");

                    b.HasKey("Id");

                    b.HasIndex("JobOpeningId");

                    b.HasIndex("ShiftId");

                    b.HasIndex("VisitorId", "CreatedAt");

                    b.ToTable("InterestEvents");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.JobOpening", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("Description")
                        .HasMaxLength(2000)
                        .HasColumnType("character varying(2000)");

                    b.Property<int>("EmploymentType")
                        .HasColumnType("integer");

                    b.Property<int>("FacilityId")
                        .HasColumnType("integer");

                    b.Property<int>("GenderRequirement")
                        .HasColumnType("integer");

                    b.Property<string>("Requirements")
                        .HasMaxLength(1000)
                        .HasColumnType("character varying(1000)");

                    b.Property<int>("RoleId")
                        .HasColumnType("integer");

                    b.Property<long?>("SalaryMax")
                        .HasColumnType("bigint");

                    b.Property<long?>("SalaryMin")
                        .HasColumnType("bigint");

                    b.Property<int>("Source")
                        .HasColumnType("integer");

                    b.Property<string>("SourceUrl")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<int>("Status")
                        .HasColumnType("integer");

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)");

                    b.HasKey("Id");

                    b.HasIndex("FacilityId");

                    b.HasIndex("RoleId");

                    b.HasIndex("Status");

                    b.ToTable("JobOpenings");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.RawListing", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int>("Confidence")
                        .HasColumnType("integer");

                    b.Property<string>("ContentHash")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<DateTime>("FetchedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<int?>("LinkedShiftId")
                        .HasColumnType("integer");

                    b.Property<string>("ParsedJson")
                        .HasColumnType("text");

                    b.Property<string>("RawText")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("SourceChannel")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)");

                    b.Property<string>("SourceUrl")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<int>("Status")
                        .HasColumnType("integer");

                    b.Property<string>("ValidationNotes")
                        .HasMaxLength(1000)
                        .HasColumnType("character varying(1000)");

                    b.HasKey("Id");

                    b.HasIndex("ContentHash");

                    b.HasIndex("LinkedShiftId");

                    b.HasIndex("Status");

                    b.ToTable("RawListings");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Role", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Category")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)");

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)");

                    b.Property<int>("SortOrder")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.ToTable("Roles");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Shift", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<DateOnly>("Date")
                        .HasColumnType("date");

                    b.Property<string>("Description")
                        .HasMaxLength(1500)
                        .HasColumnType("character varying(1500)");

                    b.Property<TimeOnly>("EndTime")
                        .HasColumnType("time without time zone");

                    b.Property<int>("FacilityId")
                        .HasColumnType("integer");

                    b.Property<int>("GenderRequirement")
                        .HasColumnType("integer");

                    b.Property<long?>("PayAmount")
                        .HasColumnType("bigint");

                    b.Property<int>("PayType")
                        .HasColumnType("integer");

                    b.Property<int>("RoleId")
                        .HasColumnType("integer");

                    b.Property<int?>("SharePercent")
                        .HasColumnType("integer");

                    b.Property<int>("ShiftType")
                        .HasColumnType("integer");

                    b.Property<int>("Source")
                        .HasColumnType("integer");

                    b.Property<string>("SourceUrl")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)");

                    b.Property<string>("SpecialtyRequired")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)");

                    b.Property<TimeOnly>("StartTime")
                        .HasColumnType("time without time zone");

                    b.Property<int>("Status")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("FacilityId");

                    b.HasIndex("RoleId");

                    b.HasIndex("Date", "Status");

                    b.ToTable("Shifts");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.User", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("FullName")
                        .HasMaxLength(150)
                        .HasColumnType("character varying(150)");

                    b.Property<bool>("IsPhoneVerified")
                        .HasColumnType("boolean");

                    b.Property<string>("Phone")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)");

                    b.Property<int>("Role")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("Phone")
                        .IsUnique();

                    b.ToTable("Users");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.UserPreferences", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int?>("CityId")
                        .HasColumnType("integer");

                    b.Property<int>("Gender")
                        .HasColumnType("integer");

                    b.Property<long?>("MinPay")
                        .HasColumnType("bigint");

                    b.Property<int?>("PreferredShiftType")
                        .HasColumnType("integer");

                    b.Property<int?>("RoleId")
                        .HasColumnType("integer");

                    b.Property<DateTime>("UpdatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("VisitorId")
                        .IsRequired()
                        .HasColumnType("character varying(36)");

                    b.HasKey("Id");

                    b.HasIndex("CityId");

                    b.HasIndex("RoleId");

                    b.HasIndex("VisitorId")
                        .IsUnique();

                    b.ToTable("UserPreferences");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Visitor", b =>
                {
                    b.Property<string>("Id")
                        .HasMaxLength(36)
                        .HasColumnType("character varying(36)");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<DateTime>("LastSeenAt")
                        .HasColumnType("timestamp with time zone");

                    b.Property<int?>("UserId")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("UserId");

                    b.ToTable("Visitors");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Application", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.User", "Doctor")
                        .WithMany("Applications")
                        .HasForeignKey("DoctorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("JobsMedical.Web.Models.Shift", "Shift")
                        .WithMany("Applications")
                        .HasForeignKey("ShiftId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Doctor");

                    b.Navigation("Shift");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.District", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.City", "City")
                        .WithMany()
                        .HasForeignKey("CityId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("City");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.DoctorProfile", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.City", "City")
                        .WithMany()
                        .HasForeignKey("CityId");

                    b.HasOne("JobsMedical.Web.Models.Role", "Role")
                        .WithMany()
                        .HasForeignKey("RoleId");

                    b.HasOne("JobsMedical.Web.Models.User", "User")
                        .WithOne("DoctorProfile")
                        .HasForeignKey("JobsMedical.Web.Models.DoctorProfile", "UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("City");

                    b.Navigation("Role");

                    b.Navigation("User");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Facility", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.City", "City")
                        .WithMany("Facilities")
                        .HasForeignKey("CityId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("JobsMedical.Web.Models.District", "District")
                        .WithMany("Facilities")
                        .HasForeignKey("DistrictId")
                        .OnDelete(DeleteBehavior.SetNull);

                    b.HasOne("JobsMedical.Web.Models.User", "OwnerUser")
                        .WithMany()
                        .HasForeignKey("OwnerUserId")
                        .OnDelete(DeleteBehavior.SetNull);

                    b.Navigation("City");

                    b.Navigation("District");

                    b.Navigation("OwnerUser");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.InterestEvent", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.JobOpening", "JobOpening")
                        .WithMany()
                        .HasForeignKey("JobOpeningId")
                        .OnDelete(DeleteBehavior.Cascade);

                    b.HasOne("JobsMedical.Web.Models.Shift", "Shift")
                        .WithMany()
                        .HasForeignKey("ShiftId")
                        .OnDelete(DeleteBehavior.Cascade);

                    b.HasOne("JobsMedical.Web.Models.Visitor", "Visitor")
                        .WithMany("Events")
                        .HasForeignKey("VisitorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("JobOpening");

                    b.Navigation("Shift");

                    b.Navigation("Visitor");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.JobOpening", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.Facility", "Facility")
                        .WithMany()
                        .HasForeignKey("FacilityId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("JobsMedical.Web.Models.Role", "Role")
                        .WithMany()
                        .HasForeignKey("RoleId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Facility");

                    b.Navigation("Role");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.RawListing", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.Shift", "LinkedShift")
                        .WithMany()
                        .HasForeignKey("LinkedShiftId");

                    b.Navigation("LinkedShift");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Shift", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.Facility", "Facility")
                        .WithMany("Shifts")
                        .HasForeignKey("FacilityId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("JobsMedical.Web.Models.Role", "Role")
                        .WithMany("Shifts")
                        .HasForeignKey("RoleId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Facility");

                    b.Navigation("Role");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.UserPreferences", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.City", "City")
                        .WithMany()
                        .HasForeignKey("CityId");

                    b.HasOne("JobsMedical.Web.Models.Role", "Role")
                        .WithMany()
                        .HasForeignKey("RoleId");

                    b.HasOne("JobsMedical.Web.Models.Visitor", "Visitor")
                        .WithOne("Preferences")
                        .HasForeignKey("JobsMedical.Web.Models.UserPreferences", "VisitorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("City");

                    b.Navigation("Role");

                    b.Navigation("Visitor");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Visitor", b =>
                {
                    b.HasOne("JobsMedical.Web.Models.User", "User")
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.SetNull);

                    b.Navigation("User");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.City", b =>
                {
                    b.Navigation("Facilities");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.District", b =>
                {
                    b.Navigation("Facilities");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Facility", b =>
                {
                    b.Navigation("Shifts");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Role", b =>
                {
                    b.Navigation("Shifts");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Shift", b =>
                {
                    b.Navigation("Applications");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.User", b =>
                {
                    b.Navigation("Applications");

                    b.Navigation("DoctorProfile");
                });

            modelBuilder.Entity("JobsMedical.Web.Models.Visitor", b =>
                {
                    b.Navigation("Events");

                    b.Navigation("Preferences");
                });
#pragma warning restore 612, 618
        }
    }
}
