@thejob/schema 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -61,9 +61,13 @@ __export(index_exports, {
61
61
  GroupTranslationSchema: () => GroupTranslationSchema,
62
62
  GroupVisibility: () => GroupVisibility,
63
63
  InputQuestionSchema: () => InputQuestionSchema,
64
+ JOB_TAXONOMY: () => JOB_TAXONOMY,
65
+ JobCategory: () => JobCategory,
66
+ JobIndustry: () => JobIndustry,
64
67
  JobSchema: () => JobSchema,
65
68
  JobSearchUrgency: () => JobSearchUrgency,
66
69
  JobStatus: () => JobStatus,
70
+ JobSubCategory: () => JobSubCategory,
67
71
  LocationSchema: () => LocationSchema,
68
72
  MIN_SALARY_LOWER_BOUND: () => MIN_SALARY_LOWER_BOUND,
69
73
  MIN_SALARY_UPPER_BOUND: () => MIN_SALARY_UPPER_BOUND,
@@ -71,6 +75,8 @@ __export(index_exports, {
71
75
  PageStatus: () => PageStatus,
72
76
  PageType: () => PageType,
73
77
  PaginationSchema: () => PaginationSchema,
78
+ PostSchema: () => PostSchema,
79
+ PostStatus: () => PostStatus,
74
80
  ProficiencyLevel: () => ProficiencyLevel,
75
81
  QuestionSchema: () => QuestionSchema,
76
82
  QuestionType: () => QuestionType,
@@ -95,10 +101,14 @@ __export(index_exports, {
95
101
  SupportedEmployeeCounts: () => SupportedEmployeeCounts,
96
102
  SupportedEmploymentTypes: () => SupportedEmploymentTypes,
97
103
  SupportedExperienceLevels: () => SupportedExperienceLevels,
104
+ SupportedJobCategories: () => SupportedJobCategories,
105
+ SupportedJobIndustries: () => SupportedJobIndustries,
98
106
  SupportedJobSearchUrgencies: () => SupportedJobSearchUrgencies,
99
107
  SupportedJobStatuses: () => SupportedJobStatuses,
108
+ SupportedJobSubCategories: () => SupportedJobSubCategories,
100
109
  SupportedPageStatuses: () => SupportedPageStatuses,
101
110
  SupportedPageTypes: () => SupportedPageTypes,
111
+ SupportedPostStatuses: () => SupportedPostStatuses,
102
112
  SupportedProficiencyLevels: () => SupportedProficiencyLevels,
103
113
  SupportedQuestionTypes: () => SupportedQuestionTypes,
104
114
  SupportedReferralSources: () => SupportedReferralSources,
@@ -111,6 +121,7 @@ __export(index_exports, {
111
121
  SupportedUserRoles: () => SupportedUserRoles,
112
122
  SupportedUserStatuses: () => SupportedUserStatuses,
113
123
  SupportedWorkModes: () => SupportedWorkModes,
124
+ TAXONOMY_LABELS: () => TAXONOMY_LABELS,
114
125
  TermsAcceptedSchema: () => TermsAcceptedSchema,
115
126
  UserAdditionalInfoSchema: () => UserAdditionalInfoSchema,
116
127
  UserCertificationSchema: () => UserCertificationSchema,
@@ -131,8 +142,14 @@ __export(index_exports, {
131
142
  UserStatus: () => UserStatus,
132
143
  WorkExperienceSchema: () => WorkExperienceSchema,
133
144
  WorkMode: () => WorkMode,
145
+ categoryOfIndustry: () => categoryOfIndustry,
146
+ categoryOfSubCategory: () => categoryOfSubCategory,
134
147
  dateString: () => dateString,
135
- getSchemaByQuestion: () => getSchemaByQuestion
148
+ deriveIndustry: () => deriveIndustry,
149
+ getSchemaByQuestion: () => getSchemaByQuestion,
150
+ industriesOfCategory: () => industriesOfCategory,
151
+ industryOfSubCategory: () => industryOfSubCategory,
152
+ subCategoriesOfIndustry: () => subCategoriesOfIndustry
136
153
  });
137
154
  module.exports = __toCommonJS(index_exports);
138
155
 
@@ -819,6 +836,20 @@ var JobSchema = (0, import_yup18.object)({
819
836
  keywords: (0, import_yup18.array)().of((0, import_yup18.string)()).optional().label("Keywords")
820
837
  }).nullable().optional().label("SEO Tags"),
821
838
  jdSummary: (0, import_yup18.string)().optional().label("JD Summary"),
839
+ /**
840
+ * Structured, model-extracted sections of the posting, re-organized into clean
841
+ * bullet points. This is our OWN unique presentation of the job (rendered as the
842
+ * primary, server-side page content) so the page adds value over the raw scraped
843
+ * description and is not penalized by Google as duplicate content. All sections
844
+ * optional: absent on jobs not yet (re-)enriched, and any section is `[]`/omitted
845
+ * when the posting genuinely has none.
846
+ */
847
+ jobHighlights: (0, import_yup18.object)({
848
+ responsibilities: (0, import_yup18.array)().of((0, import_yup18.string)()).optional().label("Responsibilities"),
849
+ requirements: (0, import_yup18.array)().of((0, import_yup18.string)()).optional().label("Requirements"),
850
+ benefits: (0, import_yup18.array)().of((0, import_yup18.string)()).optional().label("Benefits"),
851
+ qualifications: (0, import_yup18.array)().of((0, import_yup18.string)()).optional().label("Qualifications")
852
+ }).nullable().optional().label("Job Highlights"),
822
853
  canCreateAlert: (0, import_yup18.boolean)().optional().label("Can create alert"),
823
854
  canDirectApply: (0, import_yup18.boolean)().optional().label("Can direct apply"),
824
855
  hasApplied: (0, import_yup18.boolean)().optional().label("Has applied"),
@@ -835,6 +866,18 @@ var JobSchema = (0, import_yup18.object)({
835
866
  isNegotiable: (0, import_yup18.boolean)().nullable().optional().default(true).label("Is Negotiable")
836
867
  }).nullable().optional().label("Salary Range"),
837
868
  reports: (0, import_yup18.array)().of(UserIdAndCreatedAtSchema).optional().label("Reports"),
869
+ // Taxonomy fields are constants (see job-taxonomy.constant.ts), stored as slugs and
870
+ // translated for display. They are deliberately NOT `oneOf`-constrained here: a value
871
+ // outside the taxonomy must be DROPPED, never a reason to reject the posting. Yup
872
+ // `oneOf` fails the whole object, so one stale subCategory would cost a user their
873
+ // entire job on the create/edit form, and a single drifted LLM value would bin an
874
+ // otherwise-good enriched job.
875
+ //
876
+ // Callers sanitize instead: jobs-service's sanitizeTaxonomy() coerces unknown values
877
+ // to null / filters them out of the array before validation. Taxonomies change over
878
+ // time (values get renamed, retired, added), so stored jobs will always outlive the
879
+ // enum — being lenient here is what lets the taxonomy evolve without a migration
880
+ // gate on every write.
838
881
  category: (0, import_yup18.string)().nullable().optional().label("Category"),
839
882
  industry: (0, import_yup18.string)().nullable().optional().label("Industry"),
840
883
  subCategories: (0, import_yup18.array)().of((0, import_yup18.string)().trim().required()).nullable().optional().label("Sub Categories"),
@@ -844,15 +887,1175 @@ var JobSchema = (0, import_yup18.object)({
844
887
  featuredMarkets: (0, import_yup18.array)().of((0, import_yup18.string)().required()).optional().default([]).label("Featured markets")
845
888
  }).concat(DbDefaultSchema).noUnknown().label("Job");
846
889
 
847
- // src/pagination/pagination.schema.ts
890
+ // src/job/job-taxonomy.constant.ts
891
+ var JobCategory = /* @__PURE__ */ ((JobCategory2) => {
892
+ JobCategory2["TechnologyDataAndDigital"] = "technology_data_and_digital";
893
+ JobCategory2["HealthcareAndLifeSciences"] = "healthcare_and_life_sciences";
894
+ JobCategory2["AgricultureEnergyAndEnvironment"] = "agriculture_energy_and_environment";
895
+ JobCategory2["FinanceBankingAndLegal"] = "finance_banking_and_legal";
896
+ JobCategory2["ConstructionEngineeringAndTrades"] = "construction_engineering_and_trades";
897
+ JobCategory2["MarketingMediaAndCreative"] = "marketing_media_and_creative";
898
+ JobCategory2["LogisticsSalesAndOperations"] = "logistics_sales_and_operations";
899
+ JobCategory2["EducationAndPublicService"] = "education_and_public_service";
900
+ JobCategory2["HospitalityFoodAndTourism"] = "hospitality_food_and_tourism";
901
+ JobCategory2["ManufacturingAndProduction"] = "manufacturing_and_production";
902
+ JobCategory2["RetailAndConsumerServices"] = "retail_and_consumer_services";
903
+ JobCategory2["AutomotiveAndTransportServices"] = "automotive_and_transport_services";
904
+ return JobCategory2;
905
+ })(JobCategory || {});
906
+ var SupportedJobCategories = Object.values(JobCategory);
907
+ var JobIndustry = /* @__PURE__ */ ((JobIndustry2) => {
908
+ JobIndustry2["SoftwareAndWebDevelopment"] = "software_and_web_development";
909
+ JobIndustry2["DataAIAndAnalytics"] = "data_ai_and_analytics";
910
+ JobIndustry2["ITInfrastructureAndSecurity"] = "it_infrastructure_and_security";
911
+ JobIndustry2["ProductAndDesign"] = "product_and_design";
912
+ JobIndustry2["MedicalPractice"] = "medical_practice";
913
+ JobIndustry2["TherapyAndRehabilitation"] = "therapy_and_rehabilitation";
914
+ JobIndustry2["BioTechAndPharmaceuticals"] = "biotech_and_pharmaceuticals";
915
+ JobIndustry2["MentalHealth"] = "mental_health";
916
+ JobIndustry2["RenewableEnergy"] = "renewable_energy";
917
+ JobIndustry2["NaturalResourcesAndUtilities"] = "natural_resources_and_utilities";
918
+ JobIndustry2["AgricultureAndForestry"] = "agriculture_and_forestry";
919
+ JobIndustry2["EnvironmentalServices"] = "environmental_services";
920
+ JobIndustry2["BankingAndInvestments"] = "banking_and_investments";
921
+ JobIndustry2["FinTechAndInsurance"] = "fintech_and_insurance";
922
+ JobIndustry2["AccountingAndAudit"] = "accounting_and_audit";
923
+ JobIndustry2["LegalServices"] = "legal_services";
924
+ JobIndustry2["ArchitectureAndPlanning"] = "architecture_and_planning";
925
+ JobIndustry2["CivilAndIndustrialEngineering"] = "civil_and_industrial_engineering";
926
+ JobIndustry2["SkilledTrades"] = "skilled_trades";
927
+ JobIndustry2["MarketingAndAdvertising"] = "marketing_and_advertising";
928
+ JobIndustry2["MediaAndEntertainment"] = "media_and_entertainment";
929
+ JobIndustry2["CreativeArtsAndFashion"] = "creative_arts_and_fashion";
930
+ JobIndustry2["SupplyChainAndTransport"] = "supply_chain_and_transport";
931
+ JobIndustry2["SalesAndBusinessDevelopment"] = "sales_and_business_development";
932
+ JobIndustry2["HRAndAdmin"] = "hr_and_admin";
933
+ JobIndustry2["EducationAndTraining"] = "education_and_training";
934
+ JobIndustry2["GovernmentAndNonProfit"] = "government_and_non_profit";
935
+ JobIndustry2["FoodAndBeverageService"] = "food_and_beverage_service";
936
+ JobIndustry2["AccommodationAndTravel"] = "accommodation_and_travel";
937
+ JobIndustry2["ProductionAndAssembly"] = "production_and_assembly";
938
+ JobIndustry2["QualityAndProcess"] = "quality_and_process";
939
+ JobIndustry2["RetailOperations"] = "retail_operations";
940
+ JobIndustry2["CustomerService"] = "customer_service";
941
+ JobIndustry2["VehicleServiceAndRepair"] = "vehicle_service_and_repair";
942
+ JobIndustry2["DrivingAndTransport"] = "driving_and_transport";
943
+ return JobIndustry2;
944
+ })(JobIndustry || {});
945
+ var SupportedJobIndustries = Object.values(JobIndustry);
946
+ var JobSubCategory = /* @__PURE__ */ ((JobSubCategory2) => {
947
+ JobSubCategory2["Frontend"] = "frontend";
948
+ JobSubCategory2["Backend"] = "backend";
949
+ JobSubCategory2["FullStack"] = "full_stack";
950
+ JobSubCategory2["MobileAppDev"] = "mobile_app_dev";
951
+ JobSubCategory2["GameDevelopment"] = "game_development";
952
+ JobSubCategory2["EmbeddedSystems"] = "embedded_systems";
953
+ JobSubCategory2["QAAndTesting"] = "qa_and_testing";
954
+ JobSubCategory2["SoftwareEngineering"] = "software_engineering";
955
+ JobSubCategory2["WebDevelopment"] = "web_development";
956
+ JobSubCategory2["SoftwareArchitecture"] = "software_architecture";
957
+ JobSubCategory2["DataScience"] = "data_science";
958
+ JobSubCategory2["MachineLearning"] = "machine_learning";
959
+ JobSubCategory2["ArtificialIntelligence"] = "artificial_intelligence";
960
+ JobSubCategory2["BusinessIntelligence"] = "business_intelligence";
961
+ JobSubCategory2["DataEngineering"] = "data_engineering";
962
+ JobSubCategory2["DataVisualization"] = "data_visualization";
963
+ JobSubCategory2["DataAnalysis"] = "data_analysis";
964
+ JobSubCategory2["DeepLearning"] = "deep_learning";
965
+ JobSubCategory2["Cybersecurity"] = "cybersecurity";
966
+ JobSubCategory2["CloudEngineering"] = "cloud_engineering";
967
+ JobSubCategory2["DevOps"] = "devops";
968
+ JobSubCategory2["NetworkAdministration"] = "network_administration";
969
+ JobSubCategory2["SystemsEngineering"] = "systems_engineering";
970
+ JobSubCategory2["DatabaseAdministration"] = "database_administration";
971
+ JobSubCategory2["ITSupport"] = "it_support";
972
+ JobSubCategory2["TechnicalSupport"] = "technical_support";
973
+ JobSubCategory2["SiteReliabilityEngineering"] = "site_reliability_engineering";
974
+ JobSubCategory2["ProductManagement"] = "product_management";
975
+ JobSubCategory2["UIUXDesign"] = "ui_ux_design";
976
+ JobSubCategory2["UserResearch"] = "user_research";
977
+ JobSubCategory2["InteractionDesign"] = "interaction_design";
978
+ JobSubCategory2["TechnicalWriting"] = "technical_writing";
979
+ JobSubCategory2["ProductMarketing"] = "product_marketing";
980
+ JobSubCategory2["BusinessAnalysis"] = "business_analysis";
981
+ JobSubCategory2["ProjectManagement"] = "project_management";
982
+ JobSubCategory2["ProgramManagement"] = "program_management";
983
+ JobSubCategory2["Nursing"] = "nursing";
984
+ JobSubCategory2["GeneralPractice"] = "general_practice";
985
+ JobSubCategory2["Surgery"] = "surgery";
986
+ JobSubCategory2["Pediatrics"] = "pediatrics";
987
+ JobSubCategory2["EmergencyMedicine"] = "emergency_medicine";
988
+ JobSubCategory2["Radiology"] = "radiology";
989
+ JobSubCategory2["Anesthesiology"] = "anesthesiology";
990
+ JobSubCategory2["Geriatrics"] = "geriatrics";
991
+ JobSubCategory2["Oncology"] = "oncology";
992
+ JobSubCategory2["Dentistry"] = "dentistry";
993
+ JobSubCategory2["DentalHygiene"] = "dental_hygiene";
994
+ JobSubCategory2["MedicalSecretary"] = "medical_secretary";
995
+ JobSubCategory2["Veterinary"] = "veterinary";
996
+ JobSubCategory2["PhysicalTherapy"] = "physical_therapy";
997
+ JobSubCategory2["OccupationalTherapy"] = "occupational_therapy";
998
+ JobSubCategory2["SpeechPathology"] = "speech_pathology";
999
+ JobSubCategory2["RespiratoryTherapy"] = "respiratory_therapy";
1000
+ JobSubCategory2["ElderlyCare"] = "elderly_care";
1001
+ JobSubCategory2["DisabilitySupport"] = "disability_support";
1002
+ JobSubCategory2["ClinicalResearch"] = "clinical_research";
1003
+ JobSubCategory2["DrugDevelopment"] = "drug_development";
1004
+ JobSubCategory2["Bioinformatics"] = "bioinformatics";
1005
+ JobSubCategory2["Microbiology"] = "microbiology";
1006
+ JobSubCategory2["Pharmacology"] = "pharmacology";
1007
+ JobSubCategory2["LaboratoryTech"] = "laboratory_tech";
1008
+ JobSubCategory2["Psychology"] = "psychology";
1009
+ JobSubCategory2["Counseling"] = "counseling";
1010
+ JobSubCategory2["Psychiatry"] = "psychiatry";
1011
+ JobSubCategory2["SocialWork"] = "social_work";
1012
+ JobSubCategory2["AddictionRecovery"] = "addiction_recovery";
1013
+ JobSubCategory2["ChildWelfare"] = "child_welfare";
1014
+ JobSubCategory2["SolarEnergy"] = "solar_energy";
1015
+ JobSubCategory2["WindPower"] = "wind_power";
1016
+ JobSubCategory2["Hydroelectric"] = "hydroelectric";
1017
+ JobSubCategory2["BatteryAndStorageTech"] = "battery_and_storage_tech";
1018
+ JobSubCategory2["Geothermal"] = "geothermal";
1019
+ JobSubCategory2["Biofuels"] = "biofuels";
1020
+ JobSubCategory2["OilAndGas"] = "oil_and_gas";
1021
+ JobSubCategory2["MiningAndGeology"] = "mining_and_geology";
1022
+ JobSubCategory2["NuclearEnergy"] = "nuclear_energy";
1023
+ JobSubCategory2["WaterManagement"] = "water_management";
1024
+ JobSubCategory2["ElectricalGridOperations"] = "electrical_grid_operations";
1025
+ JobSubCategory2["AgriTech"] = "agri_tech";
1026
+ JobSubCategory2["Horticulture"] = "horticulture";
1027
+ JobSubCategory2["LivestockManagement"] = "livestock_management";
1028
+ JobSubCategory2["Forestry"] = "forestry";
1029
+ JobSubCategory2["FisheriesAndAquaculture"] = "fisheries_and_aquaculture";
1030
+ JobSubCategory2["SoilScience"] = "soil_science";
1031
+ JobSubCategory2["SustainabilityConsulting"] = "sustainability_consulting";
1032
+ JobSubCategory2["WasteManagement"] = "waste_management";
1033
+ JobSubCategory2["WildlifeConservation"] = "wildlife_conservation";
1034
+ JobSubCategory2["CarbonAccounting"] = "carbon_accounting";
1035
+ JobSubCategory2["Ecology"] = "ecology";
1036
+ JobSubCategory2["OccupationalHealthAndSafety"] = "occupational_health_and_safety";
1037
+ JobSubCategory2["Sustainability"] = "sustainability";
1038
+ JobSubCategory2["InvestmentBanking"] = "investment_banking";
1039
+ JobSubCategory2["CorporateFinance"] = "corporate_finance";
1040
+ JobSubCategory2["WealthManagement"] = "wealth_management";
1041
+ JobSubCategory2["VentureCapital"] = "venture_capital";
1042
+ JobSubCategory2["AssetManagement"] = "asset_management";
1043
+ JobSubCategory2["FinancialAnalysis"] = "financial_analysis";
1044
+ JobSubCategory2["FinancialPlanning"] = "financial_planning";
1045
+ JobSubCategory2["RiskManagement"] = "risk_management";
1046
+ JobSubCategory2["CreditAnalysis"] = "credit_analysis";
1047
+ JobSubCategory2["CryptocurrencyAndWeb3"] = "cryptocurrency_and_web3";
1048
+ JobSubCategory2["DigitalPayments"] = "digital_payments";
1049
+ JobSubCategory2["ActuarialScience"] = "actuarial_science";
1050
+ JobSubCategory2["InsuranceUnderwriting"] = "insurance_underwriting";
1051
+ JobSubCategory2["ClaimsAdjustment"] = "claims_adjustment";
1052
+ JobSubCategory2["PublicAccounting"] = "public_accounting";
1053
+ JobSubCategory2["Taxation"] = "taxation";
1054
+ JobSubCategory2["ForensicAccounting"] = "forensic_accounting";
1055
+ JobSubCategory2["AuditAndAssurance"] = "audit_and_assurance";
1056
+ JobSubCategory2["Bookkeeping"] = "bookkeeping";
1057
+ JobSubCategory2["AccountsPayable"] = "accounts_payable";
1058
+ JobSubCategory2["AccountsReceivable"] = "accounts_receivable";
1059
+ JobSubCategory2["Payroll"] = "payroll";
1060
+ JobSubCategory2["Collections"] = "collections";
1061
+ JobSubCategory2["CorporateLaw"] = "corporate_law";
1062
+ JobSubCategory2["Litigation"] = "litigation";
1063
+ JobSubCategory2["IntellectualProperty"] = "intellectual_property";
1064
+ JobSubCategory2["ComplianceAndRegulatory"] = "compliance_and_regulatory";
1065
+ JobSubCategory2["ParalegalServices"] = "paralegal_services";
1066
+ JobSubCategory2["Paralegal"] = "paralegal";
1067
+ JobSubCategory2["UrbanPlanning"] = "urban_planning";
1068
+ JobSubCategory2["InteriorDesign"] = "interior_design";
1069
+ JobSubCategory2["LandscapeArchitecture"] = "landscape_architecture";
1070
+ JobSubCategory2["CADBIMManagement"] = "cad_bim_management";
1071
+ JobSubCategory2["ConstructionManagement"] = "construction_management";
1072
+ JobSubCategory2["SiteSupervision"] = "site_supervision";
1073
+ JobSubCategory2["StructuralEngineering"] = "structural_engineering";
1074
+ JobSubCategory2["MechanicalEngineering"] = "mechanical_engineering";
1075
+ JobSubCategory2["ElectricalEngineering"] = "electrical_engineering";
1076
+ JobSubCategory2["RoboticsAndAutomation"] = "robotics_and_automation";
1077
+ JobSubCategory2["ChemicalEngineering"] = "chemical_engineering";
1078
+ JobSubCategory2["IndustrialEngineering"] = "industrial_engineering";
1079
+ JobSubCategory2["ProcessEngineering"] = "process_engineering";
1080
+ JobSubCategory2["Mechatronics"] = "mechatronics";
1081
+ JobSubCategory2["Electrician"] = "electrician";
1082
+ JobSubCategory2["PlumbingAndHVAC"] = "plumbing_and_hvac";
1083
+ JobSubCategory2["Carpentry"] = "carpentry";
1084
+ JobSubCategory2["Welding"] = "welding";
1085
+ JobSubCategory2["HeavyEquipmentOperation"] = "heavy_equipment_operation";
1086
+ JobSubCategory2["Masonry"] = "masonry";
1087
+ JobSubCategory2["Machining"] = "machining";
1088
+ JobSubCategory2["FacilitiesMaintenance"] = "facilities_maintenance";
1089
+ JobSubCategory2["DigitalMarketing"] = "digital_marketing";
1090
+ JobSubCategory2["SEOSEM"] = "seo_sem";
1091
+ JobSubCategory2["ContentStrategy"] = "content_strategy";
1092
+ JobSubCategory2["SocialMediaManagement"] = "social_media_management";
1093
+ JobSubCategory2["BrandManagement"] = "brand_management";
1094
+ JobSubCategory2["MarketResearch"] = "market_research";
1095
+ JobSubCategory2["MarketingStrategy"] = "marketing_strategy";
1096
+ JobSubCategory2["Journalism"] = "journalism";
1097
+ JobSubCategory2["VideoProduction"] = "video_production";
1098
+ JobSubCategory2["AnimationAndVFX"] = "animation_and_vfx";
1099
+ JobSubCategory2["AudioEngineering"] = "audio_engineering";
1100
+ JobSubCategory2["Photography"] = "photography";
1101
+ JobSubCategory2["Broadcasting"] = "broadcasting";
1102
+ JobSubCategory2["GraphicDesign"] = "graphic_design";
1103
+ JobSubCategory2["FineArts"] = "fine_arts";
1104
+ JobSubCategory2["FashionDesign"] = "fashion_design";
1105
+ JobSubCategory2["ApparelManufacturing"] = "apparel_manufacturing";
1106
+ JobSubCategory2["TextileDesign"] = "textile_design";
1107
+ JobSubCategory2["LogisticsManagement"] = "logistics_management";
1108
+ JobSubCategory2["Warehousing"] = "warehousing";
1109
+ JobSubCategory2["FleetOperations"] = "fleet_operations";
1110
+ JobSubCategory2["FreightForwarding"] = "freight_forwarding";
1111
+ JobSubCategory2["Procurement"] = "procurement";
1112
+ JobSubCategory2["Purchasing"] = "purchasing";
1113
+ JobSubCategory2["WarehouseOperations"] = "warehouse_operations";
1114
+ JobSubCategory2["FreightAndShipping"] = "freight_and_shipping";
1115
+ JobSubCategory2["EnterpriseSales"] = "enterprise_sales";
1116
+ JobSubCategory2["AccountManagement"] = "account_management";
1117
+ JobSubCategory2["RetailManagement"] = "retail_management";
1118
+ JobSubCategory2["RealEstateSales"] = "real_estate_sales";
1119
+ JobSubCategory2["CustomerSuccess"] = "customer_success";
1120
+ JobSubCategory2["SalesManagement"] = "sales_management";
1121
+ JobSubCategory2["SalesOperations"] = "sales_operations";
1122
+ JobSubCategory2["SalesSupport"] = "sales_support";
1123
+ JobSubCategory2["TechnicalSales"] = "technical_sales";
1124
+ JobSubCategory2["Recruiting"] = "recruiting";
1125
+ JobSubCategory2["CompensationAndBenefits"] = "compensation_and_benefits";
1126
+ JobSubCategory2["OfficeAdministration"] = "office_administration";
1127
+ JobSubCategory2["ExecutiveAssistance"] = "executive_assistance";
1128
+ JobSubCategory2["OrganizationalDevelopment"] = "organizational_development";
1129
+ JobSubCategory2["HROperations"] = "hr_operations";
1130
+ JobSubCategory2["TalentAcquisition"] = "talent_acquisition";
1131
+ JobSubCategory2["LearningAndDevelopment"] = "learning_and_development";
1132
+ JobSubCategory2["AdministrativeSupport"] = "administrative_support";
1133
+ JobSubCategory2["OfficeManagement"] = "office_management";
1134
+ JobSubCategory2["K12Teaching"] = "k_12_teaching";
1135
+ JobSubCategory2["HigherEducation"] = "higher_education";
1136
+ JobSubCategory2["SpecialEducation"] = "special_education";
1137
+ JobSubCategory2["ESLInstruction"] = "esl_instruction";
1138
+ JobSubCategory2["EdTech"] = "edtech";
1139
+ JobSubCategory2["CorporateTraining"] = "corporate_training";
1140
+ JobSubCategory2["PublicPolicy"] = "public_policy";
1141
+ JobSubCategory2["SocialServices"] = "social_services";
1142
+ JobSubCategory2["FundraisingAndGrants"] = "fundraising_and_grants";
1143
+ JobSubCategory2["LawEnforcement"] = "law_enforcement";
1144
+ JobSubCategory2["Military"] = "military";
1145
+ JobSubCategory2["Diplomacy"] = "diplomacy";
1146
+ JobSubCategory2["PublicAdministration"] = "public_administration";
1147
+ JobSubCategory2["RestaurantOperations"] = "restaurant_operations";
1148
+ JobSubCategory2["FoodPreparation"] = "food_preparation";
1149
+ JobSubCategory2["CulinaryArts"] = "culinary_arts";
1150
+ JobSubCategory2["BaristaAndBar"] = "barista_and_bar";
1151
+ JobSubCategory2["Catering"] = "catering";
1152
+ JobSubCategory2["FoodService"] = "food_service";
1153
+ JobSubCategory2["HotelOperations"] = "hotel_operations";
1154
+ JobSubCategory2["FrontDeskAndReception"] = "front_desk_and_reception";
1155
+ JobSubCategory2["Housekeeping"] = "housekeeping";
1156
+ JobSubCategory2["TravelAndTourism"] = "travel_and_tourism";
1157
+ JobSubCategory2["EventsAndConferences"] = "events_and_conferences";
1158
+ JobSubCategory2["Assembly"] = "assembly";
1159
+ JobSubCategory2["MachineOperation"] = "machine_operation";
1160
+ JobSubCategory2["ProductionManagement"] = "production_management";
1161
+ JobSubCategory2["ManufacturingEngineering"] = "manufacturing_engineering";
1162
+ JobSubCategory2["FoodProduction"] = "food_production";
1163
+ JobSubCategory2["Packaging"] = "packaging";
1164
+ JobSubCategory2["QualityAssurance"] = "quality_assurance";
1165
+ JobSubCategory2["QualityControl"] = "quality_control";
1166
+ JobSubCategory2["ProcessImprovement"] = "process_improvement";
1167
+ JobSubCategory2["MaintenanceAndReliability"] = "maintenance_and_reliability";
1168
+ JobSubCategory2["IndustrialSafety"] = "industrial_safety";
1169
+ JobSubCategory2["StoreManagement"] = "store_management";
1170
+ JobSubCategory2["SalesAssociate"] = "sales_associate";
1171
+ JobSubCategory2["VisualMerchandising"] = "visual_merchandising";
1172
+ JobSubCategory2["CashierAndCheckout"] = "cashier_and_checkout";
1173
+ JobSubCategory2["InventoryAndStock"] = "inventory_and_stock";
1174
+ JobSubCategory2["CustomerSupport"] = "customer_support";
1175
+ JobSubCategory2["CallCentre"] = "call_centre";
1176
+ JobSubCategory2["ClientAdvisory"] = "client_advisory";
1177
+ JobSubCategory2["ComplaintsAndEscalations"] = "complaints_and_escalations";
1178
+ JobSubCategory2["AutomotiveTechnician"] = "automotive_technician";
1179
+ JobSubCategory2["AutomotiveRepair"] = "automotive_repair";
1180
+ JobSubCategory2["HeavyVehicleMechanic"] = "heavy_vehicle_mechanic";
1181
+ JobSubCategory2["VehicleInspection"] = "vehicle_inspection";
1182
+ JobSubCategory2["AutoBodyAndPaint"] = "auto_body_and_paint";
1183
+ JobSubCategory2["TruckDriving"] = "truck_driving";
1184
+ JobSubCategory2["DeliveryAndCourier"] = "delivery_and_courier";
1185
+ JobSubCategory2["PublicTransport"] = "public_transport";
1186
+ JobSubCategory2["FleetManagement"] = "fleet_management";
1187
+ return JobSubCategory2;
1188
+ })(JobSubCategory || {});
1189
+ var SupportedJobSubCategories = Object.values(JobSubCategory);
1190
+ var JOB_TAXONOMY = [
1191
+ {
1192
+ category: "technology_data_and_digital" /* TechnologyDataAndDigital */,
1193
+ industries: [
1194
+ {
1195
+ industry: "software_and_web_development" /* SoftwareAndWebDevelopment */,
1196
+ subCategories: [
1197
+ "frontend" /* Frontend */,
1198
+ "backend" /* Backend */,
1199
+ "full_stack" /* FullStack */,
1200
+ "mobile_app_dev" /* MobileAppDev */,
1201
+ "game_development" /* GameDevelopment */,
1202
+ "embedded_systems" /* EmbeddedSystems */,
1203
+ "qa_and_testing" /* QAAndTesting */,
1204
+ "software_engineering" /* SoftwareEngineering */,
1205
+ "web_development" /* WebDevelopment */,
1206
+ "software_architecture" /* SoftwareArchitecture */
1207
+ ]
1208
+ },
1209
+ {
1210
+ industry: "data_ai_and_analytics" /* DataAIAndAnalytics */,
1211
+ subCategories: [
1212
+ "data_science" /* DataScience */,
1213
+ "machine_learning" /* MachineLearning */,
1214
+ "artificial_intelligence" /* ArtificialIntelligence */,
1215
+ "business_intelligence" /* BusinessIntelligence */,
1216
+ "data_engineering" /* DataEngineering */,
1217
+ "data_visualization" /* DataVisualization */,
1218
+ "data_analysis" /* DataAnalysis */,
1219
+ "deep_learning" /* DeepLearning */
1220
+ ]
1221
+ },
1222
+ {
1223
+ industry: "it_infrastructure_and_security" /* ITInfrastructureAndSecurity */,
1224
+ subCategories: [
1225
+ "cybersecurity" /* Cybersecurity */,
1226
+ "cloud_engineering" /* CloudEngineering */,
1227
+ "devops" /* DevOps */,
1228
+ "network_administration" /* NetworkAdministration */,
1229
+ "systems_engineering" /* SystemsEngineering */,
1230
+ "database_administration" /* DatabaseAdministration */,
1231
+ "it_support" /* ITSupport */,
1232
+ "technical_support" /* TechnicalSupport */,
1233
+ "site_reliability_engineering" /* SiteReliabilityEngineering */
1234
+ ]
1235
+ },
1236
+ {
1237
+ industry: "product_and_design" /* ProductAndDesign */,
1238
+ subCategories: [
1239
+ "product_management" /* ProductManagement */,
1240
+ "ui_ux_design" /* UIUXDesign */,
1241
+ "user_research" /* UserResearch */,
1242
+ "interaction_design" /* InteractionDesign */,
1243
+ "technical_writing" /* TechnicalWriting */,
1244
+ "product_marketing" /* ProductMarketing */,
1245
+ "business_analysis" /* BusinessAnalysis */,
1246
+ "project_management" /* ProjectManagement */,
1247
+ "program_management" /* ProgramManagement */
1248
+ ]
1249
+ }
1250
+ ]
1251
+ },
1252
+ {
1253
+ category: "healthcare_and_life_sciences" /* HealthcareAndLifeSciences */,
1254
+ industries: [
1255
+ {
1256
+ industry: "medical_practice" /* MedicalPractice */,
1257
+ subCategories: [
1258
+ "nursing" /* Nursing */,
1259
+ "general_practice" /* GeneralPractice */,
1260
+ "surgery" /* Surgery */,
1261
+ "pediatrics" /* Pediatrics */,
1262
+ "emergency_medicine" /* EmergencyMedicine */,
1263
+ "radiology" /* Radiology */,
1264
+ "anesthesiology" /* Anesthesiology */,
1265
+ "geriatrics" /* Geriatrics */,
1266
+ "oncology" /* Oncology */,
1267
+ "dentistry" /* Dentistry */,
1268
+ "dental_hygiene" /* DentalHygiene */,
1269
+ "medical_secretary" /* MedicalSecretary */,
1270
+ "veterinary" /* Veterinary */
1271
+ ]
1272
+ },
1273
+ {
1274
+ industry: "therapy_and_rehabilitation" /* TherapyAndRehabilitation */,
1275
+ subCategories: [
1276
+ "physical_therapy" /* PhysicalTherapy */,
1277
+ "occupational_therapy" /* OccupationalTherapy */,
1278
+ "speech_pathology" /* SpeechPathology */,
1279
+ "respiratory_therapy" /* RespiratoryTherapy */,
1280
+ "elderly_care" /* ElderlyCare */,
1281
+ "disability_support" /* DisabilitySupport */
1282
+ ]
1283
+ },
1284
+ {
1285
+ industry: "biotech_and_pharmaceuticals" /* BioTechAndPharmaceuticals */,
1286
+ subCategories: [
1287
+ "clinical_research" /* ClinicalResearch */,
1288
+ "drug_development" /* DrugDevelopment */,
1289
+ "bioinformatics" /* Bioinformatics */,
1290
+ "microbiology" /* Microbiology */,
1291
+ "pharmacology" /* Pharmacology */,
1292
+ "laboratory_tech" /* LaboratoryTech */
1293
+ ]
1294
+ },
1295
+ {
1296
+ industry: "mental_health" /* MentalHealth */,
1297
+ subCategories: [
1298
+ "psychology" /* Psychology */,
1299
+ "counseling" /* Counseling */,
1300
+ "psychiatry" /* Psychiatry */,
1301
+ "social_work" /* SocialWork */,
1302
+ "addiction_recovery" /* AddictionRecovery */,
1303
+ "child_welfare" /* ChildWelfare */
1304
+ ]
1305
+ }
1306
+ ]
1307
+ },
1308
+ {
1309
+ category: "agriculture_energy_and_environment" /* AgricultureEnergyAndEnvironment */,
1310
+ industries: [
1311
+ {
1312
+ industry: "renewable_energy" /* RenewableEnergy */,
1313
+ subCategories: [
1314
+ "solar_energy" /* SolarEnergy */,
1315
+ "wind_power" /* WindPower */,
1316
+ "hydroelectric" /* Hydroelectric */,
1317
+ "battery_and_storage_tech" /* BatteryAndStorageTech */,
1318
+ "geothermal" /* Geothermal */,
1319
+ "biofuels" /* Biofuels */
1320
+ ]
1321
+ },
1322
+ {
1323
+ industry: "natural_resources_and_utilities" /* NaturalResourcesAndUtilities */,
1324
+ subCategories: [
1325
+ "oil_and_gas" /* OilAndGas */,
1326
+ "mining_and_geology" /* MiningAndGeology */,
1327
+ "nuclear_energy" /* NuclearEnergy */,
1328
+ "water_management" /* WaterManagement */,
1329
+ "electrical_grid_operations" /* ElectricalGridOperations */
1330
+ ]
1331
+ },
1332
+ {
1333
+ industry: "agriculture_and_forestry" /* AgricultureAndForestry */,
1334
+ subCategories: [
1335
+ "agri_tech" /* AgriTech */,
1336
+ "horticulture" /* Horticulture */,
1337
+ "livestock_management" /* LivestockManagement */,
1338
+ "forestry" /* Forestry */,
1339
+ "fisheries_and_aquaculture" /* FisheriesAndAquaculture */,
1340
+ "soil_science" /* SoilScience */
1341
+ ]
1342
+ },
1343
+ {
1344
+ industry: "environmental_services" /* EnvironmentalServices */,
1345
+ subCategories: [
1346
+ "sustainability_consulting" /* SustainabilityConsulting */,
1347
+ "waste_management" /* WasteManagement */,
1348
+ "wildlife_conservation" /* WildlifeConservation */,
1349
+ "carbon_accounting" /* CarbonAccounting */,
1350
+ "ecology" /* Ecology */,
1351
+ "occupational_health_and_safety" /* OccupationalHealthAndSafety */,
1352
+ "sustainability" /* Sustainability */
1353
+ ]
1354
+ }
1355
+ ]
1356
+ },
1357
+ {
1358
+ category: "finance_banking_and_legal" /* FinanceBankingAndLegal */,
1359
+ industries: [
1360
+ {
1361
+ industry: "banking_and_investments" /* BankingAndInvestments */,
1362
+ subCategories: [
1363
+ "investment_banking" /* InvestmentBanking */,
1364
+ "corporate_finance" /* CorporateFinance */,
1365
+ "wealth_management" /* WealthManagement */,
1366
+ "venture_capital" /* VentureCapital */,
1367
+ "asset_management" /* AssetManagement */,
1368
+ "financial_analysis" /* FinancialAnalysis */,
1369
+ "financial_planning" /* FinancialPlanning */,
1370
+ "risk_management" /* RiskManagement */,
1371
+ "credit_analysis" /* CreditAnalysis */
1372
+ ]
1373
+ },
1374
+ {
1375
+ industry: "fintech_and_insurance" /* FinTechAndInsurance */,
1376
+ subCategories: [
1377
+ "cryptocurrency_and_web3" /* CryptocurrencyAndWeb3 */,
1378
+ "digital_payments" /* DigitalPayments */,
1379
+ "actuarial_science" /* ActuarialScience */,
1380
+ "insurance_underwriting" /* InsuranceUnderwriting */,
1381
+ "claims_adjustment" /* ClaimsAdjustment */
1382
+ ]
1383
+ },
1384
+ {
1385
+ industry: "accounting_and_audit" /* AccountingAndAudit */,
1386
+ subCategories: [
1387
+ "public_accounting" /* PublicAccounting */,
1388
+ "taxation" /* Taxation */,
1389
+ "forensic_accounting" /* ForensicAccounting */,
1390
+ "audit_and_assurance" /* AuditAndAssurance */,
1391
+ "bookkeeping" /* Bookkeeping */,
1392
+ "accounts_payable" /* AccountsPayable */,
1393
+ "accounts_receivable" /* AccountsReceivable */,
1394
+ "payroll" /* Payroll */,
1395
+ "collections" /* Collections */
1396
+ ]
1397
+ },
1398
+ {
1399
+ industry: "legal_services" /* LegalServices */,
1400
+ subCategories: [
1401
+ "corporate_law" /* CorporateLaw */,
1402
+ "litigation" /* Litigation */,
1403
+ "intellectual_property" /* IntellectualProperty */,
1404
+ "compliance_and_regulatory" /* ComplianceAndRegulatory */,
1405
+ "paralegal_services" /* ParalegalServices */,
1406
+ "paralegal" /* Paralegal */
1407
+ ]
1408
+ }
1409
+ ]
1410
+ },
1411
+ {
1412
+ category: "construction_engineering_and_trades" /* ConstructionEngineeringAndTrades */,
1413
+ industries: [
1414
+ {
1415
+ industry: "architecture_and_planning" /* ArchitectureAndPlanning */,
1416
+ subCategories: [
1417
+ "urban_planning" /* UrbanPlanning */,
1418
+ "interior_design" /* InteriorDesign */,
1419
+ "landscape_architecture" /* LandscapeArchitecture */,
1420
+ "cad_bim_management" /* CADBIMManagement */,
1421
+ "construction_management" /* ConstructionManagement */,
1422
+ "site_supervision" /* SiteSupervision */
1423
+ ]
1424
+ },
1425
+ {
1426
+ industry: "civil_and_industrial_engineering" /* CivilAndIndustrialEngineering */,
1427
+ subCategories: [
1428
+ "structural_engineering" /* StructuralEngineering */,
1429
+ "mechanical_engineering" /* MechanicalEngineering */,
1430
+ "electrical_engineering" /* ElectricalEngineering */,
1431
+ "robotics_and_automation" /* RoboticsAndAutomation */,
1432
+ "chemical_engineering" /* ChemicalEngineering */,
1433
+ "industrial_engineering" /* IndustrialEngineering */,
1434
+ "process_engineering" /* ProcessEngineering */,
1435
+ "mechatronics" /* Mechatronics */
1436
+ ]
1437
+ },
1438
+ {
1439
+ industry: "skilled_trades" /* SkilledTrades */,
1440
+ subCategories: [
1441
+ "electrician" /* Electrician */,
1442
+ "plumbing_and_hvac" /* PlumbingAndHVAC */,
1443
+ "carpentry" /* Carpentry */,
1444
+ "welding" /* Welding */,
1445
+ "heavy_equipment_operation" /* HeavyEquipmentOperation */,
1446
+ "masonry" /* Masonry */,
1447
+ "machining" /* Machining */,
1448
+ "facilities_maintenance" /* FacilitiesMaintenance */
1449
+ ]
1450
+ }
1451
+ ]
1452
+ },
1453
+ {
1454
+ category: "marketing_media_and_creative" /* MarketingMediaAndCreative */,
1455
+ industries: [
1456
+ {
1457
+ industry: "marketing_and_advertising" /* MarketingAndAdvertising */,
1458
+ subCategories: [
1459
+ "digital_marketing" /* DigitalMarketing */,
1460
+ "seo_sem" /* SEOSEM */,
1461
+ "content_strategy" /* ContentStrategy */,
1462
+ "social_media_management" /* SocialMediaManagement */,
1463
+ "brand_management" /* BrandManagement */,
1464
+ "market_research" /* MarketResearch */,
1465
+ "marketing_strategy" /* MarketingStrategy */
1466
+ ]
1467
+ },
1468
+ {
1469
+ industry: "media_and_entertainment" /* MediaAndEntertainment */,
1470
+ subCategories: [
1471
+ "journalism" /* Journalism */,
1472
+ "video_production" /* VideoProduction */,
1473
+ "animation_and_vfx" /* AnimationAndVFX */,
1474
+ "audio_engineering" /* AudioEngineering */,
1475
+ "photography" /* Photography */,
1476
+ "broadcasting" /* Broadcasting */
1477
+ ]
1478
+ },
1479
+ {
1480
+ industry: "creative_arts_and_fashion" /* CreativeArtsAndFashion */,
1481
+ subCategories: [
1482
+ "graphic_design" /* GraphicDesign */,
1483
+ "fine_arts" /* FineArts */,
1484
+ "fashion_design" /* FashionDesign */,
1485
+ "apparel_manufacturing" /* ApparelManufacturing */,
1486
+ "textile_design" /* TextileDesign */
1487
+ ]
1488
+ }
1489
+ ]
1490
+ },
1491
+ {
1492
+ category: "logistics_sales_and_operations" /* LogisticsSalesAndOperations */,
1493
+ industries: [
1494
+ {
1495
+ industry: "supply_chain_and_transport" /* SupplyChainAndTransport */,
1496
+ subCategories: [
1497
+ "logistics_management" /* LogisticsManagement */,
1498
+ "warehousing" /* Warehousing */,
1499
+ "fleet_operations" /* FleetOperations */,
1500
+ "freight_forwarding" /* FreightForwarding */,
1501
+ "procurement" /* Procurement */,
1502
+ "purchasing" /* Purchasing */,
1503
+ "warehouse_operations" /* WarehouseOperations */,
1504
+ "freight_and_shipping" /* FreightAndShipping */
1505
+ ]
1506
+ },
1507
+ {
1508
+ industry: "sales_and_business_development" /* SalesAndBusinessDevelopment */,
1509
+ subCategories: [
1510
+ "enterprise_sales" /* EnterpriseSales */,
1511
+ "account_management" /* AccountManagement */,
1512
+ "retail_management" /* RetailManagement */,
1513
+ "real_estate_sales" /* RealEstateSales */,
1514
+ "customer_success" /* CustomerSuccess */,
1515
+ "sales_management" /* SalesManagement */,
1516
+ "sales_operations" /* SalesOperations */,
1517
+ "sales_support" /* SalesSupport */,
1518
+ "technical_sales" /* TechnicalSales */
1519
+ ]
1520
+ },
1521
+ {
1522
+ industry: "hr_and_admin" /* HRAndAdmin */,
1523
+ subCategories: [
1524
+ "recruiting" /* Recruiting */,
1525
+ "compensation_and_benefits" /* CompensationAndBenefits */,
1526
+ "office_administration" /* OfficeAdministration */,
1527
+ "executive_assistance" /* ExecutiveAssistance */,
1528
+ "organizational_development" /* OrganizationalDevelopment */,
1529
+ "hr_operations" /* HROperations */,
1530
+ "talent_acquisition" /* TalentAcquisition */,
1531
+ "learning_and_development" /* LearningAndDevelopment */,
1532
+ "administrative_support" /* AdministrativeSupport */,
1533
+ "office_management" /* OfficeManagement */
1534
+ ]
1535
+ }
1536
+ ]
1537
+ },
1538
+ {
1539
+ category: "education_and_public_service" /* EducationAndPublicService */,
1540
+ industries: [
1541
+ {
1542
+ industry: "education_and_training" /* EducationAndTraining */,
1543
+ subCategories: [
1544
+ "k_12_teaching" /* K12Teaching */,
1545
+ "higher_education" /* HigherEducation */,
1546
+ "special_education" /* SpecialEducation */,
1547
+ "esl_instruction" /* ESLInstruction */,
1548
+ "edtech" /* EdTech */,
1549
+ "corporate_training" /* CorporateTraining */
1550
+ ]
1551
+ },
1552
+ {
1553
+ industry: "government_and_non_profit" /* GovernmentAndNonProfit */,
1554
+ subCategories: [
1555
+ "public_policy" /* PublicPolicy */,
1556
+ "social_services" /* SocialServices */,
1557
+ "fundraising_and_grants" /* FundraisingAndGrants */,
1558
+ "law_enforcement" /* LawEnforcement */,
1559
+ "military" /* Military */,
1560
+ "diplomacy" /* Diplomacy */,
1561
+ "public_administration" /* PublicAdministration */
1562
+ ]
1563
+ }
1564
+ ]
1565
+ },
1566
+ {
1567
+ category: "hospitality_food_and_tourism" /* HospitalityFoodAndTourism */,
1568
+ industries: [
1569
+ {
1570
+ industry: "food_and_beverage_service" /* FoodAndBeverageService */,
1571
+ subCategories: [
1572
+ "restaurant_operations" /* RestaurantOperations */,
1573
+ "food_preparation" /* FoodPreparation */,
1574
+ "culinary_arts" /* CulinaryArts */,
1575
+ "barista_and_bar" /* BaristaAndBar */,
1576
+ "catering" /* Catering */,
1577
+ "food_service" /* FoodService */
1578
+ ]
1579
+ },
1580
+ {
1581
+ industry: "accommodation_and_travel" /* AccommodationAndTravel */,
1582
+ subCategories: [
1583
+ "hotel_operations" /* HotelOperations */,
1584
+ "front_desk_and_reception" /* FrontDeskAndReception */,
1585
+ "housekeeping" /* Housekeeping */,
1586
+ "travel_and_tourism" /* TravelAndTourism */,
1587
+ "events_and_conferences" /* EventsAndConferences */
1588
+ ]
1589
+ }
1590
+ ]
1591
+ },
1592
+ {
1593
+ category: "manufacturing_and_production" /* ManufacturingAndProduction */,
1594
+ industries: [
1595
+ {
1596
+ industry: "production_and_assembly" /* ProductionAndAssembly */,
1597
+ subCategories: [
1598
+ "assembly" /* Assembly */,
1599
+ "machine_operation" /* MachineOperation */,
1600
+ "production_management" /* ProductionManagement */,
1601
+ "manufacturing_engineering" /* ManufacturingEngineering */,
1602
+ "food_production" /* FoodProduction */,
1603
+ "packaging" /* Packaging */
1604
+ ]
1605
+ },
1606
+ {
1607
+ industry: "quality_and_process" /* QualityAndProcess */,
1608
+ subCategories: [
1609
+ "quality_assurance" /* QualityAssurance */,
1610
+ "quality_control" /* QualityControl */,
1611
+ "process_improvement" /* ProcessImprovement */,
1612
+ "maintenance_and_reliability" /* MaintenanceAndReliability */,
1613
+ "industrial_safety" /* IndustrialSafety */
1614
+ ]
1615
+ }
1616
+ ]
1617
+ },
1618
+ {
1619
+ category: "retail_and_consumer_services" /* RetailAndConsumerServices */,
1620
+ industries: [
1621
+ {
1622
+ industry: "retail_operations" /* RetailOperations */,
1623
+ subCategories: [
1624
+ "store_management" /* StoreManagement */,
1625
+ "sales_associate" /* SalesAssociate */,
1626
+ "visual_merchandising" /* VisualMerchandising */,
1627
+ "cashier_and_checkout" /* CashierAndCheckout */,
1628
+ "inventory_and_stock" /* InventoryAndStock */
1629
+ ]
1630
+ },
1631
+ {
1632
+ industry: "customer_service" /* CustomerService */,
1633
+ subCategories: [
1634
+ "customer_support" /* CustomerSupport */,
1635
+ "call_centre" /* CallCentre */,
1636
+ "client_advisory" /* ClientAdvisory */,
1637
+ "complaints_and_escalations" /* ComplaintsAndEscalations */
1638
+ ]
1639
+ }
1640
+ ]
1641
+ },
1642
+ {
1643
+ category: "automotive_and_transport_services" /* AutomotiveAndTransportServices */,
1644
+ industries: [
1645
+ {
1646
+ industry: "vehicle_service_and_repair" /* VehicleServiceAndRepair */,
1647
+ subCategories: [
1648
+ "automotive_technician" /* AutomotiveTechnician */,
1649
+ "automotive_repair" /* AutomotiveRepair */,
1650
+ "heavy_vehicle_mechanic" /* HeavyVehicleMechanic */,
1651
+ "vehicle_inspection" /* VehicleInspection */,
1652
+ "auto_body_and_paint" /* AutoBodyAndPaint */
1653
+ ]
1654
+ },
1655
+ {
1656
+ industry: "driving_and_transport" /* DrivingAndTransport */,
1657
+ subCategories: [
1658
+ "truck_driving" /* TruckDriving */,
1659
+ "delivery_and_courier" /* DeliveryAndCourier */,
1660
+ "public_transport" /* PublicTransport */,
1661
+ "fleet_management" /* FleetManagement */
1662
+ ]
1663
+ }
1664
+ ]
1665
+ }
1666
+ ];
1667
+ var TAXONOMY_LABELS = {
1668
+ "technology_data_and_digital": "Technology, Data & Digital",
1669
+ "healthcare_and_life_sciences": "Healthcare & Life Sciences",
1670
+ "agriculture_energy_and_environment": "Agriculture, Energy & Environment",
1671
+ "finance_banking_and_legal": "Finance, Banking & Legal",
1672
+ "construction_engineering_and_trades": "Construction, Engineering & Trades",
1673
+ "marketing_media_and_creative": "Marketing, Media & Creative",
1674
+ "logistics_sales_and_operations": "Logistics, Sales & Operations",
1675
+ "education_and_public_service": "Education & Public Service",
1676
+ "hospitality_food_and_tourism": "Hospitality, Food & Tourism",
1677
+ "manufacturing_and_production": "Manufacturing & Production",
1678
+ "retail_and_consumer_services": "Retail & Consumer Services",
1679
+ "automotive_and_transport_services": "Automotive & Transport Services",
1680
+ "software_and_web_development": "Software & Web Development",
1681
+ "data_ai_and_analytics": "Data, AI & Analytics",
1682
+ "it_infrastructure_and_security": "IT Infrastructure & Security",
1683
+ "product_and_design": "Product & Design",
1684
+ "medical_practice": "Medical Practice",
1685
+ "therapy_and_rehabilitation": "Therapy & Rehabilitation",
1686
+ "biotech_and_pharmaceuticals": "BioTech & Pharmaceuticals",
1687
+ "mental_health": "Mental Health",
1688
+ "renewable_energy": "Renewable Energy",
1689
+ "natural_resources_and_utilities": "Natural Resources & Utilities",
1690
+ "agriculture_and_forestry": "Agriculture & Forestry",
1691
+ "environmental_services": "Environmental Services",
1692
+ "banking_and_investments": "Banking & Investments",
1693
+ "fintech_and_insurance": "FinTech & Insurance",
1694
+ "accounting_and_audit": "Accounting & Audit",
1695
+ "legal_services": "Legal Services",
1696
+ "architecture_and_planning": "Architecture & Planning",
1697
+ "civil_and_industrial_engineering": "Civil & Industrial Engineering",
1698
+ "skilled_trades": "Skilled Trades",
1699
+ "marketing_and_advertising": "Marketing & Advertising",
1700
+ "media_and_entertainment": "Media & Entertainment",
1701
+ "creative_arts_and_fashion": "Creative Arts & Fashion",
1702
+ "supply_chain_and_transport": "Supply Chain & Transport",
1703
+ "sales_and_business_development": "Sales & Business Development",
1704
+ "hr_and_admin": "HR & Admin",
1705
+ "education_and_training": "Education & Training",
1706
+ "government_and_non_profit": "Government & Non-Profit",
1707
+ "food_and_beverage_service": "Food & Beverage Service",
1708
+ "accommodation_and_travel": "Accommodation & Travel",
1709
+ "production_and_assembly": "Production & Assembly",
1710
+ "quality_and_process": "Quality & Process",
1711
+ "retail_operations": "Retail Operations",
1712
+ "customer_service": "Customer Service",
1713
+ "vehicle_service_and_repair": "Vehicle Service & Repair",
1714
+ "driving_and_transport": "Driving & Transport",
1715
+ "frontend": "Frontend",
1716
+ "backend": "Backend",
1717
+ "full_stack": "Full Stack",
1718
+ "mobile_app_dev": "Mobile App Dev",
1719
+ "game_development": "Game Development",
1720
+ "embedded_systems": "Embedded Systems",
1721
+ "qa_and_testing": "QA & Testing",
1722
+ "software_engineering": "Software Engineering",
1723
+ "web_development": "Web Development",
1724
+ "software_architecture": "Software Architecture",
1725
+ "data_science": "Data Science",
1726
+ "machine_learning": "Machine Learning",
1727
+ "artificial_intelligence": "Artificial Intelligence",
1728
+ "business_intelligence": "Business Intelligence",
1729
+ "data_engineering": "Data Engineering",
1730
+ "data_visualization": "Data Visualization",
1731
+ "data_analysis": "Data Analysis",
1732
+ "deep_learning": "Deep Learning",
1733
+ "cybersecurity": "Cybersecurity",
1734
+ "cloud_engineering": "Cloud Engineering",
1735
+ "devops": "DevOps",
1736
+ "network_administration": "Network Administration",
1737
+ "systems_engineering": "Systems Engineering",
1738
+ "database_administration": "Database Administration",
1739
+ "it_support": "IT Support",
1740
+ "technical_support": "Technical Support",
1741
+ "site_reliability_engineering": "Site Reliability Engineering",
1742
+ "product_management": "Product Management",
1743
+ "ui_ux_design": "UI/UX Design",
1744
+ "user_research": "User Research",
1745
+ "interaction_design": "Interaction Design",
1746
+ "technical_writing": "Technical Writing",
1747
+ "product_marketing": "Product Marketing",
1748
+ "business_analysis": "Business Analysis",
1749
+ "project_management": "Project Management",
1750
+ "program_management": "Program Management",
1751
+ "nursing": "Nursing",
1752
+ "general_practice": "General Practice",
1753
+ "surgery": "Surgery",
1754
+ "pediatrics": "Pediatrics",
1755
+ "emergency_medicine": "Emergency Medicine",
1756
+ "radiology": "Radiology",
1757
+ "anesthesiology": "Anesthesiology",
1758
+ "geriatrics": "Geriatrics",
1759
+ "oncology": "Oncology",
1760
+ "dentistry": "Dentistry",
1761
+ "dental_hygiene": "Dental Hygiene",
1762
+ "medical_secretary": "Medical Secretary",
1763
+ "veterinary": "Veterinary",
1764
+ "physical_therapy": "Physical Therapy",
1765
+ "occupational_therapy": "Occupational Therapy",
1766
+ "speech_pathology": "Speech Pathology",
1767
+ "respiratory_therapy": "Respiratory Therapy",
1768
+ "elderly_care": "Elderly Care",
1769
+ "disability_support": "Disability Support",
1770
+ "clinical_research": "Clinical Research",
1771
+ "drug_development": "Drug Development",
1772
+ "bioinformatics": "Bioinformatics",
1773
+ "microbiology": "Microbiology",
1774
+ "pharmacology": "Pharmacology",
1775
+ "laboratory_tech": "Laboratory Tech",
1776
+ "psychology": "Psychology",
1777
+ "counseling": "Counseling",
1778
+ "psychiatry": "Psychiatry",
1779
+ "social_work": "Social Work",
1780
+ "addiction_recovery": "Addiction Recovery",
1781
+ "child_welfare": "Child Welfare",
1782
+ "solar_energy": "Solar Energy",
1783
+ "wind_power": "Wind Power",
1784
+ "hydroelectric": "Hydroelectric",
1785
+ "battery_and_storage_tech": "Battery & Storage Tech",
1786
+ "geothermal": "Geothermal",
1787
+ "biofuels": "Biofuels",
1788
+ "oil_and_gas": "Oil & Gas",
1789
+ "mining_and_geology": "Mining & Geology",
1790
+ "nuclear_energy": "Nuclear Energy",
1791
+ "water_management": "Water Management",
1792
+ "electrical_grid_operations": "Electrical Grid Operations",
1793
+ "agri_tech": "Agri-Tech",
1794
+ "horticulture": "Horticulture",
1795
+ "livestock_management": "Livestock Management",
1796
+ "forestry": "Forestry",
1797
+ "fisheries_and_aquaculture": "Fisheries & Aquaculture",
1798
+ "soil_science": "Soil Science",
1799
+ "sustainability_consulting": "Sustainability Consulting",
1800
+ "waste_management": "Waste Management",
1801
+ "wildlife_conservation": "Wildlife Conservation",
1802
+ "carbon_accounting": "Carbon Accounting",
1803
+ "ecology": "Ecology",
1804
+ "occupational_health_and_safety": "Occupational Health & Safety",
1805
+ "sustainability": "Sustainability",
1806
+ "investment_banking": "Investment Banking",
1807
+ "corporate_finance": "Corporate Finance",
1808
+ "wealth_management": "Wealth Management",
1809
+ "venture_capital": "Venture Capital",
1810
+ "asset_management": "Asset Management",
1811
+ "financial_analysis": "Financial Analysis",
1812
+ "financial_planning": "Financial Planning",
1813
+ "risk_management": "Risk Management",
1814
+ "credit_analysis": "Credit Analysis",
1815
+ "cryptocurrency_and_web3": "Cryptocurrency & Web3",
1816
+ "digital_payments": "Digital Payments",
1817
+ "actuarial_science": "Actuarial Science",
1818
+ "insurance_underwriting": "Insurance Underwriting",
1819
+ "claims_adjustment": "Claims Adjustment",
1820
+ "public_accounting": "Public Accounting",
1821
+ "taxation": "Taxation",
1822
+ "forensic_accounting": "Forensic Accounting",
1823
+ "audit_and_assurance": "Audit & Assurance",
1824
+ "bookkeeping": "Bookkeeping",
1825
+ "accounts_payable": "Accounts Payable",
1826
+ "accounts_receivable": "Accounts Receivable",
1827
+ "payroll": "Payroll",
1828
+ "collections": "Collections",
1829
+ "corporate_law": "Corporate Law",
1830
+ "litigation": "Litigation",
1831
+ "intellectual_property": "Intellectual Property",
1832
+ "compliance_and_regulatory": "Compliance & Regulatory",
1833
+ "paralegal_services": "Paralegal Services",
1834
+ "paralegal": "Paralegal",
1835
+ "urban_planning": "Urban Planning",
1836
+ "interior_design": "Interior Design",
1837
+ "landscape_architecture": "Landscape Architecture",
1838
+ "cad_bim_management": "CAD/BIM Management",
1839
+ "construction_management": "Construction Management",
1840
+ "site_supervision": "Site Supervision",
1841
+ "structural_engineering": "Structural Engineering",
1842
+ "mechanical_engineering": "Mechanical Engineering",
1843
+ "electrical_engineering": "Electrical Engineering",
1844
+ "robotics_and_automation": "Robotics & Automation",
1845
+ "chemical_engineering": "Chemical Engineering",
1846
+ "industrial_engineering": "Industrial Engineering",
1847
+ "process_engineering": "Process Engineering",
1848
+ "mechatronics": "Mechatronics",
1849
+ "electrician": "Electrician",
1850
+ "plumbing_and_hvac": "Plumbing & HVAC",
1851
+ "carpentry": "Carpentry",
1852
+ "welding": "Welding",
1853
+ "heavy_equipment_operation": "Heavy Equipment Operation",
1854
+ "masonry": "Masonry",
1855
+ "machining": "Machining",
1856
+ "facilities_maintenance": "Facilities Maintenance",
1857
+ "digital_marketing": "Digital Marketing",
1858
+ "seo_sem": "SEO/SEM",
1859
+ "content_strategy": "Content Strategy",
1860
+ "social_media_management": "Social Media Management",
1861
+ "brand_management": "Brand Management",
1862
+ "market_research": "Market Research",
1863
+ "marketing_strategy": "Marketing Strategy",
1864
+ "journalism": "Journalism",
1865
+ "video_production": "Video Production",
1866
+ "animation_and_vfx": "Animation & VFX",
1867
+ "audio_engineering": "Audio Engineering",
1868
+ "photography": "Photography",
1869
+ "broadcasting": "Broadcasting",
1870
+ "graphic_design": "Graphic Design",
1871
+ "fine_arts": "Fine Arts",
1872
+ "fashion_design": "Fashion Design",
1873
+ "apparel_manufacturing": "Apparel Manufacturing",
1874
+ "textile_design": "Textile Design",
1875
+ "logistics_management": "Logistics Management",
1876
+ "warehousing": "Warehousing",
1877
+ "fleet_operations": "Fleet Operations",
1878
+ "freight_forwarding": "Freight Forwarding",
1879
+ "procurement": "Procurement",
1880
+ "purchasing": "Purchasing",
1881
+ "warehouse_operations": "Warehouse Operations",
1882
+ "freight_and_shipping": "Freight & Shipping",
1883
+ "enterprise_sales": "Enterprise Sales",
1884
+ "account_management": "Account Management",
1885
+ "retail_management": "Retail Management",
1886
+ "real_estate_sales": "Real Estate Sales",
1887
+ "customer_success": "Customer Success",
1888
+ "sales_management": "Sales Management",
1889
+ "sales_operations": "Sales Operations",
1890
+ "sales_support": "Sales Support",
1891
+ "technical_sales": "Technical Sales",
1892
+ "recruiting": "Recruiting",
1893
+ "compensation_and_benefits": "Compensation & Benefits",
1894
+ "office_administration": "Office Administration",
1895
+ "executive_assistance": "Executive Assistance",
1896
+ "organizational_development": "Organizational Development",
1897
+ "hr_operations": "HR Operations",
1898
+ "talent_acquisition": "Talent Acquisition",
1899
+ "learning_and_development": "Learning & Development",
1900
+ "administrative_support": "Administrative Support",
1901
+ "office_management": "Office Management",
1902
+ "k_12_teaching": "K-12 Teaching",
1903
+ "higher_education": "Higher Education",
1904
+ "special_education": "Special Education",
1905
+ "esl_instruction": "ESL Instruction",
1906
+ "edtech": "EdTech",
1907
+ "corporate_training": "Corporate Training",
1908
+ "public_policy": "Public Policy",
1909
+ "social_services": "Social Services",
1910
+ "fundraising_and_grants": "Fundraising & Grants",
1911
+ "law_enforcement": "Law Enforcement",
1912
+ "military": "Military",
1913
+ "diplomacy": "Diplomacy",
1914
+ "public_administration": "Public Administration",
1915
+ "restaurant_operations": "Restaurant Operations",
1916
+ "food_preparation": "Food Preparation",
1917
+ "culinary_arts": "Culinary Arts",
1918
+ "barista_and_bar": "Barista & Bar",
1919
+ "catering": "Catering",
1920
+ "food_service": "Food Service",
1921
+ "hotel_operations": "Hotel Operations",
1922
+ "front_desk_and_reception": "Front Desk & Reception",
1923
+ "housekeeping": "Housekeeping",
1924
+ "travel_and_tourism": "Travel & Tourism",
1925
+ "events_and_conferences": "Events & Conferences",
1926
+ "assembly": "Assembly",
1927
+ "machine_operation": "Machine Operation",
1928
+ "production_management": "Production Management",
1929
+ "manufacturing_engineering": "Manufacturing Engineering",
1930
+ "food_production": "Food Production",
1931
+ "packaging": "Packaging",
1932
+ "quality_assurance": "Quality Assurance",
1933
+ "quality_control": "Quality Control",
1934
+ "process_improvement": "Process Improvement",
1935
+ "maintenance_and_reliability": "Maintenance & Reliability",
1936
+ "industrial_safety": "Industrial Safety",
1937
+ "store_management": "Store Management",
1938
+ "sales_associate": "Sales Associate",
1939
+ "visual_merchandising": "Visual Merchandising",
1940
+ "cashier_and_checkout": "Cashier & Checkout",
1941
+ "inventory_and_stock": "Inventory & Stock",
1942
+ "customer_support": "Customer Support",
1943
+ "call_centre": "Call Centre",
1944
+ "client_advisory": "Client Advisory",
1945
+ "complaints_and_escalations": "Complaints & Escalations",
1946
+ "automotive_technician": "Automotive Technician",
1947
+ "automotive_repair": "Automotive Repair",
1948
+ "heavy_vehicle_mechanic": "Heavy Vehicle Mechanic",
1949
+ "vehicle_inspection": "Vehicle Inspection",
1950
+ "auto_body_and_paint": "Auto Body & Paint",
1951
+ "truck_driving": "Truck Driving",
1952
+ "delivery_and_courier": "Delivery & Courier",
1953
+ "public_transport": "Public Transport",
1954
+ "fleet_management": "Fleet Management"
1955
+ };
1956
+
1957
+ // src/job/job-taxonomy.util.ts
1958
+ var INDUSTRY_OF_SUB = new Map(
1959
+ JOB_TAXONOMY.flatMap(
1960
+ (c) => c.industries.flatMap((i) => i.subCategories.map((s) => [s, i.industry]))
1961
+ )
1962
+ );
1963
+ var CATEGORY_OF_SUB = new Map(
1964
+ JOB_TAXONOMY.flatMap(
1965
+ (c) => c.industries.flatMap((i) => i.subCategories.map((s) => [s, c.category]))
1966
+ )
1967
+ );
1968
+ var CATEGORY_OF_INDUSTRY = new Map(
1969
+ JOB_TAXONOMY.flatMap((c) => c.industries.map((i) => [i.industry, c.category]))
1970
+ );
1971
+ function industryOfSubCategory(sub) {
1972
+ return INDUSTRY_OF_SUB.get(sub);
1973
+ }
1974
+ function categoryOfSubCategory(sub) {
1975
+ return CATEGORY_OF_SUB.get(sub);
1976
+ }
1977
+ function categoryOfIndustry(industry) {
1978
+ return CATEGORY_OF_INDUSTRY.get(industry);
1979
+ }
1980
+ function industriesOfCategory(category) {
1981
+ return JOB_TAXONOMY.find((c) => c.category === category)?.industries.map((i) => i.industry) ?? [];
1982
+ }
1983
+ function subCategoriesOfIndustry(industry) {
1984
+ for (const c of JOB_TAXONOMY) {
1985
+ for (const i of c.industries) if (i.industry === industry) return i.subCategories;
1986
+ }
1987
+ return [];
1988
+ }
1989
+ function deriveIndustry(category, subCategories) {
1990
+ const subs = (subCategories ?? []).filter((s) => INDUSTRY_OF_SUB.has(s));
1991
+ if (subs.length === 0) return void 0;
1992
+ if (category) {
1993
+ const inCategory = subs.find((s) => CATEGORY_OF_SUB.get(s) === category);
1994
+ if (inCategory) return INDUSTRY_OF_SUB.get(inCategory);
1995
+ return void 0;
1996
+ }
1997
+ return INDUSTRY_OF_SUB.get(subs[0]);
1998
+ }
1999
+
2000
+ // src/post/post.schema.ts
848
2001
  var import_yup19 = require("yup");
849
- var PaginationSchema = (0, import_yup19.object)().shape({
850
- page: (0, import_yup19.number)().required().min(1).label("Page").default(1),
851
- limit: (0, import_yup19.number)().required().min(1).max(100).label("Limit").default(10),
852
- sortBy: (0, import_yup19.string)().notOneOf([""]).optional().label("SortBy"),
853
- nextPage: (0, import_yup19.string)().optional().label("Next Page Token"),
854
- prevPage: (0, import_yup19.string)().optional().label("Previous Page Token"),
855
- sortDirection: (0, import_yup19.string)().oneOf(["asc", "desc"]).optional().label("Sort Direction")
2002
+
2003
+ // src/post/post.constant.ts
2004
+ var PostStatus = /* @__PURE__ */ ((PostStatus2) => {
2005
+ PostStatus2["Draft"] = "draft";
2006
+ PostStatus2["Published"] = "published";
2007
+ PostStatus2["Archived"] = "archived";
2008
+ return PostStatus2;
2009
+ })(PostStatus || {});
2010
+ var SupportedPostStatuses = Object.values(PostStatus);
2011
+
2012
+ // src/post/post.schema.ts
2013
+ var PostSchema = (0, import_yup19.object)({
2014
+ /** Headline shown in listings and at the top of the post. */
2015
+ title: (0, import_yup19.string)().required().min(5).max(200).label("Title"),
2016
+ /** User-friendly, unique URL identifier. */
2017
+ slug: (0, import_yup19.string)().required().max(250).label("Slug"),
2018
+ /** Short summary used in listings and meta description fallback. */
2019
+ excerpt: (0, import_yup19.string)().max(500).optional().label("Excerpt"),
2020
+ /** Rendered HTML source of truth for the post body (sanitized on write/render).
2021
+ * Supports rich formatting markdown can't express (image size/alignment, etc). */
2022
+ bodyHTML: (0, import_yup19.string)().required().min(1).label("Body (HTML)"),
2023
+ /** Optional Markdown mirror of the body (portable text / search fallback).
2024
+ * Kept for back-compat and plain-text derivation; bodyHTML is authoritative. */
2025
+ bodyMarkdown: (0, import_yup19.string)().optional().label("Body (Markdown)"),
2026
+ /** Cover/hero image URL. Not `.url()`-validated: the value is either an
2027
+ * uploaded file URL served by this platform (which may be a bare host like
2028
+ * `http://localhost:3082/...` in dev, that yup's `.url()` wrongly rejects) or
2029
+ * an admin-pasted link. Kept as a plain string; empty ⇒ null. */
2030
+ coverImage: (0, import_yup19.string)().nullable().optional().label("Cover image"),
2031
+ /** Author (user id). */
2032
+ authorId: (0, import_yup19.string)().required().label("Author ID"),
2033
+ /** Free-form tags for filtering and related-posts. */
2034
+ tags: (0, import_yup19.array)().of((0, import_yup19.string)().trim().required()).default([]).label("Tags"),
2035
+ /** Estimated reading time in minutes (server-derived from body length). */
2036
+ readingTimeMinutes: (0, import_yup19.number)().min(0).optional().label("Reading time (minutes)"),
2037
+ /** SEO overrides. */
2038
+ seoTags: (0, import_yup19.object)({
2039
+ description: (0, import_yup19.string)().optional().label("Description"),
2040
+ keywords: (0, import_yup19.array)().of((0, import_yup19.string)().required()).optional().label("Keywords")
2041
+ }).nullable().optional().label("SEO Tags"),
2042
+ /** When the post was first published (epoch ms). Server-owned. */
2043
+ publishedAt: (0, import_yup19.number)().nullable().optional().label("Published at"),
2044
+ /** Whether the post is featured in the blog listing. */
2045
+ isFeatured: (0, import_yup19.boolean)().default(false).optional().label("Is featured"),
2046
+ /** Publication state. */
2047
+ status: (0, import_yup19.string)().oneOf(SupportedPostStatuses).default("draft" /* Draft */).required().label("Status")
2048
+ }).concat(DbDefaultSchema).noUnknown().label("Post");
2049
+
2050
+ // src/pagination/pagination.schema.ts
2051
+ var import_yup20 = require("yup");
2052
+ var PaginationSchema = (0, import_yup20.object)().shape({
2053
+ page: (0, import_yup20.number)().required().min(1).label("Page").default(1),
2054
+ limit: (0, import_yup20.number)().required().min(1).max(100).label("Limit").default(10),
2055
+ sortBy: (0, import_yup20.string)().notOneOf([""]).optional().label("SortBy"),
2056
+ nextPage: (0, import_yup20.string)().optional().label("Next Page Token"),
2057
+ prevPage: (0, import_yup20.string)().optional().label("Previous Page Token"),
2058
+ sortDirection: (0, import_yup20.string)().oneOf(["asc", "desc"]).optional().label("Sort Direction")
856
2059
  });
857
2060
 
858
2061
  // src/pagination/pagination.constant.ts
@@ -868,7 +2071,7 @@ var DefaultPaginationOptions = {
868
2071
  };
869
2072
 
870
2073
  // src/report/report.schema.ts
871
- var import_yup20 = require("yup");
2074
+ var import_yup21 = require("yup");
872
2075
 
873
2076
  // src/report/report.constant.ts
874
2077
  var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
@@ -892,15 +2095,15 @@ var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
892
2095
  var SupportedReportReasons = Object.values(ReportReason);
893
2096
 
894
2097
  // src/report/report.schema.ts
895
- var ReportSchema = (0, import_yup20.object)({
896
- type: (0, import_yup20.mixed)().oneOf(SupportedResourceTypes).required().label("Type"),
897
- resourceId: (0, import_yup20.string)().required().label("Resource ID"),
898
- reason: (0, import_yup20.mixed)().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
899
- comment: (0, import_yup20.string)().max(1e3).optional().label("Comment")
2098
+ var ReportSchema = (0, import_yup21.object)({
2099
+ type: (0, import_yup21.mixed)().oneOf(SupportedResourceTypes).required().label("Type"),
2100
+ resourceId: (0, import_yup21.string)().required().label("Resource ID"),
2101
+ reason: (0, import_yup21.mixed)().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
2102
+ comment: (0, import_yup21.string)().max(1e3).optional().label("Comment")
900
2103
  }).label("Report Schema");
901
2104
 
902
2105
  // src/user/user.schema.ts
903
- var import_yup33 = require("yup");
2106
+ var import_yup34 = require("yup");
904
2107
 
905
2108
  // src/user/user.constant.ts
906
2109
  var UserRole = /* @__PURE__ */ ((UserRole2) => {
@@ -982,51 +2185,51 @@ var MIN_SALARY_LOWER_BOUND = 0;
982
2185
  var MIN_SALARY_UPPER_BOUND = 1e6;
983
2186
 
984
2187
  // src/user/work-experience.schema.ts
985
- var import_yup21 = require("yup");
986
- var WorkExperienceSchema = (0, import_yup21.object)().shape({
2188
+ var import_yup22 = require("yup");
2189
+ var WorkExperienceSchema = (0, import_yup22.object)().shape({
987
2190
  company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
988
- designation: (0, import_yup21.string)().trim().required().label("Designation"),
2191
+ designation: (0, import_yup22.string)().trim().required().label("Designation"),
989
2192
  duration: DurationSchema({
990
2193
  format: "YYYY-MM",
991
2194
  startLabel: "Start Date",
992
2195
  endLabel: "End Date"
993
2196
  }).required().label("Duration"),
994
- description: (0, import_yup21.string)().trim().max(3e3).optional().label("Description"),
2197
+ description: (0, import_yup22.string)().trim().max(3e3).optional().label("Description"),
995
2198
  location: LocationSchema.required().label("Location"),
996
- isRemote: (0, import_yup21.boolean)().oneOf([true, false]).default(false).label("Is Remote")
2199
+ isRemote: (0, import_yup22.boolean)().oneOf([true, false]).default(false).label("Is Remote")
997
2200
  }).noUnknown().strict().label("Work Experience");
998
2201
 
999
2202
  // src/user/education.schema.ts
1000
- var import_yup22 = require("yup");
1001
- var EducationSchema = (0, import_yup22.object)({
2203
+ var import_yup23 = require("yup");
2204
+ var EducationSchema = (0, import_yup23.object)({
1002
2205
  institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
1003
- course: (0, import_yup22.string)().trim().required().label("Course"),
1004
- fieldOfStudy: (0, import_yup22.string)().trim().required().label("Field of Study"),
2206
+ course: (0, import_yup23.string)().trim().required().label("Course"),
2207
+ fieldOfStudy: (0, import_yup23.string)().trim().required().label("Field of Study"),
1005
2208
  duration: DurationSchema({
1006
2209
  format: "YYYY-MM",
1007
2210
  startLabel: "Start Date",
1008
2211
  endLabel: "End Date"
1009
2212
  }).required().label("Duration"),
1010
- description: (0, import_yup22.string)().trim().max(3e3).optional().label("Description"),
1011
- isDistanceLearning: (0, import_yup22.boolean)().default(false).label("Is Distance Learning"),
2213
+ description: (0, import_yup23.string)().trim().max(3e3).optional().label("Description"),
2214
+ isDistanceLearning: (0, import_yup23.boolean)().default(false).label("Is Distance Learning"),
1012
2215
  location: LocationSchema.required().label("Location"),
1013
- studyType: (0, import_yup22.string)().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
2216
+ studyType: (0, import_yup23.string)().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
1014
2217
  }).noUnknown().strict().label("Education");
1015
2218
 
1016
2219
  // src/user/user-skill.schema.ts
1017
- var import_yup23 = require("yup");
1018
- var UserSkillSchema = (0, import_yup23.object)({
1019
- name: (0, import_yup23.string)().required().label("Name"),
1020
- proficiencyLevel: (0, import_yup23.string)().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
2220
+ var import_yup24 = require("yup");
2221
+ var UserSkillSchema = (0, import_yup24.object)({
2222
+ name: (0, import_yup24.string)().required().label("Name"),
2223
+ proficiencyLevel: (0, import_yup24.string)().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
1021
2224
  lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
1022
2225
  }).noUnknown().strict().label("Skill");
1023
2226
 
1024
2227
  // src/user/project.schema.ts
1025
- var import_yup24 = require("yup");
1026
- var UserProjectSchema = (0, import_yup24.object)({
1027
- name: (0, import_yup24.string)().trim().max(50).required().label("Name"),
1028
- url: (0, import_yup24.string)().optional().label("URL"),
1029
- description: (0, import_yup24.string)().trim().min(100).max(3e3).required().label("Description"),
2228
+ var import_yup25 = require("yup");
2229
+ var UserProjectSchema = (0, import_yup25.object)({
2230
+ name: (0, import_yup25.string)().trim().max(50).required().label("Name"),
2231
+ url: (0, import_yup25.string)().optional().label("URL"),
2232
+ description: (0, import_yup25.string)().trim().min(100).max(3e3).required().label("Description"),
1030
2233
  duration: DurationSchema({
1031
2234
  format: "YYYY-MM",
1032
2235
  startLabel: "Start Date",
@@ -1035,83 +2238,83 @@ var UserProjectSchema = (0, import_yup24.object)({
1035
2238
  }).noUnknown().strict().label("Project");
1036
2239
 
1037
2240
  // src/user/user-certification.schema.ts
1038
- var import_yup25 = require("yup");
1039
- var UserCertificationSchema = (0, import_yup25.object)({
1040
- name: (0, import_yup25.string)().trim().max(100).required().label("Name"),
2241
+ var import_yup26 = require("yup");
2242
+ var UserCertificationSchema = (0, import_yup26.object)({
2243
+ name: (0, import_yup26.string)().trim().max(100).required().label("Name"),
1041
2244
  // TODO: Add validation for authority
1042
- authority: (0, import_yup25.string)().trim().max(100).required().label("Authority"),
1043
- licenseNumber: (0, import_yup25.string)().trim().max(50).optional().label("License Number"),
2245
+ authority: (0, import_yup26.string)().trim().max(100).required().label("Authority"),
2246
+ licenseNumber: (0, import_yup26.string)().trim().max(50).optional().label("License Number"),
1044
2247
  duration: DurationSchema({
1045
2248
  format: "YYYY-MM",
1046
2249
  startLabel: "Start Date",
1047
2250
  endLabel: "End Date"
1048
2251
  }).optional().nullable().label("Duration"),
1049
- url: (0, import_yup25.string)().optional().label("URL")
2252
+ url: (0, import_yup26.string)().optional().label("URL")
1050
2253
  }).noUnknown().strict().label("Certification");
1051
2254
 
1052
2255
  // src/user/user-interest.schema.ts
1053
- var import_yup26 = require("yup");
1054
- var UserInterestSchema = (0, import_yup26.string)().trim().required().label("Interest");
2256
+ var import_yup27 = require("yup");
2257
+ var UserInterestSchema = (0, import_yup27.string)().trim().required().label("Interest");
1055
2258
 
1056
2259
  // src/user/user-language.schema.ts
1057
- var import_yup27 = require("yup");
1058
- var UserLanguageSchema = (0, import_yup27.object)({
1059
- name: (0, import_yup27.string)().trim().required().label("Name"),
1060
- proficiencyLevel: (0, import_yup27.string)().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
2260
+ var import_yup28 = require("yup");
2261
+ var UserLanguageSchema = (0, import_yup28.object)({
2262
+ name: (0, import_yup28.string)().trim().required().label("Name"),
2263
+ proficiencyLevel: (0, import_yup28.string)().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
1061
2264
  }).noUnknown().strict().label("Language");
1062
2265
 
1063
2266
  // src/user/user-additional-info.schema.ts
1064
- var import_yup28 = require("yup");
1065
- var UserAdditionalInfoSchema = (0, import_yup28.object)({
1066
- title: (0, import_yup28.string)().trim().max(60).required().label("Title"),
1067
- description: (0, import_yup28.string)().trim().max(1e3).required().label("Description")
2267
+ var import_yup29 = require("yup");
2268
+ var UserAdditionalInfoSchema = (0, import_yup29.object)({
2269
+ title: (0, import_yup29.string)().trim().max(60).required().label("Title"),
2270
+ description: (0, import_yup29.string)().trim().max(1e3).required().label("Description")
1068
2271
  }).noUnknown().strict().label("User Additional Info");
1069
2272
 
1070
2273
  // src/user/general-detail.schema.ts
1071
- var import_yup29 = require("yup");
1072
- var UserGeneralDetailSchema = (0, import_yup29.object)({
1073
- id: (0, import_yup29.string)().optional().label("ID"),
1074
- name: (0, import_yup29.object)().shape({
1075
- first: (0, import_yup29.string)().trim().max(50).required().label("First Name"),
1076
- last: (0, import_yup29.string)().trim().max(50).optional().label("Last Name")
2274
+ var import_yup30 = require("yup");
2275
+ var UserGeneralDetailSchema = (0, import_yup30.object)({
2276
+ id: (0, import_yup30.string)().optional().label("ID"),
2277
+ name: (0, import_yup30.object)().shape({
2278
+ first: (0, import_yup30.string)().trim().max(50).required().label("First Name"),
2279
+ last: (0, import_yup30.string)().trim().max(50).optional().label("Last Name")
1077
2280
  }).required().label("Name"),
1078
- headline: (0, import_yup29.string)().trim().max(200).optional().label("Headline"),
1079
- image: (0, import_yup29.string)().optional().label("Image"),
1080
- aboutMe: (0, import_yup29.string)().trim().max(3e3).optional().label("About Me"),
1081
- email: (0, import_yup29.string)().required().label("Email"),
1082
- mobile: (0, import_yup29.string)().nullable().optional().label("Mobile"),
1083
- emailVerified: (0, import_yup29.string)().nullable().optional().label("Email Verified"),
1084
- mobileVerified: (0, import_yup29.string)().nullable().optional().label("Mobile Verified"),
1085
- experienceLevel: (0, import_yup29.string)().oneOf(SupportedExperienceLevels).required().label("Experience level"),
2281
+ headline: (0, import_yup30.string)().trim().max(200).optional().label("Headline"),
2282
+ image: (0, import_yup30.string)().optional().label("Image"),
2283
+ aboutMe: (0, import_yup30.string)().trim().max(3e3).optional().label("About Me"),
2284
+ email: (0, import_yup30.string)().required().label("Email"),
2285
+ mobile: (0, import_yup30.string)().nullable().optional().label("Mobile"),
2286
+ emailVerified: (0, import_yup30.string)().nullable().optional().label("Email Verified"),
2287
+ mobileVerified: (0, import_yup30.string)().nullable().optional().label("Mobile Verified"),
2288
+ experienceLevel: (0, import_yup30.string)().oneOf(SupportedExperienceLevels).required().label("Experience level"),
1086
2289
  location: LocationSchema.required().label("Location"),
1087
- region: (0, import_yup29.object)().shape({
1088
- country: (0, import_yup29.string)().trim().required().label("Region Country"),
1089
- lang: (0, import_yup29.string)().trim().required().label("Region Language")
2290
+ region: (0, import_yup30.object)().shape({
2291
+ country: (0, import_yup30.string)().trim().required().label("Region Country"),
2292
+ lang: (0, import_yup30.string)().trim().required().label("Region Language")
1090
2293
  }).optional().default(void 0).label("Region"),
1091
- profileVisibility: (0, import_yup29.string)().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
2294
+ profileVisibility: (0, import_yup30.string)().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
1092
2295
  }).noUnknown().strict().label("General Detail");
1093
2296
 
1094
2297
  // src/user/user-job-preferences.schema.ts
1095
- var import_yup30 = require("yup");
1096
- var UserJobPreferencesSchema = (0, import_yup30.object)({
2298
+ var import_yup31 = require("yup");
2299
+ var UserJobPreferencesSchema = (0, import_yup31.object)({
1097
2300
  /**
1098
2301
  * Whether the job seeker is openly signalling availability. Surfaces the
1099
2302
  * "Open to work" badge on the public profile and boosts visibility in
1100
2303
  * recruiter search. Defaults to `false` - users must opt in.
1101
2304
  */
1102
- openToWork: (0, import_yup30.boolean)().default(false).label("Open to Work"),
2305
+ openToWork: (0, import_yup31.boolean)().default(false).label("Open to Work"),
1103
2306
  /**
1104
2307
  * How urgently the user is looking for their next job. Drives match scoring
1105
2308
  * and can downgrade the visibility of expired or low-relevance postings for
1106
2309
  * users in `passively_browsing` mode.
1107
2310
  */
1108
- jobSearchUrgency: (0, import_yup30.string)().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
2311
+ jobSearchUrgency: (0, import_yup31.string)().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
1109
2312
  /**
1110
2313
  * Locations the user wants to work in. Stores the full `LocationSchema`
1111
2314
  * shape (country, city, state, geo, etc.) as returned by the locations
1112
2315
  * autocomplete API.
1113
2316
  */
1114
- jobLocations: (0, import_yup30.array)().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
2317
+ jobLocations: (0, import_yup31.array)().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
1115
2318
  /**
1116
2319
  * Seniority levels the user wants jobs to be matched against. Multi-select
1117
2320
  * (up to 2) for borderline candidates.
@@ -1122,7 +2325,7 @@ var UserJobPreferencesSchema = (0, import_yup30.object)({
1122
2325
  * Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
1123
2326
  * so search/match logic doesn't have to translate between two vocabularies.
1124
2327
  */
1125
- targetExperienceLevels: (0, import_yup30.array)().of((0, import_yup30.string)().oneOf(SupportedExperienceLevels).required()).min(1, "Pick at least one experience level.").max(2, "You can select at most 2 experience levels.").required().label("Target Experience Levels"),
2328
+ targetExperienceLevels: (0, import_yup31.array)().of((0, import_yup31.string)().oneOf(SupportedExperienceLevels).required()).min(1, "Pick at least one experience level.").max(2, "You can select at most 2 experience levels.").required().label("Target Experience Levels"),
1126
2329
  /**
1127
2330
  * Specializations the user is searching for - free-form titles.
1128
2331
  *
@@ -1131,19 +2334,19 @@ var UserJobPreferencesSchema = (0, import_yup30.object)({
1131
2334
  * surfaces a curated "Popular Roles" picker for discovery, but the user
1132
2335
  * can ultimately add any title; matching/normalization happens downstream.
1133
2336
  */
1134
- jobRoles: (0, import_yup30.array)().of((0, import_yup30.string)().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
2337
+ jobRoles: (0, import_yup31.array)().of((0, import_yup31.string)().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
1135
2338
  /**
1136
2339
  * Minimum acceptable annual base salary, in `minSalaryCurrency`.
1137
2340
  * Stored as an integer in the currency's major unit (e.g. dollars, not cents).
1138
2341
  * Defaults to 0 ("any salary") rather than being optional - every job-seeker
1139
2342
  * has a floor, even if it's zero.
1140
2343
  */
1141
- minSalary: (0, import_yup30.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
1142
- minSalaryCurrency: (0, import_yup30.string)().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
2344
+ minSalary: (0, import_yup31.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
2345
+ minSalaryCurrency: (0, import_yup31.string)().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
1143
2346
  /**
1144
2347
  * Marketing-attribution capture from the final onboarding step.
1145
2348
  */
1146
- referralSource: (0, import_yup30.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
2349
+ referralSource: (0, import_yup31.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
1147
2350
  /**
1148
2351
  * Resumes the user has uploaded. Embedded directly on the user document
1149
2352
  * (capped at 5) - they're cheap to denormalize, every wizard step that
@@ -1157,25 +2360,25 @@ var UserJobPreferencesSchema = (0, import_yup30.object)({
1157
2360
  * AI resume-builder flow - onboarding uploads land here, AI-built resumes
1158
2361
  * live in their own collection.
1159
2362
  */
1160
- resumes: (0, import_yup30.array)().of(
1161
- (0, import_yup30.object)({
2363
+ resumes: (0, import_yup31.array)().of(
2364
+ (0, import_yup31.object)({
1162
2365
  // Stable id assigned on upload - used to address a specific entry
1163
2366
  // for delete / set-primary operations without exposing the GCS URL
1164
2367
  // as a route key.
1165
- id: (0, import_yup30.string)().required().label("ID"),
1166
- url: (0, import_yup30.string)().required().label("Resume URL"),
1167
- filename: (0, import_yup30.string)().trim().max(255).optional().label("Filename"),
1168
- sizeBytes: (0, import_yup30.number)().integer().min(0).optional().label("Size (bytes)"),
1169
- mimeType: (0, import_yup30.string)().trim().max(120).optional().label("MIME Type"),
1170
- uploadedAt: (0, import_yup30.date)().required().label("Uploaded At"),
1171
- isPrimary: (0, import_yup30.boolean)().default(false).label("Is Primary")
2368
+ id: (0, import_yup31.string)().required().label("ID"),
2369
+ url: (0, import_yup31.string)().required().label("Resume URL"),
2370
+ filename: (0, import_yup31.string)().trim().max(255).optional().label("Filename"),
2371
+ sizeBytes: (0, import_yup31.number)().integer().min(0).optional().label("Size (bytes)"),
2372
+ mimeType: (0, import_yup31.string)().trim().max(120).optional().label("MIME Type"),
2373
+ uploadedAt: (0, import_yup31.date)().required().label("Uploaded At"),
2374
+ isPrimary: (0, import_yup31.boolean)().default(false).label("Is Primary")
1172
2375
  }).noUnknown().strict().label("Resume")
1173
2376
  ).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
1174
2377
  /**
1175
2378
  * Set when the user finishes the wizard's last step. Acts as the gate the
1176
2379
  * onboarding hook checks to redirect users who haven't completed setup.
1177
2380
  */
1178
- onboardingCompletedAt: (0, import_yup30.date)().nullable().optional().label("Onboarding Completed At"),
2381
+ onboardingCompletedAt: (0, import_yup31.date)().nullable().optional().label("Onboarding Completed At"),
1179
2382
  /**
1180
2383
  * Parser-suggested values for wizard fields, written by the resume-upload
1181
2384
  * flow. Every parser-derived field lands here - including profile-shaped
@@ -1195,106 +2398,106 @@ var UserJobPreferencesSchema = (0, import_yup30.object)({
1195
2398
  * APIs. If `user.<field>` is empty there, the correct behavior is empty,
1196
2399
  * because the user has not confirmed it yet.
1197
2400
  */
1198
- pendingPrefill: (0, import_yup30.object)({
1199
- headline: (0, import_yup30.string)().trim().optional().label("Pending Headline"),
1200
- aboutMe: (0, import_yup30.string)().trim().optional().label("Pending About Me"),
1201
- mobile: (0, import_yup30.string)().trim().optional().label("Pending Mobile"),
2401
+ pendingPrefill: (0, import_yup31.object)({
2402
+ headline: (0, import_yup31.string)().trim().optional().label("Pending Headline"),
2403
+ aboutMe: (0, import_yup31.string)().trim().optional().label("Pending About Me"),
2404
+ mobile: (0, import_yup31.string)().trim().optional().label("Pending Mobile"),
1202
2405
  location: LocationSchema.optional().default(void 0).label("Pending Location"),
1203
- experienceLevel: (0, import_yup30.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
1204
- socialAccounts: (0, import_yup30.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
1205
- workExperiences: (0, import_yup30.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
1206
- educations: (0, import_yup30.array)().of(EducationSchema.required()).optional().label("Pending Educations")
2406
+ experienceLevel: (0, import_yup31.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
2407
+ socialAccounts: (0, import_yup31.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
2408
+ workExperiences: (0, import_yup31.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
2409
+ educations: (0, import_yup31.array)().of(EducationSchema.required()).optional().label("Pending Educations")
1207
2410
  }).nullable().optional().default(void 0).label("Pending Prefill")
1208
2411
  }).noUnknown().strict().label("User Job Preferences Schema");
1209
2412
 
1210
2413
  // src/user/user-recruiter-profile.schema.ts
1211
- var import_yup31 = require("yup");
1212
- var RecruiterPageLinkSchema = (0, import_yup31.object)({
2414
+ var import_yup32 = require("yup");
2415
+ var RecruiterPageLinkSchema = (0, import_yup32.object)({
1213
2416
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
1214
- jobTitle: (0, import_yup31.string)().trim().max(100).optional().label("Job Title")
2417
+ jobTitle: (0, import_yup32.string)().trim().max(100).optional().label("Job Title")
1215
2418
  }).noUnknown().strict().label("Recruiter Page Link");
1216
- var UserRecruiterProfileSchema = (0, import_yup31.object)({
1217
- recruiterProfile: (0, import_yup31.object)({
1218
- hiringFor: (0, import_yup31.array)().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
2419
+ var UserRecruiterProfileSchema = (0, import_yup32.object)({
2420
+ recruiterProfile: (0, import_yup32.object)({
2421
+ hiringFor: (0, import_yup32.array)().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
1219
2422
  }).optional().default(void 0).label("Recruiter Profile")
1220
2423
  }).noUnknown().strict().label("User Recruiter Profile");
1221
2424
 
1222
2425
  // src/user/user-coordinator-profile.schema.ts
1223
- var import_yup32 = require("yup");
1224
- var CoordinatorPageLinkSchema = (0, import_yup32.object)({
2426
+ var import_yup33 = require("yup");
2427
+ var CoordinatorPageLinkSchema = (0, import_yup33.object)({
1225
2428
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
1226
- jobTitle: (0, import_yup32.string)().trim().max(100).optional().label("Job Title")
2429
+ jobTitle: (0, import_yup33.string)().trim().max(100).optional().label("Job Title")
1227
2430
  }).noUnknown().strict().label("Coordinator Page Link");
1228
- var UserCoordinatorProfileSchema = (0, import_yup32.object)({
1229
- coordinatorProfile: (0, import_yup32.object)({
1230
- coordinatesAt: (0, import_yup32.array)().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
2431
+ var UserCoordinatorProfileSchema = (0, import_yup33.object)({
2432
+ coordinatorProfile: (0, import_yup33.object)({
2433
+ coordinatesAt: (0, import_yup33.array)().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
1231
2434
  }).optional().default(void 0).label("Coordinator Profile")
1232
2435
  }).noUnknown().strict().label("User Coordinator Profile");
1233
2436
 
1234
2437
  // src/user/user.schema.ts
1235
- var UserSchema = (0, import_yup33.object)({
2438
+ var UserSchema = (0, import_yup34.object)({
1236
2439
  /**
1237
2440
  * Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
1238
2441
  */
1239
- authAccountId: (0, import_yup33.string)().required().label("Auth Account ID"),
2442
+ authAccountId: (0, import_yup34.string)().required().label("Auth Account ID"),
1240
2443
  /**
1241
2444
  * Social media information about the user (e.g. LinkedIn, GitHub, etc.)
1242
2445
  */
1243
- socialAccounts: (0, import_yup33.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
2446
+ socialAccounts: (0, import_yup34.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
1244
2447
  /**
1245
2448
  * Work experience information about the user
1246
2449
  */
1247
- workExperiences: (0, import_yup33.array)().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
2450
+ workExperiences: (0, import_yup34.array)().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
1248
2451
  /**
1249
2452
  * Education information about the user
1250
2453
  */
1251
- educations: (0, import_yup33.array)().of(EducationSchema).required().default([]).label("Educations"),
2454
+ educations: (0, import_yup34.array)().of(EducationSchema).required().default([]).label("Educations"),
1252
2455
  /**
1253
2456
  * Skills information about the user
1254
2457
  */
1255
- skills: (0, import_yup33.array)().of(UserSkillSchema).required().default([]).label("Skills"),
2458
+ skills: (0, import_yup34.array)().of(UserSkillSchema).required().default([]).label("Skills"),
1256
2459
  /**
1257
2460
  * Projects information about the user
1258
2461
  */
1259
- projects: (0, import_yup33.array)().of(UserProjectSchema).default([]).label("Projects"),
2462
+ projects: (0, import_yup34.array)().of(UserProjectSchema).default([]).label("Projects"),
1260
2463
  /**
1261
2464
  * Certifications information about the user
1262
2465
  */
1263
- certifications: (0, import_yup33.array)().of(UserCertificationSchema).default([]).label("Certifications"),
2466
+ certifications: (0, import_yup34.array)().of(UserCertificationSchema).default([]).label("Certifications"),
1264
2467
  /**
1265
2468
  * Interests information about the user.
1266
2469
  */
1267
- interests: (0, import_yup33.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
2470
+ interests: (0, import_yup34.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
1268
2471
  /**
1269
2472
  * Languages information about the user
1270
2473
  */
1271
- languages: (0, import_yup33.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
2474
+ languages: (0, import_yup34.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
1272
2475
  /**
1273
2476
  * Additional information about the user
1274
2477
  */
1275
- additionalInfo: (0, import_yup33.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
2478
+ additionalInfo: (0, import_yup34.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
1276
2479
  /**
1277
2480
  * Status of the user account
1278
2481
  */
1279
- status: (0, import_yup33.string)().oneOf(SupportedUserStatuses).required().label("Status"),
2482
+ status: (0, import_yup34.string)().oneOf(SupportedUserStatuses).required().label("Status"),
1280
2483
  /**
1281
2484
  * Roles assigned to the user
1282
2485
  */
1283
- roles: (0, import_yup33.array)().of((0, import_yup33.string)().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
2486
+ roles: (0, import_yup34.array)().of((0, import_yup34.string)().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
1284
2487
  /**
1285
2488
  * Vector embedding of the user's profile for semantic/hybrid search.
1286
2489
  * Generated from a structured summary of skills, experience, education, etc.
1287
2490
  * Only generated for public profiles with sufficient completeness (≥60%).
1288
2491
  */
1289
- embedding: (0, import_yup33.object)({
1290
- vector: (0, import_yup33.array)((0, import_yup33.number)().required()).optional().label("Embedding vector"),
1291
- model: (0, import_yup33.string)().optional().label("Embedding model")
2492
+ embedding: (0, import_yup34.object)({
2493
+ vector: (0, import_yup34.array)((0, import_yup34.number)().required()).optional().label("Embedding vector"),
2494
+ model: (0, import_yup34.string)().optional().label("Embedding model")
1292
2495
  }).nullable().optional().label("Embedding")
1293
2496
  }).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
1294
2497
 
1295
2498
  // src/user/user-completeness.schema.ts
1296
- var import_yup34 = require("yup");
1297
- var UserCompletenessSchema = (0, import_yup34.object)({
2499
+ var import_yup35 = require("yup");
2500
+ var UserCompletenessSchema = (0, import_yup35.object)({
1298
2501
  additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
1299
2502
  // Optional
1300
2503
  certifications: CompletenessScoreSchema(0).label("Certifications"),
@@ -1348,9 +2551,13 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
1348
2551
  GroupTranslationSchema,
1349
2552
  GroupVisibility,
1350
2553
  InputQuestionSchema,
2554
+ JOB_TAXONOMY,
2555
+ JobCategory,
2556
+ JobIndustry,
1351
2557
  JobSchema,
1352
2558
  JobSearchUrgency,
1353
2559
  JobStatus,
2560
+ JobSubCategory,
1354
2561
  LocationSchema,
1355
2562
  MIN_SALARY_LOWER_BOUND,
1356
2563
  MIN_SALARY_UPPER_BOUND,
@@ -1358,6 +2565,8 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
1358
2565
  PageStatus,
1359
2566
  PageType,
1360
2567
  PaginationSchema,
2568
+ PostSchema,
2569
+ PostStatus,
1361
2570
  ProficiencyLevel,
1362
2571
  QuestionSchema,
1363
2572
  QuestionType,
@@ -1382,10 +2591,14 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
1382
2591
  SupportedEmployeeCounts,
1383
2592
  SupportedEmploymentTypes,
1384
2593
  SupportedExperienceLevels,
2594
+ SupportedJobCategories,
2595
+ SupportedJobIndustries,
1385
2596
  SupportedJobSearchUrgencies,
1386
2597
  SupportedJobStatuses,
2598
+ SupportedJobSubCategories,
1387
2599
  SupportedPageStatuses,
1388
2600
  SupportedPageTypes,
2601
+ SupportedPostStatuses,
1389
2602
  SupportedProficiencyLevels,
1390
2603
  SupportedQuestionTypes,
1391
2604
  SupportedReferralSources,
@@ -1398,6 +2611,7 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
1398
2611
  SupportedUserRoles,
1399
2612
  SupportedUserStatuses,
1400
2613
  SupportedWorkModes,
2614
+ TAXONOMY_LABELS,
1401
2615
  TermsAcceptedSchema,
1402
2616
  UserAdditionalInfoSchema,
1403
2617
  UserCertificationSchema,
@@ -1418,6 +2632,12 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
1418
2632
  UserStatus,
1419
2633
  WorkExperienceSchema,
1420
2634
  WorkMode,
2635
+ categoryOfIndustry,
2636
+ categoryOfSubCategory,
1421
2637
  dateString,
1422
- getSchemaByQuestion
2638
+ deriveIndustry,
2639
+ getSchemaByQuestion,
2640
+ industriesOfCategory,
2641
+ industryOfSubCategory,
2642
+ subCategoriesOfIndustry
1423
2643
  });