@thejob/schema 2.0.1 → 2.0.2
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/.claude/scheduled_tasks.lock +1 -0
- package/dist/index.cjs +504 -141
- package/dist/index.d.cts +560 -86
- package/dist/index.d.ts +560 -86
- package/dist/index.js +472 -138
- package/package.json +1 -1
- package/src/common/common.constant.ts +30 -0
- package/src/common/common.schema.ts +14 -0
- package/src/index.ts +11 -0
- package/src/job/job.constant.ts +66 -0
- package/src/job/job.schema.ts +245 -0
- package/src/question/choice-question.schema.ts +96 -0
- package/src/question/index.ts +6 -0
- package/src/question/input-question.schema.ts +24 -0
- package/src/question/question.constant.ts +14 -0
- package/src/question/question.schema.ts +22 -0
- package/src/question/question.utils.ts +23 -0
- package/src/question/read-and-acknowledge.schema.ts +25 -0
package/dist/index.js
CHANGED
|
@@ -15,8 +15,34 @@ var CompletenessScoreSchema = (minScore = 50) => object().shape({
|
|
|
15
15
|
totalSteps: number().min(0).default(0).label("Total Steps"),
|
|
16
16
|
completedSteps: number().min(0).default(0).label("Completed Steps")
|
|
17
17
|
});
|
|
18
|
+
var UserIdAndCreatedAtSchema = object().shape({
|
|
19
|
+
userId: string().required().label("User Id"),
|
|
20
|
+
createdAt: string().required().label("Created At")
|
|
21
|
+
});
|
|
18
22
|
|
|
19
23
|
// src/common/common.constant.ts
|
|
24
|
+
var Common = /* @__PURE__ */ ((Common2) => {
|
|
25
|
+
Common2["Yes"] = "yes";
|
|
26
|
+
Common2["No"] = "no";
|
|
27
|
+
Common2["DateRangeOption"] = "date_range_option";
|
|
28
|
+
Common2["ExperienceLevel"] = "experience_level";
|
|
29
|
+
Common2["Company"] = "company";
|
|
30
|
+
Common2["EmploymentType"] = "employment_type";
|
|
31
|
+
Common2["WorkMode"] = "work_mode";
|
|
32
|
+
Common2["Location"] = "location";
|
|
33
|
+
Common2["CareerLevel"] = "career_level";
|
|
34
|
+
Common2["Category"] = "category";
|
|
35
|
+
Common2["Designation"] = "designation";
|
|
36
|
+
Common2["EducationLevel"] = "education_level";
|
|
37
|
+
Common2["Language"] = "language";
|
|
38
|
+
Common2["Skill"] = "skill";
|
|
39
|
+
return Common2;
|
|
40
|
+
})(Common || {});
|
|
41
|
+
var EMPTY_STRING = "eMpTyStRiNg";
|
|
42
|
+
var SYSTEM_DATE_FORMAT = "YYYY-MM-DD";
|
|
43
|
+
var DISPLAY_DATE_FORMAT = "LL";
|
|
44
|
+
var DISPLAY_DATE_FORMAT_SHORT = "MMMM, YYYY";
|
|
45
|
+
var SITEMAP_FORMAT = "YYYY-MM-DDThh:mm:ssZ";
|
|
20
46
|
var StudyType = /* @__PURE__ */ ((StudyType2) => {
|
|
21
47
|
StudyType2["FullTime"] = "full_time";
|
|
22
48
|
StudyType2["PartTime"] = "part_time";
|
|
@@ -198,6 +224,9 @@ var GroupMembershipSchema = object3({
|
|
|
198
224
|
updatedAt: number2().optional().label("Updated At")
|
|
199
225
|
});
|
|
200
226
|
|
|
227
|
+
// src/job/job.schema.ts
|
|
228
|
+
import { array as array8, boolean as boolean9, lazy, mixed as mixed3, number as number5, object as object16, string as string13 } from "yup";
|
|
229
|
+
|
|
201
230
|
// src/location/location.schema.ts
|
|
202
231
|
import { array as array2, number as number3, object as object4, string as string3 } from "yup";
|
|
203
232
|
var LocationSchema = object4({
|
|
@@ -376,15 +405,302 @@ var PageSchema = object10().shape({
|
|
|
376
405
|
followersCount: number4().min(0).optional().label("Followers Count")
|
|
377
406
|
}).concat(CompanySchema).concat(InstituteSchema).concat(DbDefaultSchema).noUnknown(true).strict(true).required().label("Page Schema");
|
|
378
407
|
|
|
408
|
+
// src/skill/skill.schema.ts
|
|
409
|
+
import { array as array6, object as object11, string as string8 } from "yup";
|
|
410
|
+
var SkillSchema = object11({
|
|
411
|
+
name: string8().trim().required().label("Skill Name"),
|
|
412
|
+
logo: object11({
|
|
413
|
+
light: string8().required().label("Light Logo"),
|
|
414
|
+
dark: string8().optional().nullable().label("Dark Logo")
|
|
415
|
+
}).optional().nullable().default(null).label("Logo"),
|
|
416
|
+
tags: array6().of(string8().max(50)).max(20).optional().label("Tags")
|
|
417
|
+
}).concat(DbDefaultSchema).noUnknown().strict().label("Skill");
|
|
418
|
+
|
|
419
|
+
// src/question/question.constant.ts
|
|
420
|
+
var QuestionType = /* @__PURE__ */ ((QuestionType2) => {
|
|
421
|
+
QuestionType2["Input"] = "input";
|
|
422
|
+
QuestionType2["Choice"] = "choice";
|
|
423
|
+
QuestionType2["ReadAndAcknowledge"] = "readAndAcknowledge";
|
|
424
|
+
return QuestionType2;
|
|
425
|
+
})(QuestionType || {});
|
|
426
|
+
var SupportedQuestionTypes = Object.values(QuestionType);
|
|
427
|
+
var AnswerChoiceType = /* @__PURE__ */ ((AnswerChoiceType2) => {
|
|
428
|
+
AnswerChoiceType2["Single"] = "single";
|
|
429
|
+
AnswerChoiceType2["Multiple"] = "multiple";
|
|
430
|
+
return AnswerChoiceType2;
|
|
431
|
+
})(AnswerChoiceType || {});
|
|
432
|
+
var SupportedAnswerChoiceTypes = Object.values(AnswerChoiceType);
|
|
433
|
+
|
|
434
|
+
// src/question/question.schema.ts
|
|
435
|
+
import { boolean as boolean8, object as object12, string as string9 } from "yup";
|
|
436
|
+
var QuestionSchema = object12().shape({
|
|
437
|
+
label: string9().max(50).optional().label("Label"),
|
|
438
|
+
default: boolean8().optional().default(false).label("Default"),
|
|
439
|
+
title: string9().required().max(200).label("Title"),
|
|
440
|
+
type: string9().oneOf(SupportedQuestionTypes).required().label("Type"),
|
|
441
|
+
isOptional: boolean8().optional().label("Mark if the question is optional"),
|
|
442
|
+
readonly: boolean8().optional().label("Readonly"),
|
|
443
|
+
isNew: boolean8().optional().label("Is New")
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
// src/question/input-question.schema.ts
|
|
447
|
+
import { object as object13, string as string10 } from "yup";
|
|
448
|
+
var InputQuestionSchema = QuestionSchema.concat(
|
|
449
|
+
object13().shape({
|
|
450
|
+
type: string10().oneOf(["input" /* Input */]).required().label("Question type"),
|
|
451
|
+
preferredAnswer: string10().max(100).optional().label("Preferred Answer"),
|
|
452
|
+
answers: string10().max(500).when("isOptional", {
|
|
453
|
+
is: (isOptional) => Boolean(isOptional),
|
|
454
|
+
then: (schema) => schema.optional(),
|
|
455
|
+
otherwise: (schema) => schema.required()
|
|
456
|
+
}).label("Answer")
|
|
457
|
+
})
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
// src/question/choice-question.schema.ts
|
|
461
|
+
import { array as array7, mixed as mixed2, object as object14, string as string11 } from "yup";
|
|
462
|
+
var ChoicePreferredAnswerSchema = (label = "Preferred answer") => mixed2().when("answerChoiceType", {
|
|
463
|
+
is: (value) => value === "multiple" /* Multiple */,
|
|
464
|
+
then: () => array7(string11()).test(
|
|
465
|
+
"is-valid-option",
|
|
466
|
+
`${label} must be from the provided options`,
|
|
467
|
+
function(answer) {
|
|
468
|
+
const { options = [] } = this.parent;
|
|
469
|
+
if (answer && answer.length > 0) {
|
|
470
|
+
return answer.every((a) => options.includes(a));
|
|
471
|
+
}
|
|
472
|
+
return true;
|
|
473
|
+
}
|
|
474
|
+
).optional().label(label),
|
|
475
|
+
otherwise: () => string11().test(
|
|
476
|
+
"is-valid-option",
|
|
477
|
+
`${label} must be from the provided options`,
|
|
478
|
+
function(answer) {
|
|
479
|
+
const { options = [] } = this.parent;
|
|
480
|
+
return !answer || options.includes(answer);
|
|
481
|
+
}
|
|
482
|
+
).optional().label(label)
|
|
483
|
+
});
|
|
484
|
+
var getChoiceAnswerSchema = (answerChoiceType, isOptional) => {
|
|
485
|
+
if (answerChoiceType === "multiple" /* Multiple */) {
|
|
486
|
+
const multiAnswerSchema = array7(string11().max(500));
|
|
487
|
+
return isOptional ? multiAnswerSchema.optional().default([]) : multiAnswerSchema.min(1, "Select at least one option.").required("Select at least one option.").default([]);
|
|
488
|
+
}
|
|
489
|
+
const singleAnswerSchema = string11().max(500);
|
|
490
|
+
return isOptional ? singleAnswerSchema.optional() : singleAnswerSchema.required("Select an option.");
|
|
491
|
+
};
|
|
492
|
+
var ChoiceQuestionSchema = QuestionSchema.concat(
|
|
493
|
+
object14().shape({
|
|
494
|
+
type: string11().oneOf(["choice" /* Choice */]).required().label("Question type"),
|
|
495
|
+
optionsFrom: string11().oneOf(["skill" /* Skill */, "education_level" /* EducationLevel */, "experience_level" /* ExperienceLevel */]).optional().label("Option field"),
|
|
496
|
+
options: array7(string11().required()).min(1).required().label("Options"),
|
|
497
|
+
answerChoiceType: string11().oneOf(SupportedAnswerChoiceTypes).required().default("single" /* Single */).label("Type"),
|
|
498
|
+
preferredAnswer: ChoicePreferredAnswerSchema("Preferred answer"),
|
|
499
|
+
answers: mixed2().when(
|
|
500
|
+
["answerChoiceType", "isOptional"],
|
|
501
|
+
([answerChoiceType, isOptional]) => getChoiceAnswerSchema(answerChoiceType, isOptional)
|
|
502
|
+
)
|
|
503
|
+
})
|
|
504
|
+
);
|
|
505
|
+
|
|
506
|
+
// src/question/read-and-acknowledge.schema.ts
|
|
507
|
+
import { object as object15, string as string12 } from "yup";
|
|
508
|
+
var AcknowledgeAnswerSchema = string12().oneOf(["yes" /* Yes */, "no" /* No */]).required("This question must be acknowledged.");
|
|
509
|
+
var ReadAndAcknowledgeQuestionSchema = QuestionSchema.concat(
|
|
510
|
+
object15().shape({
|
|
511
|
+
type: string12().oneOf(["readAndAcknowledge" /* ReadAndAcknowledge */]).required().label("Question type"),
|
|
512
|
+
description: string12().max(1e4).required().label("Content"),
|
|
513
|
+
preferredAnswer: AcknowledgeAnswerSchema.label("Preferred Answer"),
|
|
514
|
+
answers: AcknowledgeAnswerSchema.label("Answer")
|
|
515
|
+
})
|
|
516
|
+
);
|
|
517
|
+
|
|
518
|
+
// src/question/question.utils.ts
|
|
519
|
+
var getSchemaByQuestion = (type) => {
|
|
520
|
+
switch (type) {
|
|
521
|
+
case "input" /* Input */:
|
|
522
|
+
return InputQuestionSchema;
|
|
523
|
+
case "choice" /* Choice */:
|
|
524
|
+
return ChoiceQuestionSchema;
|
|
525
|
+
case "readAndAcknowledge" /* ReadAndAcknowledge */:
|
|
526
|
+
return ReadAndAcknowledgeQuestionSchema;
|
|
527
|
+
default:
|
|
528
|
+
throw new Error("Unsupported schema: " + type);
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
|
|
532
|
+
// src/job/job.constant.ts
|
|
533
|
+
var JobStatus = /* @__PURE__ */ ((JobStatus2) => {
|
|
534
|
+
JobStatus2["Published"] = "published";
|
|
535
|
+
JobStatus2["Draft"] = "draft";
|
|
536
|
+
JobStatus2["Deleted"] = "deleted";
|
|
537
|
+
JobStatus2["Closed"] = "closed";
|
|
538
|
+
JobStatus2["Expired"] = "expired";
|
|
539
|
+
return JobStatus2;
|
|
540
|
+
})(JobStatus || {});
|
|
541
|
+
var SupportedJobStatuses = Object.values(JobStatus);
|
|
542
|
+
var EmploymentType = /* @__PURE__ */ ((EmploymentType2) => {
|
|
543
|
+
EmploymentType2["Fulltime"] = "full_time";
|
|
544
|
+
EmploymentType2["PartTime"] = "part_time";
|
|
545
|
+
EmploymentType2["Temporary"] = "temporary";
|
|
546
|
+
EmploymentType2["Contract"] = "contract";
|
|
547
|
+
EmploymentType2["Internship"] = "internship";
|
|
548
|
+
EmploymentType2["Freelance"] = "freelance";
|
|
549
|
+
EmploymentType2["Volunteer"] = "volunteer";
|
|
550
|
+
EmploymentType2["PerDiem"] = "per_diem";
|
|
551
|
+
return EmploymentType2;
|
|
552
|
+
})(EmploymentType || {});
|
|
553
|
+
var SupportedEmploymentTypes = Object.values(EmploymentType);
|
|
554
|
+
var WorkMode = /* @__PURE__ */ ((WorkMode2) => {
|
|
555
|
+
WorkMode2["OnSite"] = "on_site";
|
|
556
|
+
WorkMode2["Hybrid"] = "hybrid";
|
|
557
|
+
WorkMode2["Remote"] = "remote";
|
|
558
|
+
return WorkMode2;
|
|
559
|
+
})(WorkMode || {});
|
|
560
|
+
var SupportedWorkModes = Object.values(WorkMode);
|
|
561
|
+
var CompensationType = /* @__PURE__ */ ((CompensationType2) => {
|
|
562
|
+
CompensationType2["Hourly"] = "hourly";
|
|
563
|
+
CompensationType2["Weekly"] = "weekly";
|
|
564
|
+
CompensationType2["Monthly"] = "monthly";
|
|
565
|
+
CompensationType2["Yearly"] = "yearly";
|
|
566
|
+
CompensationType2["OneTime"] = "one-time";
|
|
567
|
+
CompensationType2["Other"] = "other";
|
|
568
|
+
return CompensationType2;
|
|
569
|
+
})(CompensationType || {});
|
|
570
|
+
var SupportedCompensationTypes = Object.values(CompensationType);
|
|
571
|
+
var EmployeeCount = /* @__PURE__ */ ((EmployeeCount2) => {
|
|
572
|
+
EmployeeCount2["_1_2"] = "1_2_employees";
|
|
573
|
+
EmployeeCount2["_3_10"] = "3_10_employees";
|
|
574
|
+
EmployeeCount2["_11_100"] = "11_100_employees";
|
|
575
|
+
EmployeeCount2["_101_1000"] = "101_1000_employees";
|
|
576
|
+
EmployeeCount2["_1001_5000"] = "1001_5000_employees";
|
|
577
|
+
EmployeeCount2["_5001_10000"] = "5001_10000_employees";
|
|
578
|
+
EmployeeCount2["_10001_Plus"] = "10001_plus_employees";
|
|
579
|
+
return EmployeeCount2;
|
|
580
|
+
})(EmployeeCount || {});
|
|
581
|
+
var SupportedEmployeeCounts = Object.values(EmployeeCount);
|
|
582
|
+
var ApplicationReceivePreference = /* @__PURE__ */ ((ApplicationReceivePreference2) => {
|
|
583
|
+
ApplicationReceivePreference2["Inbox"] = "inbox";
|
|
584
|
+
ApplicationReceivePreference2["Email"] = "email";
|
|
585
|
+
ApplicationReceivePreference2["ExternalWebsite"] = "external_website";
|
|
586
|
+
return ApplicationReceivePreference2;
|
|
587
|
+
})(ApplicationReceivePreference || {});
|
|
588
|
+
var SupportedApplicationReceivePreferences = Object.values(
|
|
589
|
+
ApplicationReceivePreference
|
|
590
|
+
);
|
|
591
|
+
|
|
592
|
+
// src/job/job.schema.ts
|
|
593
|
+
var JobSchema = object16({
|
|
594
|
+
/** Unique id usable by external systems to reference the job. */
|
|
595
|
+
uniqueId: string13().optional().label("Unique ID"),
|
|
596
|
+
/** Job title shown in listings and search. */
|
|
597
|
+
headline: string13().required().min(5).max(150).label("Headline"),
|
|
598
|
+
/** User-friendly, unique URL identifier. */
|
|
599
|
+
slug: string13().required().max(250).label("Slug"),
|
|
600
|
+
/** How applications are received (inbox vs external website). */
|
|
601
|
+
applicationReceivePreference: mixed3().oneOf([
|
|
602
|
+
"inbox" /* Inbox */,
|
|
603
|
+
"external_website" /* ExternalWebsite */
|
|
604
|
+
]).required().label("Preference"),
|
|
605
|
+
/** Required when applicationReceivePreference is ExternalWebsite. */
|
|
606
|
+
externalApplyLink: string13().when("applicationReceivePreference", {
|
|
607
|
+
is: (value) => value === "external_website" /* ExternalWebsite */,
|
|
608
|
+
then: (schema) => schema.url().required().label("Apply for Job link"),
|
|
609
|
+
otherwise: (schema) => schema.optional()
|
|
610
|
+
}),
|
|
611
|
+
/** Company the job belongs to (subset of PageSchema). */
|
|
612
|
+
company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
|
|
613
|
+
/** @deprecated kept for backwards compatibility. */
|
|
614
|
+
designation: string13().optional().nullable().label("Designation"),
|
|
615
|
+
employmentType: string13().required().label("Employment type"),
|
|
616
|
+
workMode: string13().required().label("Work mode"),
|
|
617
|
+
skills: array8().of(SkillSchema.pick(["name", "logo"]).required().label("Skill")).nullable().optional().label("Skills"),
|
|
618
|
+
bookmarks: array8().of(UserIdAndCreatedAtSchema).optional().label("Bookmarks"),
|
|
619
|
+
embedding: object16({
|
|
620
|
+
vector: array8(number5().required()).optional().label("Embedding vector"),
|
|
621
|
+
model: string13().optional().label("Embedding model")
|
|
622
|
+
}).nullable().optional().label("Embedding"),
|
|
623
|
+
applicants: array8().of(UserIdAndCreatedAtSchema).optional().label("Applicants"),
|
|
624
|
+
applicantCount: number5().optional().label("Applicant count"),
|
|
625
|
+
externalApplicationLinkClickCount: number5().optional().label("External application link click count"),
|
|
626
|
+
description: string13().required().min(100).max(5e4).label("Description"),
|
|
627
|
+
descriptionMarkdown: string13().required().label("Description Markdown"),
|
|
628
|
+
descriptionHTML: string13().optional().label("Description HTML"),
|
|
629
|
+
/**
|
|
630
|
+
* Job locations. Required even for remote roles (compliance/legal). Defaults
|
|
631
|
+
* to an empty array; min(1) is intentionally not enforced yet.
|
|
632
|
+
*/
|
|
633
|
+
locations: array8().of(LocationSchema).default([]).label("Location"),
|
|
634
|
+
educationLevel: array8(string13().oneOf(SupportedEducationLevels)).required().min(1).label("Educational level"),
|
|
635
|
+
/** Posting validity window (start/expiry). */
|
|
636
|
+
validity: DurationSchema({
|
|
637
|
+
format: SYSTEM_DATE_FORMAT,
|
|
638
|
+
startLabel: "Start Date",
|
|
639
|
+
endLabel: "Expiry Date"
|
|
640
|
+
}).label("Validity"),
|
|
641
|
+
experienceLevel: string13().oneOf(SupportedExperienceLevels).nullable().optional().label("Experience level"),
|
|
642
|
+
contactEmail: string13().email().nullable().optional().label("Contact email"),
|
|
643
|
+
workingHoursPerWeek: number5().nullable().optional().min(1).max(24 * 7).label("Working hours per week"),
|
|
644
|
+
tags: array8().max(50).optional().label("Tags"),
|
|
645
|
+
/** Direct/Quick-apply questionnaire. Each item is validated against the
|
|
646
|
+
* concrete question schema for its `type`, with the stored `answers` omitted. */
|
|
647
|
+
questionnaire: array8().of(
|
|
648
|
+
lazy((question) => {
|
|
649
|
+
const schema = getSchemaByQuestion(question.type);
|
|
650
|
+
if (question.type === "input" /* Input */) {
|
|
651
|
+
return schema.omit([
|
|
652
|
+
"answers"
|
|
653
|
+
]);
|
|
654
|
+
} else if (question.type === "choice" /* Choice */) {
|
|
655
|
+
return schema.omit([
|
|
656
|
+
"answers"
|
|
657
|
+
]);
|
|
658
|
+
} else if (question.type === "readAndAcknowledge" /* ReadAndAcknowledge */) {
|
|
659
|
+
return schema.omit(["answers"]);
|
|
660
|
+
}
|
|
661
|
+
return schema;
|
|
662
|
+
})
|
|
663
|
+
).label("Questionnaire"),
|
|
664
|
+
status: string13().oneOf(SupportedJobStatuses).default("draft" /* Draft */).required().label("Status"),
|
|
665
|
+
seoTags: object16({
|
|
666
|
+
description: string13().optional().label("Description"),
|
|
667
|
+
keywords: array8().of(string13()).optional().label("Keywords")
|
|
668
|
+
}).nullable().optional().label("SEO Tags"),
|
|
669
|
+
jdSummary: string13().optional().label("JD Summary"),
|
|
670
|
+
canCreateAlert: boolean9().optional().label("Can create alert"),
|
|
671
|
+
canDirectApply: boolean9().optional().label("Can direct apply"),
|
|
672
|
+
hasApplied: boolean9().optional().label("Has applied"),
|
|
673
|
+
isOwner: boolean9().optional().label("Is owner"),
|
|
674
|
+
hasBookmarked: boolean9().optional().label("Has bookmarked"),
|
|
675
|
+
hasReported: boolean9().optional().label("Has reported"),
|
|
676
|
+
ratePerHour: number5().optional().min(0).label("Rate per hour"),
|
|
677
|
+
isPromoted: boolean9().optional().label("Is promoted"),
|
|
678
|
+
salaryRange: object16({
|
|
679
|
+
currency: string13().required().label("Currency").default("USD"),
|
|
680
|
+
min: number5().nullable().optional().min(0).label("Minimum Salary"),
|
|
681
|
+
max: number5().nullable().optional().min(0).label("Maximum Salary"),
|
|
682
|
+
compensationType: string13().oneOf(SupportedCompensationTypes).nullable().optional().label("Compensation Type"),
|
|
683
|
+
isNegotiable: boolean9().nullable().optional().default(true).label("Is Negotiable")
|
|
684
|
+
}).nullable().optional().label("Salary Range"),
|
|
685
|
+
reports: array8().of(UserIdAndCreatedAtSchema).optional().label("Reports"),
|
|
686
|
+
category: string13().nullable().optional().label("Category"),
|
|
687
|
+
industry: string13().nullable().optional().label("Industry"),
|
|
688
|
+
subCategories: array8().of(string13().trim().required()).nullable().optional().label("Sub Categories"),
|
|
689
|
+
termsAccepted: boolean9().oneOf([true], "Accept terms before proceeding").required("Accept terms before proceeding").label("Terms accepted"),
|
|
690
|
+
isFeatured: boolean9().optional().default(false).label("Is featured"),
|
|
691
|
+
/** Market country codes to feature this job in; empty = global. */
|
|
692
|
+
featuredMarkets: array8().of(string13().required()).optional().default([]).label("Featured markets")
|
|
693
|
+
}).concat(DbDefaultSchema).noUnknown().label("Job");
|
|
694
|
+
|
|
379
695
|
// src/pagination/pagination.schema.ts
|
|
380
|
-
import { number as
|
|
381
|
-
var PaginationSchema =
|
|
382
|
-
page:
|
|
383
|
-
limit:
|
|
384
|
-
sortBy:
|
|
385
|
-
nextPage:
|
|
386
|
-
prevPage:
|
|
387
|
-
sortDirection:
|
|
696
|
+
import { number as number6, object as object17, string as string14 } from "yup";
|
|
697
|
+
var PaginationSchema = object17().shape({
|
|
698
|
+
page: number6().required().min(1).label("Page").default(1),
|
|
699
|
+
limit: number6().required().min(1).max(100).label("Limit").default(10),
|
|
700
|
+
sortBy: string14().notOneOf([""]).optional().label("SortBy"),
|
|
701
|
+
nextPage: string14().optional().label("Next Page Token"),
|
|
702
|
+
prevPage: string14().optional().label("Previous Page Token"),
|
|
703
|
+
sortDirection: string14().oneOf(["asc", "desc"]).optional().label("Sort Direction")
|
|
388
704
|
});
|
|
389
705
|
|
|
390
706
|
// src/pagination/pagination.constant.ts
|
|
@@ -400,7 +716,7 @@ var DefaultPaginationOptions = {
|
|
|
400
716
|
};
|
|
401
717
|
|
|
402
718
|
// src/report/report.schema.ts
|
|
403
|
-
import { mixed as
|
|
719
|
+
import { mixed as mixed4, object as object18, string as string15 } from "yup";
|
|
404
720
|
|
|
405
721
|
// src/report/report.constant.ts
|
|
406
722
|
var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
|
|
@@ -424,26 +740,15 @@ var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
|
|
|
424
740
|
var SupportedReportReasons = Object.values(ReportReason);
|
|
425
741
|
|
|
426
742
|
// src/report/report.schema.ts
|
|
427
|
-
var ReportSchema =
|
|
428
|
-
type:
|
|
429
|
-
resourceId:
|
|
430
|
-
reason:
|
|
431
|
-
comment:
|
|
743
|
+
var ReportSchema = object18({
|
|
744
|
+
type: mixed4().oneOf(SupportedResourceTypes).required().label("Type"),
|
|
745
|
+
resourceId: string15().required().label("Resource ID"),
|
|
746
|
+
reason: mixed4().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
|
|
747
|
+
comment: string15().max(1e3).optional().label("Comment")
|
|
432
748
|
}).label("Report Schema");
|
|
433
749
|
|
|
434
|
-
// src/skill/skill.schema.ts
|
|
435
|
-
import { array as array6, object as object13, string as string10 } from "yup";
|
|
436
|
-
var SkillSchema = object13({
|
|
437
|
-
name: string10().trim().required().label("Skill Name"),
|
|
438
|
-
logo: object13({
|
|
439
|
-
light: string10().required().label("Light Logo"),
|
|
440
|
-
dark: string10().optional().nullable().label("Dark Logo")
|
|
441
|
-
}).optional().nullable().default(null).label("Logo"),
|
|
442
|
-
tags: array6().of(string10().max(50)).max(20).optional().label("Tags")
|
|
443
|
-
}).concat(DbDefaultSchema).noUnknown().strict().label("Skill");
|
|
444
|
-
|
|
445
750
|
// src/user/user.schema.ts
|
|
446
|
-
import { array as
|
|
751
|
+
import { array as array12, number as number8, object as object30, string as string28 } from "yup";
|
|
447
752
|
|
|
448
753
|
// src/user/user.constant.ts
|
|
449
754
|
var UserRole = /* @__PURE__ */ ((UserRole2) => {
|
|
@@ -525,51 +830,51 @@ var MIN_SALARY_LOWER_BOUND = 0;
|
|
|
525
830
|
var MIN_SALARY_UPPER_BOUND = 1e6;
|
|
526
831
|
|
|
527
832
|
// src/user/work-experience.schema.ts
|
|
528
|
-
import { boolean as
|
|
529
|
-
var WorkExperienceSchema =
|
|
833
|
+
import { boolean as boolean10, object as object19, string as string16 } from "yup";
|
|
834
|
+
var WorkExperienceSchema = object19().shape({
|
|
530
835
|
company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
|
|
531
|
-
designation:
|
|
836
|
+
designation: string16().trim().required().label("Designation"),
|
|
532
837
|
duration: DurationSchema({
|
|
533
838
|
format: "YYYY-MM",
|
|
534
839
|
startLabel: "Start Date",
|
|
535
840
|
endLabel: "End Date"
|
|
536
841
|
}).required().label("Duration"),
|
|
537
|
-
description:
|
|
842
|
+
description: string16().trim().max(3e3).optional().label("Description"),
|
|
538
843
|
location: LocationSchema.required().label("Location"),
|
|
539
|
-
isRemote:
|
|
844
|
+
isRemote: boolean10().oneOf([true, false]).default(false).label("Is Remote")
|
|
540
845
|
}).noUnknown().strict().label("Work Experience");
|
|
541
846
|
|
|
542
847
|
// src/user/education.schema.ts
|
|
543
|
-
import { boolean as
|
|
544
|
-
var EducationSchema =
|
|
848
|
+
import { boolean as boolean11, object as object20, string as string17 } from "yup";
|
|
849
|
+
var EducationSchema = object20({
|
|
545
850
|
institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
|
|
546
|
-
course:
|
|
547
|
-
fieldOfStudy:
|
|
851
|
+
course: string17().trim().required().label("Course"),
|
|
852
|
+
fieldOfStudy: string17().trim().required().label("Field of Study"),
|
|
548
853
|
duration: DurationSchema({
|
|
549
854
|
format: "YYYY-MM",
|
|
550
855
|
startLabel: "Start Date",
|
|
551
856
|
endLabel: "End Date"
|
|
552
857
|
}).required().label("Duration"),
|
|
553
|
-
description:
|
|
554
|
-
isDistanceLearning:
|
|
858
|
+
description: string17().trim().max(3e3).optional().label("Description"),
|
|
859
|
+
isDistanceLearning: boolean11().default(false).label("Is Distance Learning"),
|
|
555
860
|
location: LocationSchema.required().label("Location"),
|
|
556
|
-
studyType:
|
|
861
|
+
studyType: string17().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
|
|
557
862
|
}).noUnknown().strict().label("Education");
|
|
558
863
|
|
|
559
864
|
// src/user/user-skill.schema.ts
|
|
560
|
-
import { object as
|
|
561
|
-
var UserSkillSchema =
|
|
562
|
-
name:
|
|
563
|
-
proficiencyLevel:
|
|
865
|
+
import { object as object21, string as string18 } from "yup";
|
|
866
|
+
var UserSkillSchema = object21({
|
|
867
|
+
name: string18().required().label("Name"),
|
|
868
|
+
proficiencyLevel: string18().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
|
|
564
869
|
lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
|
|
565
870
|
}).noUnknown().strict().label("Skill");
|
|
566
871
|
|
|
567
872
|
// src/user/project.schema.ts
|
|
568
|
-
import { object as
|
|
569
|
-
var UserProjectSchema =
|
|
570
|
-
name:
|
|
571
|
-
url:
|
|
572
|
-
description:
|
|
873
|
+
import { object as object22, string as string19 } from "yup";
|
|
874
|
+
var UserProjectSchema = object22({
|
|
875
|
+
name: string19().trim().max(50).required().label("Name"),
|
|
876
|
+
url: string19().optional().label("URL"),
|
|
877
|
+
description: string19().trim().min(100).max(3e3).required().label("Description"),
|
|
573
878
|
duration: DurationSchema({
|
|
574
879
|
format: "YYYY-MM",
|
|
575
880
|
startLabel: "Start Date",
|
|
@@ -578,83 +883,83 @@ var UserProjectSchema = object17({
|
|
|
578
883
|
}).noUnknown().strict().label("Project");
|
|
579
884
|
|
|
580
885
|
// src/user/user-certification.schema.ts
|
|
581
|
-
import { object as
|
|
582
|
-
var UserCertificationSchema =
|
|
583
|
-
name:
|
|
886
|
+
import { object as object23, string as string20 } from "yup";
|
|
887
|
+
var UserCertificationSchema = object23({
|
|
888
|
+
name: string20().trim().max(100).required().label("Name"),
|
|
584
889
|
// TODO: Add validation for authority
|
|
585
|
-
authority:
|
|
586
|
-
licenseNumber:
|
|
890
|
+
authority: string20().trim().max(100).required().label("Authority"),
|
|
891
|
+
licenseNumber: string20().trim().max(50).optional().label("License Number"),
|
|
587
892
|
duration: DurationSchema({
|
|
588
893
|
format: "YYYY-MM",
|
|
589
894
|
startLabel: "Start Date",
|
|
590
895
|
endLabel: "End Date"
|
|
591
896
|
}).optional().nullable().label("Duration"),
|
|
592
|
-
url:
|
|
897
|
+
url: string20().optional().label("URL")
|
|
593
898
|
}).noUnknown().strict().label("Certification");
|
|
594
899
|
|
|
595
900
|
// src/user/user-interest.schema.ts
|
|
596
|
-
import { string as
|
|
597
|
-
var UserInterestSchema =
|
|
901
|
+
import { string as string21 } from "yup";
|
|
902
|
+
var UserInterestSchema = string21().trim().required().label("Interest");
|
|
598
903
|
|
|
599
904
|
// src/user/user-language.schema.ts
|
|
600
|
-
import { object as
|
|
601
|
-
var UserLanguageSchema =
|
|
602
|
-
name:
|
|
603
|
-
proficiencyLevel:
|
|
905
|
+
import { object as object24, string as string22 } from "yup";
|
|
906
|
+
var UserLanguageSchema = object24({
|
|
907
|
+
name: string22().trim().required().label("Name"),
|
|
908
|
+
proficiencyLevel: string22().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
|
|
604
909
|
}).noUnknown().strict().label("Language");
|
|
605
910
|
|
|
606
911
|
// src/user/user-additional-info.schema.ts
|
|
607
|
-
import { object as
|
|
608
|
-
var UserAdditionalInfoSchema =
|
|
609
|
-
title:
|
|
610
|
-
description:
|
|
912
|
+
import { object as object25, string as string23 } from "yup";
|
|
913
|
+
var UserAdditionalInfoSchema = object25({
|
|
914
|
+
title: string23().trim().max(60).required().label("Title"),
|
|
915
|
+
description: string23().trim().max(1e3).required().label("Description")
|
|
611
916
|
}).noUnknown().strict().label("User Additional Info");
|
|
612
917
|
|
|
613
918
|
// src/user/general-detail.schema.ts
|
|
614
|
-
import { object as
|
|
615
|
-
var UserGeneralDetailSchema =
|
|
616
|
-
id:
|
|
617
|
-
name:
|
|
618
|
-
first:
|
|
619
|
-
last:
|
|
919
|
+
import { object as object26, string as string24 } from "yup";
|
|
920
|
+
var UserGeneralDetailSchema = object26({
|
|
921
|
+
id: string24().optional().label("ID"),
|
|
922
|
+
name: object26().shape({
|
|
923
|
+
first: string24().trim().max(50).required().label("First Name"),
|
|
924
|
+
last: string24().trim().max(50).optional().label("Last Name")
|
|
620
925
|
}).required().label("Name"),
|
|
621
|
-
headline:
|
|
622
|
-
image:
|
|
623
|
-
aboutMe:
|
|
624
|
-
email:
|
|
625
|
-
mobile:
|
|
626
|
-
emailVerified:
|
|
627
|
-
mobileVerified:
|
|
628
|
-
experienceLevel:
|
|
926
|
+
headline: string24().trim().max(200).optional().label("Headline"),
|
|
927
|
+
image: string24().optional().label("Image"),
|
|
928
|
+
aboutMe: string24().trim().max(3e3).optional().label("About Me"),
|
|
929
|
+
email: string24().required().label("Email"),
|
|
930
|
+
mobile: string24().nullable().optional().label("Mobile"),
|
|
931
|
+
emailVerified: string24().nullable().optional().label("Email Verified"),
|
|
932
|
+
mobileVerified: string24().nullable().optional().label("Mobile Verified"),
|
|
933
|
+
experienceLevel: string24().oneOf(SupportedExperienceLevels).required().label("Experience level"),
|
|
629
934
|
location: LocationSchema.required().label("Location"),
|
|
630
|
-
region:
|
|
631
|
-
country:
|
|
632
|
-
lang:
|
|
935
|
+
region: object26().shape({
|
|
936
|
+
country: string24().trim().required().label("Region Country"),
|
|
937
|
+
lang: string24().trim().required().label("Region Language")
|
|
633
938
|
}).optional().default(void 0).label("Region"),
|
|
634
|
-
profileVisibility:
|
|
939
|
+
profileVisibility: string24().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
|
|
635
940
|
}).noUnknown().strict().label("General Detail");
|
|
636
941
|
|
|
637
942
|
// src/user/user-job-preferences.schema.ts
|
|
638
|
-
import { array as
|
|
639
|
-
var UserJobPreferencesSchema =
|
|
943
|
+
import { array as array9, boolean as boolean12, date as date2, number as number7, object as object27, string as string25 } from "yup";
|
|
944
|
+
var UserJobPreferencesSchema = object27({
|
|
640
945
|
/**
|
|
641
946
|
* Whether the job seeker is openly signalling availability. Surfaces the
|
|
642
947
|
* "Open to work" badge on the public profile and boosts visibility in
|
|
643
948
|
* recruiter search. Defaults to `false` - users must opt in.
|
|
644
949
|
*/
|
|
645
|
-
openToWork:
|
|
950
|
+
openToWork: boolean12().default(false).label("Open to Work"),
|
|
646
951
|
/**
|
|
647
952
|
* How urgently the user is looking for their next job. Drives match scoring
|
|
648
953
|
* and can downgrade the visibility of expired or low-relevance postings for
|
|
649
954
|
* users in `passively_browsing` mode.
|
|
650
955
|
*/
|
|
651
|
-
jobSearchUrgency:
|
|
956
|
+
jobSearchUrgency: string25().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
|
|
652
957
|
/**
|
|
653
958
|
* Locations the user wants to work in. Stores the full `LocationSchema`
|
|
654
959
|
* shape (country, city, state, geo, etc.) as returned by the locations
|
|
655
960
|
* autocomplete API.
|
|
656
961
|
*/
|
|
657
|
-
jobLocations:
|
|
962
|
+
jobLocations: array9().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
|
|
658
963
|
/**
|
|
659
964
|
* Seniority levels the user wants jobs to be matched against. Multi-select
|
|
660
965
|
* (up to 2) for borderline candidates.
|
|
@@ -665,7 +970,7 @@ var UserJobPreferencesSchema = object22({
|
|
|
665
970
|
* Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
|
|
666
971
|
* so search/match logic doesn't have to translate between two vocabularies.
|
|
667
972
|
*/
|
|
668
|
-
targetExperienceLevels:
|
|
973
|
+
targetExperienceLevels: array9().of(string25().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"),
|
|
669
974
|
/**
|
|
670
975
|
* Specializations the user is searching for - free-form titles.
|
|
671
976
|
*
|
|
@@ -674,19 +979,19 @@ var UserJobPreferencesSchema = object22({
|
|
|
674
979
|
* surfaces a curated "Popular Roles" picker for discovery, but the user
|
|
675
980
|
* can ultimately add any title; matching/normalization happens downstream.
|
|
676
981
|
*/
|
|
677
|
-
jobRoles:
|
|
982
|
+
jobRoles: array9().of(string25().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
|
|
678
983
|
/**
|
|
679
984
|
* Minimum acceptable annual base salary, in `minSalaryCurrency`.
|
|
680
985
|
* Stored as an integer in the currency's major unit (e.g. dollars, not cents).
|
|
681
986
|
* Defaults to 0 ("any salary") rather than being optional - every job-seeker
|
|
682
987
|
* has a floor, even if it's zero.
|
|
683
988
|
*/
|
|
684
|
-
minSalary:
|
|
685
|
-
minSalaryCurrency:
|
|
989
|
+
minSalary: number7().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
|
|
990
|
+
minSalaryCurrency: string25().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
|
|
686
991
|
/**
|
|
687
992
|
* Marketing-attribution capture from the final onboarding step.
|
|
688
993
|
*/
|
|
689
|
-
referralSource:
|
|
994
|
+
referralSource: string25().oneOf(SupportedReferralSources).required().label("Referral Source"),
|
|
690
995
|
/**
|
|
691
996
|
* Resumes the user has uploaded. Embedded directly on the user document
|
|
692
997
|
* (capped at 5) - they're cheap to denormalize, every wizard step that
|
|
@@ -700,18 +1005,18 @@ var UserJobPreferencesSchema = object22({
|
|
|
700
1005
|
* AI resume-builder flow - onboarding uploads land here, AI-built resumes
|
|
701
1006
|
* live in their own collection.
|
|
702
1007
|
*/
|
|
703
|
-
resumes:
|
|
704
|
-
|
|
1008
|
+
resumes: array9().of(
|
|
1009
|
+
object27({
|
|
705
1010
|
// Stable id assigned on upload - used to address a specific entry
|
|
706
1011
|
// for delete / set-primary operations without exposing the GCS URL
|
|
707
1012
|
// as a route key.
|
|
708
|
-
id:
|
|
709
|
-
url:
|
|
710
|
-
filename:
|
|
711
|
-
sizeBytes:
|
|
712
|
-
mimeType:
|
|
1013
|
+
id: string25().required().label("ID"),
|
|
1014
|
+
url: string25().required().label("Resume URL"),
|
|
1015
|
+
filename: string25().trim().max(255).optional().label("Filename"),
|
|
1016
|
+
sizeBytes: number7().integer().min(0).optional().label("Size (bytes)"),
|
|
1017
|
+
mimeType: string25().trim().max(120).optional().label("MIME Type"),
|
|
713
1018
|
uploadedAt: date2().required().label("Uploaded At"),
|
|
714
|
-
isPrimary:
|
|
1019
|
+
isPrimary: boolean12().default(false).label("Is Primary")
|
|
715
1020
|
}).noUnknown().strict().label("Resume")
|
|
716
1021
|
).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
|
|
717
1022
|
/**
|
|
@@ -738,106 +1043,106 @@ var UserJobPreferencesSchema = object22({
|
|
|
738
1043
|
* APIs. If `user.<field>` is empty there, the correct behavior is empty,
|
|
739
1044
|
* because the user has not confirmed it yet.
|
|
740
1045
|
*/
|
|
741
|
-
pendingPrefill:
|
|
742
|
-
headline:
|
|
743
|
-
aboutMe:
|
|
744
|
-
mobile:
|
|
1046
|
+
pendingPrefill: object27({
|
|
1047
|
+
headline: string25().trim().optional().label("Pending Headline"),
|
|
1048
|
+
aboutMe: string25().trim().optional().label("Pending About Me"),
|
|
1049
|
+
mobile: string25().trim().optional().label("Pending Mobile"),
|
|
745
1050
|
location: LocationSchema.optional().default(void 0).label("Pending Location"),
|
|
746
|
-
experienceLevel:
|
|
747
|
-
socialAccounts:
|
|
748
|
-
workExperiences:
|
|
749
|
-
educations:
|
|
1051
|
+
experienceLevel: string25().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
|
|
1052
|
+
socialAccounts: array9().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
|
|
1053
|
+
workExperiences: array9().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
|
|
1054
|
+
educations: array9().of(EducationSchema.required()).optional().label("Pending Educations")
|
|
750
1055
|
}).nullable().optional().default(void 0).label("Pending Prefill")
|
|
751
1056
|
}).noUnknown().strict().label("User Job Preferences Schema");
|
|
752
1057
|
|
|
753
1058
|
// src/user/user-recruiter-profile.schema.ts
|
|
754
|
-
import { array as
|
|
755
|
-
var RecruiterPageLinkSchema =
|
|
1059
|
+
import { array as array10, object as object28, string as string26 } from "yup";
|
|
1060
|
+
var RecruiterPageLinkSchema = object28({
|
|
756
1061
|
page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
|
|
757
|
-
jobTitle:
|
|
1062
|
+
jobTitle: string26().trim().max(100).optional().label("Job Title")
|
|
758
1063
|
}).noUnknown().strict().label("Recruiter Page Link");
|
|
759
|
-
var UserRecruiterProfileSchema =
|
|
760
|
-
recruiterProfile:
|
|
761
|
-
hiringFor:
|
|
1064
|
+
var UserRecruiterProfileSchema = object28({
|
|
1065
|
+
recruiterProfile: object28({
|
|
1066
|
+
hiringFor: array10().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
|
|
762
1067
|
}).optional().default(void 0).label("Recruiter Profile")
|
|
763
1068
|
}).noUnknown().strict().label("User Recruiter Profile");
|
|
764
1069
|
|
|
765
1070
|
// src/user/user-coordinator-profile.schema.ts
|
|
766
|
-
import { array as
|
|
767
|
-
var CoordinatorPageLinkSchema =
|
|
1071
|
+
import { array as array11, object as object29, string as string27 } from "yup";
|
|
1072
|
+
var CoordinatorPageLinkSchema = object29({
|
|
768
1073
|
page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
|
|
769
|
-
jobTitle:
|
|
1074
|
+
jobTitle: string27().trim().max(100).optional().label("Job Title")
|
|
770
1075
|
}).noUnknown().strict().label("Coordinator Page Link");
|
|
771
|
-
var UserCoordinatorProfileSchema =
|
|
772
|
-
coordinatorProfile:
|
|
773
|
-
coordinatesAt:
|
|
1076
|
+
var UserCoordinatorProfileSchema = object29({
|
|
1077
|
+
coordinatorProfile: object29({
|
|
1078
|
+
coordinatesAt: array11().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
|
|
774
1079
|
}).optional().default(void 0).label("Coordinator Profile")
|
|
775
1080
|
}).noUnknown().strict().label("User Coordinator Profile");
|
|
776
1081
|
|
|
777
1082
|
// src/user/user.schema.ts
|
|
778
|
-
var UserSchema =
|
|
1083
|
+
var UserSchema = object30({
|
|
779
1084
|
/**
|
|
780
1085
|
* Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
|
|
781
1086
|
*/
|
|
782
|
-
authAccountId:
|
|
1087
|
+
authAccountId: string28().required().label("Auth Account ID"),
|
|
783
1088
|
/**
|
|
784
1089
|
* Social media information about the user (e.g. LinkedIn, GitHub, etc.)
|
|
785
1090
|
*/
|
|
786
|
-
socialAccounts:
|
|
1091
|
+
socialAccounts: array12().of(SocialAccountSchema).default([]).label("Social Accounts"),
|
|
787
1092
|
/**
|
|
788
1093
|
* Work experience information about the user
|
|
789
1094
|
*/
|
|
790
|
-
workExperiences:
|
|
1095
|
+
workExperiences: array12().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
|
|
791
1096
|
/**
|
|
792
1097
|
* Education information about the user
|
|
793
1098
|
*/
|
|
794
|
-
educations:
|
|
1099
|
+
educations: array12().of(EducationSchema).required().default([]).label("Educations"),
|
|
795
1100
|
/**
|
|
796
1101
|
* Skills information about the user
|
|
797
1102
|
*/
|
|
798
|
-
skills:
|
|
1103
|
+
skills: array12().of(UserSkillSchema).required().default([]).label("Skills"),
|
|
799
1104
|
/**
|
|
800
1105
|
* Projects information about the user
|
|
801
1106
|
*/
|
|
802
|
-
projects:
|
|
1107
|
+
projects: array12().of(UserProjectSchema).default([]).label("Projects"),
|
|
803
1108
|
/**
|
|
804
1109
|
* Certifications information about the user
|
|
805
1110
|
*/
|
|
806
|
-
certifications:
|
|
1111
|
+
certifications: array12().of(UserCertificationSchema).default([]).label("Certifications"),
|
|
807
1112
|
/**
|
|
808
1113
|
* Interests information about the user.
|
|
809
1114
|
*/
|
|
810
|
-
interests:
|
|
1115
|
+
interests: array12().of(UserInterestSchema).optional().default([]).label("Interests"),
|
|
811
1116
|
/**
|
|
812
1117
|
* Languages information about the user
|
|
813
1118
|
*/
|
|
814
|
-
languages:
|
|
1119
|
+
languages: array12().of(UserLanguageSchema).required().default([]).label("Languages"),
|
|
815
1120
|
/**
|
|
816
1121
|
* Additional information about the user
|
|
817
1122
|
*/
|
|
818
|
-
additionalInfo:
|
|
1123
|
+
additionalInfo: array12().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
|
|
819
1124
|
/**
|
|
820
1125
|
* Status of the user account
|
|
821
1126
|
*/
|
|
822
|
-
status:
|
|
1127
|
+
status: string28().oneOf(SupportedUserStatuses).required().label("Status"),
|
|
823
1128
|
/**
|
|
824
1129
|
* Roles assigned to the user
|
|
825
1130
|
*/
|
|
826
|
-
roles:
|
|
1131
|
+
roles: array12().of(string28().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
|
|
827
1132
|
/**
|
|
828
1133
|
* Vector embedding of the user's profile for semantic/hybrid search.
|
|
829
1134
|
* Generated from a structured summary of skills, experience, education, etc.
|
|
830
1135
|
* Only generated for public profiles with sufficient completeness (≥60%).
|
|
831
1136
|
*/
|
|
832
|
-
embedding:
|
|
833
|
-
vector:
|
|
834
|
-
model:
|
|
1137
|
+
embedding: object30({
|
|
1138
|
+
vector: array12(number8().required()).optional().label("Embedding vector"),
|
|
1139
|
+
model: string28().optional().label("Embedding model")
|
|
835
1140
|
}).nullable().optional().label("Embedding")
|
|
836
1141
|
}).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
|
|
837
1142
|
|
|
838
1143
|
// src/user/user-completeness.schema.ts
|
|
839
|
-
import { object as
|
|
840
|
-
var UserCompletenessSchema =
|
|
1144
|
+
import { object as object31 } from "yup";
|
|
1145
|
+
var UserCompletenessSchema = object31({
|
|
841
1146
|
additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
|
|
842
1147
|
// Optional
|
|
843
1148
|
certifications: CompletenessScoreSchema(0).label("Certifications"),
|
|
@@ -859,17 +1164,27 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
859
1164
|
"workExperiences" /* WorkExperiences */
|
|
860
1165
|
]);
|
|
861
1166
|
export {
|
|
1167
|
+
AnswerChoiceType,
|
|
1168
|
+
ApplicationReceivePreference,
|
|
1169
|
+
ChoiceQuestionSchema,
|
|
1170
|
+
Common,
|
|
1171
|
+
CompensationType,
|
|
862
1172
|
CompletenessScoreSchema,
|
|
863
1173
|
ContactTypes,
|
|
864
1174
|
CoordinatorPageLinkSchema,
|
|
1175
|
+
DISPLAY_DATE_FORMAT,
|
|
1176
|
+
DISPLAY_DATE_FORMAT_SHORT,
|
|
865
1177
|
DateStringSchema,
|
|
866
1178
|
DbDefaultSchema,
|
|
867
1179
|
DefaultPaginatedResponse,
|
|
868
1180
|
DefaultPaginationOptions,
|
|
869
1181
|
DefaultUserRoles,
|
|
870
1182
|
DurationSchema,
|
|
1183
|
+
EMPTY_STRING,
|
|
871
1184
|
EducationLevel,
|
|
872
1185
|
EducationSchema,
|
|
1186
|
+
EmployeeCount,
|
|
1187
|
+
EmploymentType,
|
|
873
1188
|
ExperienceLevel,
|
|
874
1189
|
GeneraDetailFields,
|
|
875
1190
|
GroupManagedBy,
|
|
@@ -879,7 +1194,10 @@ export {
|
|
|
879
1194
|
GroupStatus,
|
|
880
1195
|
GroupTranslationSchema,
|
|
881
1196
|
GroupVisibility,
|
|
1197
|
+
InputQuestionSchema,
|
|
1198
|
+
JobSchema,
|
|
882
1199
|
JobSearchUrgency,
|
|
1200
|
+
JobStatus,
|
|
883
1201
|
LocationSchema,
|
|
884
1202
|
MIN_SALARY_LOWER_BOUND,
|
|
885
1203
|
MIN_SALARY_UPPER_BOUND,
|
|
@@ -888,23 +1206,35 @@ export {
|
|
|
888
1206
|
PageType,
|
|
889
1207
|
PaginationSchema,
|
|
890
1208
|
ProficiencyLevel,
|
|
1209
|
+
QuestionSchema,
|
|
1210
|
+
QuestionType,
|
|
1211
|
+
ReadAndAcknowledgeQuestionSchema,
|
|
891
1212
|
RecruiterPageLinkSchema,
|
|
892
1213
|
ReferralSource,
|
|
893
1214
|
ReportReason,
|
|
894
1215
|
ReportSchema,
|
|
895
1216
|
ResourceType,
|
|
1217
|
+
SITEMAP_FORMAT,
|
|
1218
|
+
SYSTEM_DATE_FORMAT,
|
|
896
1219
|
SkillSchema,
|
|
897
1220
|
SocialAccount,
|
|
898
1221
|
SocialAccountSchema,
|
|
899
1222
|
StudentCompletenessSchema,
|
|
900
1223
|
StudyType,
|
|
1224
|
+
SupportedAnswerChoiceTypes,
|
|
1225
|
+
SupportedApplicationReceivePreferences,
|
|
1226
|
+
SupportedCompensationTypes,
|
|
901
1227
|
SupportedContactTypes,
|
|
902
1228
|
SupportedEducationLevels,
|
|
1229
|
+
SupportedEmployeeCounts,
|
|
1230
|
+
SupportedEmploymentTypes,
|
|
903
1231
|
SupportedExperienceLevels,
|
|
904
1232
|
SupportedJobSearchUrgencies,
|
|
1233
|
+
SupportedJobStatuses,
|
|
905
1234
|
SupportedPageStatuses,
|
|
906
1235
|
SupportedPageTypes,
|
|
907
1236
|
SupportedProficiencyLevels,
|
|
1237
|
+
SupportedQuestionTypes,
|
|
908
1238
|
SupportedReferralSources,
|
|
909
1239
|
SupportedReportReasons,
|
|
910
1240
|
SupportedResourceTypes,
|
|
@@ -914,6 +1244,7 @@ export {
|
|
|
914
1244
|
SupportedUserProfileVisibilities,
|
|
915
1245
|
SupportedUserRoles,
|
|
916
1246
|
SupportedUserStatuses,
|
|
1247
|
+
SupportedWorkModes,
|
|
917
1248
|
TermsAcceptedSchema,
|
|
918
1249
|
UserAdditionalInfoSchema,
|
|
919
1250
|
UserCertificationSchema,
|
|
@@ -921,6 +1252,7 @@ export {
|
|
|
921
1252
|
UserCoordinatorProfileSchema,
|
|
922
1253
|
UserDetailType,
|
|
923
1254
|
UserGeneralDetailSchema,
|
|
1255
|
+
UserIdAndCreatedAtSchema,
|
|
924
1256
|
UserInterestSchema,
|
|
925
1257
|
UserJobPreferencesSchema,
|
|
926
1258
|
UserLanguageSchema,
|
|
@@ -932,5 +1264,7 @@ export {
|
|
|
932
1264
|
UserSkillSchema,
|
|
933
1265
|
UserStatus,
|
|
934
1266
|
WorkExperienceSchema,
|
|
935
|
-
|
|
1267
|
+
WorkMode,
|
|
1268
|
+
dateString,
|
|
1269
|
+
getSchemaByQuestion
|
|
936
1270
|
};
|