@zyacreatives/shared 1.9.3 → 1.9.5
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/constants.d.ts +69 -0
- package/dist/constants.js +62 -1
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/job-application.d.ts +1 -34
- package/dist/schemas/job-application.js +0 -22
- package/dist/schemas/job.d.ts +225 -0
- package/dist/schemas/job.js +135 -0
- package/dist/types/job-application.d.ts +1 -1
- package/package.json +1 -1
- package/src/constants.ts +80 -0
- package/src/schemas/index.ts +1 -1
- package/src/schemas/job-application.ts +0 -33
- package/src/schemas/job.ts +189 -0
- package/src/types/job-application.ts +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -92,6 +92,21 @@ export declare const POST_TYPES: {
|
|
|
92
92
|
readonly POST_WITH_LINKS: "POST_WITH_LINKS";
|
|
93
93
|
readonly POST_WITH_MEDIA: "POST_WITH_MEDIA";
|
|
94
94
|
};
|
|
95
|
+
export declare const JOB_TYPE: {
|
|
96
|
+
GIG: string;
|
|
97
|
+
ROLE: string;
|
|
98
|
+
};
|
|
99
|
+
export declare const WORK_MODE: {
|
|
100
|
+
REMOTE: string;
|
|
101
|
+
HYBRID: string;
|
|
102
|
+
ON_SITE: string;
|
|
103
|
+
};
|
|
104
|
+
export declare const EMPLOYMENT_TYPE: {
|
|
105
|
+
FULL_TIME: string;
|
|
106
|
+
PART_TIME: string;
|
|
107
|
+
FREELANCE: string;
|
|
108
|
+
INTERNSHIP: string;
|
|
109
|
+
};
|
|
95
110
|
export declare const JOB_AVAILABILITY_TYPES: {
|
|
96
111
|
readonly FULL_TIME: "FULL_TIME";
|
|
97
112
|
readonly PART_TIME: "PART_TIME";
|
|
@@ -106,7 +121,61 @@ export declare const WAGE_TYPES: {
|
|
|
106
121
|
readonly MONTHLY: "MONTHLY";
|
|
107
122
|
readonly PROJECT_BASED: "PROJECT_BASED";
|
|
108
123
|
};
|
|
124
|
+
export declare const JOB_SECTIONS: {
|
|
125
|
+
PERSONAL_INFORMATION: string;
|
|
126
|
+
PHONE_NO: string;
|
|
127
|
+
PROFESSIONAL_INFORMATION: string;
|
|
128
|
+
RESUME: string;
|
|
129
|
+
COVER_LETTER: string;
|
|
130
|
+
PORTFOLIO_OR_WORK_SAMPLES: string;
|
|
131
|
+
AVAILABILITY: string;
|
|
132
|
+
WAGES: string;
|
|
133
|
+
};
|
|
134
|
+
export declare const JOB_LOCATIONS: {
|
|
135
|
+
readonly AFRICA: "Africa";
|
|
136
|
+
readonly REMOTE: "Remote";
|
|
137
|
+
readonly EUROPE: "Europe";
|
|
138
|
+
readonly ASIA: "Asia";
|
|
139
|
+
readonly NORTH_AMERICA: "North America";
|
|
140
|
+
readonly SOUTH_AMERICA: "South America";
|
|
141
|
+
readonly MIDDLE_EAST: "Middle East";
|
|
142
|
+
readonly OCEANIA: "Oceania";
|
|
143
|
+
readonly EMEA: "EMEA";
|
|
144
|
+
readonly ASIA_PACIFIC: "Asia Pacific";
|
|
145
|
+
readonly GLOBAL: "Global";
|
|
146
|
+
readonly OTHER: "Other";
|
|
147
|
+
};
|
|
148
|
+
export type JobLocation = (typeof JOB_LOCATIONS)[keyof typeof JOB_LOCATIONS];
|
|
149
|
+
export declare const GIG_TYPE: {
|
|
150
|
+
ONE_TIME: string;
|
|
151
|
+
RECURRING: string;
|
|
152
|
+
};
|
|
153
|
+
export declare const WAGES_CURRENCY: {
|
|
154
|
+
readonly USD: "USD";
|
|
155
|
+
readonly EUR: "EUR";
|
|
156
|
+
readonly GBP: "GBP";
|
|
157
|
+
readonly NGN: "NGN";
|
|
158
|
+
readonly CAD: "CAD";
|
|
159
|
+
readonly AUD: "AUD";
|
|
160
|
+
readonly JPY: "JPY";
|
|
161
|
+
readonly CHF: "CHF";
|
|
162
|
+
readonly INR: "INR";
|
|
163
|
+
readonly ZAR: "ZAR";
|
|
164
|
+
};
|
|
165
|
+
export declare const JOBPOST_STATUS: {
|
|
166
|
+
readonly ACTIVE: "ACTIVE";
|
|
167
|
+
readonly DRAFT: "DRAFT";
|
|
168
|
+
readonly ARCHIVED: "ARCHIVED";
|
|
169
|
+
readonly DELETED: "DELETED";
|
|
170
|
+
};
|
|
171
|
+
export type JobSections = (typeof JOB_SECTIONS)[keyof typeof JOB_SECTIONS];
|
|
172
|
+
export type WagesCurrency = (typeof WAGES_CURRENCY)[keyof typeof WAGES_CURRENCY];
|
|
173
|
+
export type JobPostStatus = (typeof JOBPOST_STATUS)[keyof typeof JOBPOST_STATUS];
|
|
109
174
|
export type Role = (typeof ROLES)[keyof typeof ROLES];
|
|
175
|
+
export type JobType = (typeof JOB_TYPE)[keyof typeof JOB_TYPE];
|
|
176
|
+
export type WorkMode = (typeof WORK_MODE)[keyof typeof WORK_MODE];
|
|
177
|
+
export type GigType = (typeof GIG_TYPE)[keyof typeof GIG_TYPE];
|
|
178
|
+
export type EmploymentType = (typeof EMPLOYMENT_TYPE)[keyof typeof EMPLOYMENT_TYPE];
|
|
110
179
|
export type JobAvailabilityTypes = (typeof JOB_AVAILABILITY_TYPES)[keyof typeof JOB_AVAILABILITY_TYPES];
|
|
111
180
|
export type WageTypes = (typeof WAGE_TYPES)[keyof typeof WAGE_TYPES];
|
|
112
181
|
export type PostType = (typeof POST_TYPES)[keyof typeof POST_TYPES];
|
package/dist/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_DISCIPLINES = exports.API_ROUTES = exports.WAGE_TYPES = exports.JOB_AVAILABILITY_TYPES = exports.POST_TYPES = exports.ACTIVITY_PARENT_TYPES = exports.INVESTOR_VERIFICATION_DOCUMENT_TYPES = exports.INVESTOR_VERIFICATION_DOCUMENT_STATUSES = exports.GEOGRAPHIC_FOCUS = exports.INVESTMENT_SIZES = exports.INVESTOR_TYPES = exports.ONBOARDING_PAGES = exports.EXPERIENCE_LEVELS = exports.CLIENT_TYPES = exports.USER_STATUSES = exports.ROLES = void 0;
|
|
3
|
+
exports.DEFAULT_DISCIPLINES = exports.API_ROUTES = exports.JOBPOST_STATUS = exports.WAGES_CURRENCY = exports.GIG_TYPE = exports.JOB_LOCATIONS = exports.JOB_SECTIONS = exports.WAGE_TYPES = exports.JOB_AVAILABILITY_TYPES = exports.EMPLOYMENT_TYPE = exports.WORK_MODE = exports.JOB_TYPE = exports.POST_TYPES = exports.ACTIVITY_PARENT_TYPES = exports.INVESTOR_VERIFICATION_DOCUMENT_TYPES = exports.INVESTOR_VERIFICATION_DOCUMENT_STATUSES = exports.GEOGRAPHIC_FOCUS = exports.INVESTMENT_SIZES = exports.INVESTOR_TYPES = exports.ONBOARDING_PAGES = exports.EXPERIENCE_LEVELS = exports.CLIENT_TYPES = exports.USER_STATUSES = exports.ROLES = void 0;
|
|
4
4
|
exports.ROLES = {
|
|
5
5
|
CREATIVE: "CREATIVE",
|
|
6
6
|
BRAND: "BRAND",
|
|
@@ -95,6 +95,21 @@ exports.POST_TYPES = {
|
|
|
95
95
|
POST_WITH_LINKS: "POST_WITH_LINKS",
|
|
96
96
|
POST_WITH_MEDIA: "POST_WITH_MEDIA",
|
|
97
97
|
};
|
|
98
|
+
exports.JOB_TYPE = {
|
|
99
|
+
GIG: "GIG",
|
|
100
|
+
ROLE: "ROLE",
|
|
101
|
+
};
|
|
102
|
+
exports.WORK_MODE = {
|
|
103
|
+
REMOTE: "REMOTE",
|
|
104
|
+
HYBRID: "HYBRID",
|
|
105
|
+
ON_SITE: "ON_SITE",
|
|
106
|
+
};
|
|
107
|
+
exports.EMPLOYMENT_TYPE = {
|
|
108
|
+
FULL_TIME: "FULL_TIME",
|
|
109
|
+
PART_TIME: "PART_TIME",
|
|
110
|
+
FREELANCE: "FREELANCE",
|
|
111
|
+
INTERNSHIP: "INTERNSHIP",
|
|
112
|
+
};
|
|
98
113
|
exports.JOB_AVAILABILITY_TYPES = {
|
|
99
114
|
FULL_TIME: "FULL_TIME",
|
|
100
115
|
PART_TIME: "PART_TIME",
|
|
@@ -109,6 +124,52 @@ exports.WAGE_TYPES = {
|
|
|
109
124
|
MONTHLY: "MONTHLY",
|
|
110
125
|
PROJECT_BASED: "PROJECT_BASED",
|
|
111
126
|
};
|
|
127
|
+
exports.JOB_SECTIONS = {
|
|
128
|
+
PERSONAL_INFORMATION: "PERSONAL_INFORMATION",
|
|
129
|
+
PHONE_NO: "PHONE_NO",
|
|
130
|
+
PROFESSIONAL_INFORMATION: "PROFESSIONAL_INFORMATION",
|
|
131
|
+
RESUME: "RESUME",
|
|
132
|
+
COVER_LETTER: "COVER_LETTER",
|
|
133
|
+
PORTFOLIO_OR_WORK_SAMPLES: "PORTFOLIO_OR_WORK_SAMPLES",
|
|
134
|
+
AVAILABILITY: "AVAILABILITY",
|
|
135
|
+
WAGES: "WAGES",
|
|
136
|
+
};
|
|
137
|
+
exports.JOB_LOCATIONS = {
|
|
138
|
+
AFRICA: "Africa",
|
|
139
|
+
REMOTE: "Remote",
|
|
140
|
+
EUROPE: "Europe",
|
|
141
|
+
ASIA: "Asia",
|
|
142
|
+
NORTH_AMERICA: "North America",
|
|
143
|
+
SOUTH_AMERICA: "South America",
|
|
144
|
+
MIDDLE_EAST: "Middle East",
|
|
145
|
+
OCEANIA: "Oceania",
|
|
146
|
+
EMEA: "EMEA", // Europe, Middle East, Africa
|
|
147
|
+
ASIA_PACIFIC: "Asia Pacific", // Asia Pacific
|
|
148
|
+
GLOBAL: "Global",
|
|
149
|
+
OTHER: "Other",
|
|
150
|
+
};
|
|
151
|
+
exports.GIG_TYPE = {
|
|
152
|
+
ONE_TIME: "ONE_TIME",
|
|
153
|
+
RECURRING: "RECURRING",
|
|
154
|
+
};
|
|
155
|
+
exports.WAGES_CURRENCY = {
|
|
156
|
+
USD: "USD",
|
|
157
|
+
EUR: "EUR",
|
|
158
|
+
GBP: "GBP",
|
|
159
|
+
NGN: "NGN",
|
|
160
|
+
CAD: "CAD",
|
|
161
|
+
AUD: "AUD",
|
|
162
|
+
JPY: "JPY",
|
|
163
|
+
CHF: "CHF",
|
|
164
|
+
INR: "INR",
|
|
165
|
+
ZAR: "ZAR",
|
|
166
|
+
};
|
|
167
|
+
exports.JOBPOST_STATUS = {
|
|
168
|
+
ACTIVE: "ACTIVE",
|
|
169
|
+
DRAFT: "DRAFT",
|
|
170
|
+
ARCHIVED: "ARCHIVED",
|
|
171
|
+
DELETED: "DELETED",
|
|
172
|
+
};
|
|
112
173
|
exports.API_ROUTES = {
|
|
113
174
|
healthCheck: "/health",
|
|
114
175
|
username: {
|
package/dist/schemas/index.d.ts
CHANGED
package/dist/schemas/index.js
CHANGED
|
@@ -25,4 +25,4 @@ __exportStar(require("./file"), exports);
|
|
|
25
25
|
__exportStar(require("./username"), exports);
|
|
26
26
|
__exportStar(require("./post"), exports);
|
|
27
27
|
__exportStar(require("./entity-stats"), exports);
|
|
28
|
-
__exportStar(require("./job
|
|
28
|
+
__exportStar(require("./job"), exports);
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const CreateJobApplicationInputSchema: z.ZodObject<{
|
|
3
|
-
firstName: z.ZodString;
|
|
4
|
-
lastName: z.ZodString;
|
|
5
|
-
emailAddress: z.ZodEmail;
|
|
6
|
-
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
7
|
-
currentRole: z.ZodString;
|
|
8
|
-
experienceLevel: z.ZodEnum<{
|
|
9
|
-
"0-1 year": "0-1 year";
|
|
10
|
-
"1-3 years": "1-3 years";
|
|
11
|
-
"3-5 years": "3-5 years";
|
|
12
|
-
"5+ years": "5+ years";
|
|
13
|
-
}>;
|
|
14
|
-
resumeUrl: z.ZodURL;
|
|
15
|
-
workSampleUrls: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
16
|
-
portfolioUrl: z.ZodOptional<z.ZodURL>;
|
|
17
|
-
coverLetterUrl: z.ZodOptional<z.ZodURL>;
|
|
18
|
-
receiveEmailUpdates: z.ZodBoolean;
|
|
19
|
-
wagesAmount: z.ZodBoolean;
|
|
20
|
-
wagesType: z.ZodEnum<{
|
|
21
|
-
HOURLY: "HOURLY";
|
|
22
|
-
DAILY: "DAILY";
|
|
23
|
-
WEEKLY: "WEEKLY";
|
|
24
|
-
MONTHLY: "MONTHLY";
|
|
25
|
-
PROJECT_BASED: "PROJECT_BASED";
|
|
26
|
-
}>;
|
|
27
|
-
availability: z.ZodEnum<{
|
|
28
|
-
FULL_TIME: "FULL_TIME";
|
|
29
|
-
PART_TIME: "PART_TIME";
|
|
30
|
-
CONTRACT: "CONTRACT";
|
|
31
|
-
FREELANCE: "FREELANCE";
|
|
32
|
-
INTERNSHIP: "INTERNSHIP";
|
|
33
|
-
}>;
|
|
34
|
-
}, z.core.$strip>;
|
|
1
|
+
export {};
|
|
@@ -1,24 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.CreateJobApplicationInputSchema = void 0;
|
|
7
|
-
const zod_1 = __importDefault(require("zod"));
|
|
8
|
-
const constants_1 = require("../constants");
|
|
9
|
-
exports.CreateJobApplicationInputSchema = zod_1.default.object({
|
|
10
|
-
firstName: zod_1.default.string(),
|
|
11
|
-
lastName: zod_1.default.string(),
|
|
12
|
-
emailAddress: zod_1.default.email(),
|
|
13
|
-
phoneNumber: zod_1.default.string().optional(),
|
|
14
|
-
currentRole: zod_1.default.string(),
|
|
15
|
-
experienceLevel: zod_1.default.enum(Object.values(constants_1.EXPERIENCE_LEVELS)),
|
|
16
|
-
resumeUrl: zod_1.default.url(),
|
|
17
|
-
workSampleUrls: zod_1.default.array(zod_1.default.url()).optional(),
|
|
18
|
-
portfolioUrl: zod_1.default.url().optional(),
|
|
19
|
-
coverLetterUrl: zod_1.default.url().optional(),
|
|
20
|
-
receiveEmailUpdates: zod_1.default.boolean(),
|
|
21
|
-
wagesAmount: zod_1.default.boolean(),
|
|
22
|
-
wagesType: zod_1.default.enum(Object.values(constants_1.WAGE_TYPES)),
|
|
23
|
-
availability: zod_1.default.enum(Object.values(constants_1.JOB_AVAILABILITY_TYPES)),
|
|
24
|
-
});
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const CreateJobApplicationInputSchema: z.ZodObject<{
|
|
3
|
+
firstName: z.ZodString;
|
|
4
|
+
lastName: z.ZodString;
|
|
5
|
+
emailAddress: z.ZodEmail;
|
|
6
|
+
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
7
|
+
currentRole: z.ZodString;
|
|
8
|
+
experienceLevel: z.ZodEnum<{
|
|
9
|
+
"0-1 year": "0-1 year";
|
|
10
|
+
"1-3 years": "1-3 years";
|
|
11
|
+
"3-5 years": "3-5 years";
|
|
12
|
+
"5+ years": "5+ years";
|
|
13
|
+
}>;
|
|
14
|
+
resumeUrl: z.ZodURL;
|
|
15
|
+
workSampleUrls: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
16
|
+
portfolioUrl: z.ZodOptional<z.ZodURL>;
|
|
17
|
+
coverLetterUrl: z.ZodOptional<z.ZodURL>;
|
|
18
|
+
receiveEmailUpdates: z.ZodBoolean;
|
|
19
|
+
wagesAmount: z.ZodString;
|
|
20
|
+
wagesType: z.ZodEnum<{
|
|
21
|
+
HOURLY: "HOURLY";
|
|
22
|
+
DAILY: "DAILY";
|
|
23
|
+
WEEKLY: "WEEKLY";
|
|
24
|
+
MONTHLY: "MONTHLY";
|
|
25
|
+
PROJECT_BASED: "PROJECT_BASED";
|
|
26
|
+
}>;
|
|
27
|
+
availability: z.ZodEnum<{
|
|
28
|
+
FULL_TIME: "FULL_TIME";
|
|
29
|
+
PART_TIME: "PART_TIME";
|
|
30
|
+
FREELANCE: "FREELANCE";
|
|
31
|
+
INTERNSHIP: "INTERNSHIP";
|
|
32
|
+
CONTRACT: "CONTRACT";
|
|
33
|
+
}>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export declare const CreateJobInputSchema: z.ZodObject<{
|
|
36
|
+
title: z.ZodString;
|
|
37
|
+
jobType: z.ZodEnum<{
|
|
38
|
+
[x: string]: string;
|
|
39
|
+
}>;
|
|
40
|
+
employmentType: z.ZodEnum<{
|
|
41
|
+
[x: string]: string;
|
|
42
|
+
}>;
|
|
43
|
+
workMode: z.ZodEnum<{
|
|
44
|
+
[x: string]: string;
|
|
45
|
+
}>;
|
|
46
|
+
gigType: z.ZodOptional<z.ZodEnum<{
|
|
47
|
+
[x: string]: string;
|
|
48
|
+
}>>;
|
|
49
|
+
location: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
50
|
+
Africa: "Africa";
|
|
51
|
+
Asia: "Asia";
|
|
52
|
+
Europe: "Europe";
|
|
53
|
+
"North America": "North America";
|
|
54
|
+
"South America": "South America";
|
|
55
|
+
"Middle East": "Middle East";
|
|
56
|
+
Oceania: "Oceania";
|
|
57
|
+
Global: "Global";
|
|
58
|
+
Other: "Other";
|
|
59
|
+
Remote: "Remote";
|
|
60
|
+
EMEA: "EMEA";
|
|
61
|
+
"Asia Pacific": "Asia Pacific";
|
|
62
|
+
}>>>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
export declare const CreateRoleJobInputSchema: z.ZodObject<{
|
|
65
|
+
experienceLevel: z.ZodEnum<{
|
|
66
|
+
"0-1 year": "0-1 year";
|
|
67
|
+
"1-3 years": "1-3 years";
|
|
68
|
+
"3-5 years": "3-5 years";
|
|
69
|
+
"5+ years": "5+ years";
|
|
70
|
+
}>;
|
|
71
|
+
overview: z.ZodString;
|
|
72
|
+
keyResponsibilities: z.ZodArray<z.ZodString>;
|
|
73
|
+
requiredSkills: z.ZodArray<z.ZodString>;
|
|
74
|
+
employeeRequirements: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
75
|
+
companyBenefits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
76
|
+
wagesMin: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
wagesMax: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
wagesCurrency: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
USD: "USD";
|
|
80
|
+
EUR: "EUR";
|
|
81
|
+
GBP: "GBP";
|
|
82
|
+
NGN: "NGN";
|
|
83
|
+
CAD: "CAD";
|
|
84
|
+
AUD: "AUD";
|
|
85
|
+
JPY: "JPY";
|
|
86
|
+
CHF: "CHF";
|
|
87
|
+
INR: "INR";
|
|
88
|
+
ZAR: "ZAR";
|
|
89
|
+
}>>;
|
|
90
|
+
wagesType: z.ZodOptional<z.ZodEnum<{
|
|
91
|
+
HOURLY: "HOURLY";
|
|
92
|
+
DAILY: "DAILY";
|
|
93
|
+
WEEKLY: "WEEKLY";
|
|
94
|
+
MONTHLY: "MONTHLY";
|
|
95
|
+
PROJECT_BASED: "PROJECT_BASED";
|
|
96
|
+
}>>;
|
|
97
|
+
}, z.core.$strip>;
|
|
98
|
+
export declare const CreateGigJobInputSchema: z.ZodObject<{
|
|
99
|
+
overview: z.ZodString;
|
|
100
|
+
deliverables: z.ZodArray<z.ZodString>;
|
|
101
|
+
employeeRequirements: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
102
|
+
aboutCompany: z.ZodOptional<z.ZodString>;
|
|
103
|
+
requiredSkills: z.ZodArray<z.ZodString>;
|
|
104
|
+
wagesMin: z.ZodOptional<z.ZodNumber>;
|
|
105
|
+
wagesMax: z.ZodOptional<z.ZodNumber>;
|
|
106
|
+
wagesCurrency: z.ZodOptional<z.ZodEnum<{
|
|
107
|
+
USD: "USD";
|
|
108
|
+
EUR: "EUR";
|
|
109
|
+
GBP: "GBP";
|
|
110
|
+
NGN: "NGN";
|
|
111
|
+
CAD: "CAD";
|
|
112
|
+
AUD: "AUD";
|
|
113
|
+
JPY: "JPY";
|
|
114
|
+
CHF: "CHF";
|
|
115
|
+
INR: "INR";
|
|
116
|
+
ZAR: "ZAR";
|
|
117
|
+
}>>;
|
|
118
|
+
wagesType: z.ZodOptional<z.ZodEnum<{
|
|
119
|
+
HOURLY: "HOURLY";
|
|
120
|
+
DAILY: "DAILY";
|
|
121
|
+
WEEKLY: "WEEKLY";
|
|
122
|
+
MONTHLY: "MONTHLY";
|
|
123
|
+
PROJECT_BASED: "PROJECT_BASED";
|
|
124
|
+
}>>;
|
|
125
|
+
}, z.core.$strip>;
|
|
126
|
+
export declare const UpdateRoleJobInputSchema: z.ZodObject<{
|
|
127
|
+
experienceLevel: z.ZodOptional<z.ZodEnum<{
|
|
128
|
+
"0-1 year": "0-1 year";
|
|
129
|
+
"1-3 years": "1-3 years";
|
|
130
|
+
"3-5 years": "3-5 years";
|
|
131
|
+
"5+ years": "5+ years";
|
|
132
|
+
}>>;
|
|
133
|
+
overview: z.ZodOptional<z.ZodString>;
|
|
134
|
+
keyResponsibilities: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
135
|
+
requiredSkills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
|
+
employeeRequirements: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
137
|
+
companyBenefits: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
138
|
+
wagesMin: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
139
|
+
wagesMax: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
140
|
+
wagesCurrency: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
141
|
+
USD: "USD";
|
|
142
|
+
EUR: "EUR";
|
|
143
|
+
GBP: "GBP";
|
|
144
|
+
NGN: "NGN";
|
|
145
|
+
CAD: "CAD";
|
|
146
|
+
AUD: "AUD";
|
|
147
|
+
JPY: "JPY";
|
|
148
|
+
CHF: "CHF";
|
|
149
|
+
INR: "INR";
|
|
150
|
+
ZAR: "ZAR";
|
|
151
|
+
}>>>;
|
|
152
|
+
wagesType: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
153
|
+
HOURLY: "HOURLY";
|
|
154
|
+
DAILY: "DAILY";
|
|
155
|
+
WEEKLY: "WEEKLY";
|
|
156
|
+
MONTHLY: "MONTHLY";
|
|
157
|
+
PROJECT_BASED: "PROJECT_BASED";
|
|
158
|
+
}>>>;
|
|
159
|
+
id: z.ZodCUID2;
|
|
160
|
+
jobSections: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
161
|
+
[x: string]: string;
|
|
162
|
+
}>>>;
|
|
163
|
+
}, z.core.$strip>;
|
|
164
|
+
export declare const UpdateGigJobInputSchema: z.ZodObject<{
|
|
165
|
+
overview: z.ZodOptional<z.ZodString>;
|
|
166
|
+
deliverables: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
167
|
+
employeeRequirements: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
168
|
+
aboutCompany: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
169
|
+
requiredSkills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
170
|
+
wagesMin: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
171
|
+
wagesMax: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
172
|
+
wagesCurrency: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
173
|
+
USD: "USD";
|
|
174
|
+
EUR: "EUR";
|
|
175
|
+
GBP: "GBP";
|
|
176
|
+
NGN: "NGN";
|
|
177
|
+
CAD: "CAD";
|
|
178
|
+
AUD: "AUD";
|
|
179
|
+
JPY: "JPY";
|
|
180
|
+
CHF: "CHF";
|
|
181
|
+
INR: "INR";
|
|
182
|
+
ZAR: "ZAR";
|
|
183
|
+
}>>>;
|
|
184
|
+
wagesType: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
185
|
+
HOURLY: "HOURLY";
|
|
186
|
+
DAILY: "DAILY";
|
|
187
|
+
WEEKLY: "WEEKLY";
|
|
188
|
+
MONTHLY: "MONTHLY";
|
|
189
|
+
PROJECT_BASED: "PROJECT_BASED";
|
|
190
|
+
}>>>;
|
|
191
|
+
id: z.ZodCUID2;
|
|
192
|
+
jobSections: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
193
|
+
[x: string]: string;
|
|
194
|
+
}>>>;
|
|
195
|
+
}, z.core.$strip>;
|
|
196
|
+
export declare const UpdateJobInputSchema: z.ZodObject<{
|
|
197
|
+
title: z.ZodOptional<z.ZodString>;
|
|
198
|
+
jobType: z.ZodOptional<z.ZodEnum<{
|
|
199
|
+
[x: string]: string;
|
|
200
|
+
}>>;
|
|
201
|
+
employmentType: z.ZodOptional<z.ZodEnum<{
|
|
202
|
+
[x: string]: string;
|
|
203
|
+
}>>;
|
|
204
|
+
workMode: z.ZodOptional<z.ZodEnum<{
|
|
205
|
+
[x: string]: string;
|
|
206
|
+
}>>;
|
|
207
|
+
gigType: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
208
|
+
[x: string]: string;
|
|
209
|
+
}>>>;
|
|
210
|
+
location: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
211
|
+
Africa: "Africa";
|
|
212
|
+
Asia: "Asia";
|
|
213
|
+
Europe: "Europe";
|
|
214
|
+
"North America": "North America";
|
|
215
|
+
"South America": "South America";
|
|
216
|
+
"Middle East": "Middle East";
|
|
217
|
+
Oceania: "Oceania";
|
|
218
|
+
Global: "Global";
|
|
219
|
+
Other: "Other";
|
|
220
|
+
Remote: "Remote";
|
|
221
|
+
EMEA: "EMEA";
|
|
222
|
+
"Asia Pacific": "Asia Pacific";
|
|
223
|
+
}>>>>;
|
|
224
|
+
id: z.ZodCUID2;
|
|
225
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateJobInputSchema = exports.UpdateGigJobInputSchema = exports.UpdateRoleJobInputSchema = exports.CreateGigJobInputSchema = exports.CreateRoleJobInputSchema = exports.CreateJobInputSchema = exports.CreateJobApplicationInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
exports.CreateJobApplicationInputSchema = zod_1.z.object({
|
|
7
|
+
firstName: zod_1.z.string(),
|
|
8
|
+
lastName: zod_1.z.string(),
|
|
9
|
+
emailAddress: zod_1.z.email(),
|
|
10
|
+
phoneNumber: zod_1.z.string().optional(),
|
|
11
|
+
currentRole: zod_1.z.string(),
|
|
12
|
+
experienceLevel: zod_1.z.enum(Object.values(constants_1.EXPERIENCE_LEVELS)),
|
|
13
|
+
resumeUrl: zod_1.z.url(),
|
|
14
|
+
workSampleUrls: zod_1.z.array(zod_1.z.url()).optional(),
|
|
15
|
+
portfolioUrl: zod_1.z.url().optional(),
|
|
16
|
+
coverLetterUrl: zod_1.z.url().optional(),
|
|
17
|
+
receiveEmailUpdates: zod_1.z.boolean(),
|
|
18
|
+
wagesAmount: zod_1.z.string(),
|
|
19
|
+
wagesType: zod_1.z.enum(Object.values(constants_1.WAGE_TYPES)),
|
|
20
|
+
availability: zod_1.z.enum(Object.values(constants_1.JOB_AVAILABILITY_TYPES)),
|
|
21
|
+
});
|
|
22
|
+
exports.CreateJobInputSchema = zod_1.z
|
|
23
|
+
.object({
|
|
24
|
+
title: zod_1.z.string(),
|
|
25
|
+
jobType: zod_1.z.enum(Object.values(constants_1.JOB_TYPE)),
|
|
26
|
+
// status: z.enum(Object.values(JOB_TYPE) as [JobType, ...JobType[]]),
|
|
27
|
+
employmentType: zod_1.z.enum(Object.values(constants_1.EMPLOYMENT_TYPE)),
|
|
28
|
+
workMode: zod_1.z.enum(Object.values(constants_1.WORK_MODE)),
|
|
29
|
+
gigType: zod_1.z
|
|
30
|
+
.enum(Object.values(constants_1.GIG_TYPE))
|
|
31
|
+
.optional(),
|
|
32
|
+
location: zod_1.z
|
|
33
|
+
.array(zod_1.z.enum(Object.values(constants_1.JOB_LOCATIONS)))
|
|
34
|
+
.nonempty("At least one job location must be selected")
|
|
35
|
+
.default([constants_1.JOB_LOCATIONS.REMOTE]),
|
|
36
|
+
})
|
|
37
|
+
.superRefine((data, ctx) => {
|
|
38
|
+
if (data.jobType === constants_1.JOB_TYPE.ROLE) {
|
|
39
|
+
if (data.gigType !== undefined) {
|
|
40
|
+
ctx.addIssue({
|
|
41
|
+
path: ["gigType"],
|
|
42
|
+
code: "custom",
|
|
43
|
+
message: "gigType must be null/undefined for PROJECT jobs",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (!data.employmentType) {
|
|
47
|
+
ctx.addIssue({
|
|
48
|
+
path: ["employmentType"],
|
|
49
|
+
code: "custom",
|
|
50
|
+
message: "employmentType is required for PROJECT jobs",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (data.jobType === constants_1.JOB_TYPE.GIG) {
|
|
55
|
+
if (!data.gigType) {
|
|
56
|
+
ctx.addIssue({
|
|
57
|
+
path: ["gigType"],
|
|
58
|
+
code: "custom",
|
|
59
|
+
message: "gigType is required for GIG jobs",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (data.employmentType !== undefined) {
|
|
63
|
+
ctx.addIssue({
|
|
64
|
+
path: ["employmentType"],
|
|
65
|
+
code: "custom",
|
|
66
|
+
message: "employmentType must be null/undefined for GIG jobs",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
exports.CreateRoleJobInputSchema = zod_1.z.object({
|
|
72
|
+
experienceLevel: zod_1.z.enum(Object.values(constants_1.EXPERIENCE_LEVELS)),
|
|
73
|
+
overview: zod_1.z.string(),
|
|
74
|
+
keyResponsibilities: zod_1.z.array(zod_1.z.string()),
|
|
75
|
+
requiredSkills: zod_1.z.array(zod_1.z.string()),
|
|
76
|
+
employeeRequirements: zod_1.z.array(zod_1.z.string()).optional(),
|
|
77
|
+
companyBenefits: zod_1.z.array(zod_1.z.string()).optional(),
|
|
78
|
+
wagesMin: zod_1.z.number().optional(),
|
|
79
|
+
wagesMax: zod_1.z.number().optional(),
|
|
80
|
+
wagesCurrency: zod_1.z
|
|
81
|
+
.enum(Object.values(constants_1.WAGES_CURRENCY))
|
|
82
|
+
.optional(),
|
|
83
|
+
wagesType: zod_1.z
|
|
84
|
+
.enum(Object.values(constants_1.WAGE_TYPES))
|
|
85
|
+
.optional(),
|
|
86
|
+
});
|
|
87
|
+
exports.CreateGigJobInputSchema = zod_1.z.object({
|
|
88
|
+
overview: zod_1.z.string(),
|
|
89
|
+
deliverables: zod_1.z.array(zod_1.z.string()),
|
|
90
|
+
employeeRequirements: zod_1.z.array(zod_1.z.string()).optional(),
|
|
91
|
+
aboutCompany: zod_1.z.string().optional(),
|
|
92
|
+
requiredSkills: zod_1.z.array(zod_1.z.string()),
|
|
93
|
+
wagesMin: zod_1.z.number().optional(),
|
|
94
|
+
wagesMax: zod_1.z.number().optional(),
|
|
95
|
+
wagesCurrency: zod_1.z
|
|
96
|
+
.enum(Object.values(constants_1.WAGES_CURRENCY))
|
|
97
|
+
.optional(),
|
|
98
|
+
wagesType: zod_1.z
|
|
99
|
+
.enum(Object.values(constants_1.WAGE_TYPES))
|
|
100
|
+
.optional(),
|
|
101
|
+
});
|
|
102
|
+
const JobSectionEnum = zod_1.z.enum(Object.values(constants_1.JOB_SECTIONS));
|
|
103
|
+
exports.UpdateRoleJobInputSchema = exports.CreateRoleJobInputSchema.partial().extend({
|
|
104
|
+
id: zod_1.z.cuid2(),
|
|
105
|
+
jobSections: zod_1.z
|
|
106
|
+
.array(JobSectionEnum)
|
|
107
|
+
.default([
|
|
108
|
+
constants_1.JOB_SECTIONS.PERSONAL_INFORMATION,
|
|
109
|
+
constants_1.JOB_SECTIONS.PROFESSIONAL_INFORMATION,
|
|
110
|
+
constants_1.JOB_SECTIONS.RESUME,
|
|
111
|
+
])
|
|
112
|
+
.refine((sections) => sections.includes(constants_1.JOB_SECTIONS.PERSONAL_INFORMATION) &&
|
|
113
|
+
sections.includes(constants_1.JOB_SECTIONS.PROFESSIONAL_INFORMATION) &&
|
|
114
|
+
sections.includes(constants_1.JOB_SECTIONS.RESUME), {
|
|
115
|
+
message: "jobSections must always include PERSONAL_INFORMATION, PROFESSIONAL_INFORMATION, and RESUME",
|
|
116
|
+
}),
|
|
117
|
+
});
|
|
118
|
+
exports.UpdateGigJobInputSchema = exports.CreateGigJobInputSchema.partial().extend({
|
|
119
|
+
id: zod_1.z.cuid2(),
|
|
120
|
+
jobSections: zod_1.z
|
|
121
|
+
.array(JobSectionEnum)
|
|
122
|
+
.default([
|
|
123
|
+
constants_1.JOB_SECTIONS.PERSONAL_INFORMATION,
|
|
124
|
+
constants_1.JOB_SECTIONS.PROFESSIONAL_INFORMATION,
|
|
125
|
+
constants_1.JOB_SECTIONS.RESUME,
|
|
126
|
+
])
|
|
127
|
+
.refine((sections) => sections.includes(constants_1.JOB_SECTIONS.PERSONAL_INFORMATION) &&
|
|
128
|
+
sections.includes(constants_1.JOB_SECTIONS.PROFESSIONAL_INFORMATION) &&
|
|
129
|
+
sections.includes(constants_1.JOB_SECTIONS.RESUME), {
|
|
130
|
+
message: "jobSections must always include PERSONAL_INFORMATION, PROFESSIONAL_INFORMATION, and RESUME",
|
|
131
|
+
}),
|
|
132
|
+
});
|
|
133
|
+
exports.UpdateJobInputSchema = exports.CreateJobInputSchema.partial().extend({
|
|
134
|
+
id: zod_1.z.cuid2(),
|
|
135
|
+
});
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -104,6 +104,24 @@ export const POST_TYPES = {
|
|
|
104
104
|
POST_WITH_MEDIA: "POST_WITH_MEDIA",
|
|
105
105
|
} as const;
|
|
106
106
|
|
|
107
|
+
export const JOB_TYPE = {
|
|
108
|
+
GIG: "GIG",
|
|
109
|
+
ROLE: "ROLE",
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const WORK_MODE = {
|
|
113
|
+
REMOTE: "REMOTE",
|
|
114
|
+
HYBRID: "HYBRID",
|
|
115
|
+
ON_SITE: "ON_SITE",
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export const EMPLOYMENT_TYPE = {
|
|
119
|
+
FULL_TIME: "FULL_TIME",
|
|
120
|
+
PART_TIME: "PART_TIME",
|
|
121
|
+
FREELANCE: "FREELANCE",
|
|
122
|
+
INTERNSHIP: "INTERNSHIP",
|
|
123
|
+
};
|
|
124
|
+
|
|
107
125
|
export const JOB_AVAILABILITY_TYPES = {
|
|
108
126
|
FULL_TIME: "FULL_TIME",
|
|
109
127
|
PART_TIME: "PART_TIME",
|
|
@@ -120,7 +138,69 @@ export const WAGE_TYPES = {
|
|
|
120
138
|
PROJECT_BASED: "PROJECT_BASED",
|
|
121
139
|
} as const;
|
|
122
140
|
|
|
141
|
+
export const JOB_SECTIONS = {
|
|
142
|
+
PERSONAL_INFORMATION: "PERSONAL_INFORMATION",
|
|
143
|
+
PHONE_NO: "PHONE_NO",
|
|
144
|
+
PROFESSIONAL_INFORMATION: "PROFESSIONAL_INFORMATION",
|
|
145
|
+
RESUME: "RESUME",
|
|
146
|
+
COVER_LETTER: "COVER_LETTER",
|
|
147
|
+
PORTFOLIO_OR_WORK_SAMPLES: "PORTFOLIO_OR_WORK_SAMPLES",
|
|
148
|
+
AVAILABILITY: "AVAILABILITY",
|
|
149
|
+
WAGES: "WAGES",
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export const JOB_LOCATIONS = {
|
|
153
|
+
AFRICA: "Africa",
|
|
154
|
+
REMOTE: "Remote",
|
|
155
|
+
EUROPE: "Europe",
|
|
156
|
+
ASIA: "Asia",
|
|
157
|
+
NORTH_AMERICA: "North America",
|
|
158
|
+
SOUTH_AMERICA: "South America",
|
|
159
|
+
MIDDLE_EAST: "Middle East",
|
|
160
|
+
OCEANIA: "Oceania",
|
|
161
|
+
EMEA: "EMEA", // Europe, Middle East, Africa
|
|
162
|
+
ASIA_PACIFIC: "Asia Pacific", // Asia Pacific
|
|
163
|
+
GLOBAL: "Global",
|
|
164
|
+
OTHER: "Other",
|
|
165
|
+
} as const;
|
|
166
|
+
|
|
167
|
+
export type JobLocation = (typeof JOB_LOCATIONS)[keyof typeof JOB_LOCATIONS];
|
|
168
|
+
|
|
169
|
+
export const GIG_TYPE = {
|
|
170
|
+
ONE_TIME: "ONE_TIME",
|
|
171
|
+
RECURRING: "RECURRING",
|
|
172
|
+
};
|
|
173
|
+
export const WAGES_CURRENCY = {
|
|
174
|
+
USD: "USD",
|
|
175
|
+
EUR: "EUR",
|
|
176
|
+
GBP: "GBP",
|
|
177
|
+
NGN: "NGN",
|
|
178
|
+
CAD: "CAD",
|
|
179
|
+
AUD: "AUD",
|
|
180
|
+
JPY: "JPY",
|
|
181
|
+
CHF: "CHF",
|
|
182
|
+
INR: "INR",
|
|
183
|
+
ZAR: "ZAR",
|
|
184
|
+
} as const;
|
|
185
|
+
|
|
186
|
+
export const JOBPOST_STATUS = {
|
|
187
|
+
ACTIVE: "ACTIVE",
|
|
188
|
+
DRAFT: "DRAFT",
|
|
189
|
+
ARCHIVED: "ARCHIVED",
|
|
190
|
+
DELETED: "DELETED",
|
|
191
|
+
} as const;
|
|
192
|
+
|
|
193
|
+
export type JobSections = (typeof JOB_SECTIONS)[keyof typeof JOB_SECTIONS];
|
|
194
|
+
export type WagesCurrency =
|
|
195
|
+
(typeof WAGES_CURRENCY)[keyof typeof WAGES_CURRENCY];
|
|
196
|
+
export type JobPostStatus =
|
|
197
|
+
(typeof JOBPOST_STATUS)[keyof typeof JOBPOST_STATUS];
|
|
123
198
|
export type Role = (typeof ROLES)[keyof typeof ROLES];
|
|
199
|
+
export type JobType = (typeof JOB_TYPE)[keyof typeof JOB_TYPE];
|
|
200
|
+
export type WorkMode = (typeof WORK_MODE)[keyof typeof WORK_MODE];
|
|
201
|
+
export type GigType = (typeof GIG_TYPE)[keyof typeof GIG_TYPE];
|
|
202
|
+
export type EmploymentType =
|
|
203
|
+
(typeof EMPLOYMENT_TYPE)[keyof typeof EMPLOYMENT_TYPE];
|
|
124
204
|
export type JobAvailabilityTypes =
|
|
125
205
|
(typeof JOB_AVAILABILITY_TYPES)[keyof typeof JOB_AVAILABILITY_TYPES];
|
|
126
206
|
export type WageTypes = (typeof WAGE_TYPES)[keyof typeof WAGE_TYPES];
|
package/src/schemas/index.ts
CHANGED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import z from "zod";
|
|
2
|
-
import {
|
|
3
|
-
EXPERIENCE_LEVELS,
|
|
4
|
-
ExperienceLevel,
|
|
5
|
-
JOB_AVAILABILITY_TYPES,
|
|
6
|
-
JobAvailabilityTypes,
|
|
7
|
-
WAGE_TYPES,
|
|
8
|
-
WageTypes,
|
|
9
|
-
} from "../constants";
|
|
10
|
-
|
|
11
|
-
export const CreateJobApplicationInputSchema = z.object({
|
|
12
|
-
firstName: z.string(),
|
|
13
|
-
lastName: z.string(),
|
|
14
|
-
emailAddress: z.email(),
|
|
15
|
-
phoneNumber: z.string().optional(),
|
|
16
|
-
currentRole: z.string(),
|
|
17
|
-
experienceLevel: z.enum(
|
|
18
|
-
Object.values(EXPERIENCE_LEVELS) as [ExperienceLevel, ...ExperienceLevel[]]
|
|
19
|
-
),
|
|
20
|
-
resumeUrl: z.url(),
|
|
21
|
-
workSampleUrls: z.array(z.url()).optional(),
|
|
22
|
-
portfolioUrl: z.url().optional(),
|
|
23
|
-
coverLetterUrl: z.url().optional(),
|
|
24
|
-
receiveEmailUpdates: z.boolean(),
|
|
25
|
-
wagesAmount: z.boolean(),
|
|
26
|
-
wagesType: z.enum(Object.values(WAGE_TYPES) as [WageTypes, ...WageTypes[]]),
|
|
27
|
-
availability: z.enum(
|
|
28
|
-
Object.values(JOB_AVAILABILITY_TYPES) as [
|
|
29
|
-
JobAvailabilityTypes,
|
|
30
|
-
...JobAvailabilityTypes[]
|
|
31
|
-
]
|
|
32
|
-
),
|
|
33
|
-
});
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import {
|
|
3
|
+
EMPLOYMENT_TYPE,
|
|
4
|
+
EmploymentType,
|
|
5
|
+
EXPERIENCE_LEVELS,
|
|
6
|
+
ExperienceLevel,
|
|
7
|
+
GIG_TYPE,
|
|
8
|
+
GigType,
|
|
9
|
+
JOB_AVAILABILITY_TYPES,
|
|
10
|
+
JOB_LOCATIONS,
|
|
11
|
+
JOB_SECTIONS,
|
|
12
|
+
JOB_TYPE,
|
|
13
|
+
JobAvailabilityTypes,
|
|
14
|
+
JobLocation,
|
|
15
|
+
JobType,
|
|
16
|
+
WAGE_TYPES,
|
|
17
|
+
WAGES_CURRENCY,
|
|
18
|
+
WagesCurrency,
|
|
19
|
+
WageTypes,
|
|
20
|
+
WORK_MODE,
|
|
21
|
+
WorkMode,
|
|
22
|
+
} from "../constants";
|
|
23
|
+
|
|
24
|
+
export const CreateJobApplicationInputSchema = z.object({
|
|
25
|
+
firstName: z.string(),
|
|
26
|
+
lastName: z.string(),
|
|
27
|
+
emailAddress: z.email(),
|
|
28
|
+
phoneNumber: z.string().optional(),
|
|
29
|
+
currentRole: z.string(),
|
|
30
|
+
experienceLevel: z.enum(
|
|
31
|
+
Object.values(EXPERIENCE_LEVELS) as [ExperienceLevel, ...ExperienceLevel[]]
|
|
32
|
+
),
|
|
33
|
+
resumeUrl: z.url(),
|
|
34
|
+
workSampleUrls: z.array(z.url()).optional(),
|
|
35
|
+
portfolioUrl: z.url().optional(),
|
|
36
|
+
coverLetterUrl: z.url().optional(),
|
|
37
|
+
receiveEmailUpdates: z.boolean(),
|
|
38
|
+
wagesAmount: z.string(),
|
|
39
|
+
wagesType: z.enum(Object.values(WAGE_TYPES) as [WageTypes, ...WageTypes[]]),
|
|
40
|
+
availability: z.enum(
|
|
41
|
+
Object.values(JOB_AVAILABILITY_TYPES) as [
|
|
42
|
+
JobAvailabilityTypes,
|
|
43
|
+
...JobAvailabilityTypes[]
|
|
44
|
+
]
|
|
45
|
+
),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const CreateJobInputSchema = z
|
|
49
|
+
.object({
|
|
50
|
+
title: z.string(),
|
|
51
|
+
jobType: z.enum(Object.values(JOB_TYPE) as [JobType, ...JobType[]]),
|
|
52
|
+
// status: z.enum(Object.values(JOB_TYPE) as [JobType, ...JobType[]]),
|
|
53
|
+
employmentType: z.enum(
|
|
54
|
+
Object.values(EMPLOYMENT_TYPE) as [EmploymentType, ...EmploymentType[]]
|
|
55
|
+
),
|
|
56
|
+
workMode: z.enum(Object.values(WORK_MODE) as [WorkMode, ...WorkMode[]]),
|
|
57
|
+
gigType: z
|
|
58
|
+
.enum(Object.values(GIG_TYPE) as [GigType, ...GigType[]])
|
|
59
|
+
.optional(),
|
|
60
|
+
location: z
|
|
61
|
+
.array(
|
|
62
|
+
z.enum(Object.values(JOB_LOCATIONS) as [JobLocation, ...JobLocation[]])
|
|
63
|
+
)
|
|
64
|
+
.nonempty("At least one job location must be selected")
|
|
65
|
+
.default([JOB_LOCATIONS.REMOTE]),
|
|
66
|
+
})
|
|
67
|
+
.superRefine((data, ctx) => {
|
|
68
|
+
if (data.jobType === JOB_TYPE.ROLE) {
|
|
69
|
+
if (data.gigType !== undefined) {
|
|
70
|
+
ctx.addIssue({
|
|
71
|
+
path: ["gigType"],
|
|
72
|
+
code: "custom",
|
|
73
|
+
message: "gigType must be null/undefined for PROJECT jobs",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (!data.employmentType) {
|
|
77
|
+
ctx.addIssue({
|
|
78
|
+
path: ["employmentType"],
|
|
79
|
+
code: "custom",
|
|
80
|
+
message: "employmentType is required for PROJECT jobs",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (data.jobType === JOB_TYPE.GIG) {
|
|
86
|
+
if (!data.gigType) {
|
|
87
|
+
ctx.addIssue({
|
|
88
|
+
path: ["gigType"],
|
|
89
|
+
code: "custom",
|
|
90
|
+
message: "gigType is required for GIG jobs",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (data.employmentType !== undefined) {
|
|
94
|
+
ctx.addIssue({
|
|
95
|
+
path: ["employmentType"],
|
|
96
|
+
code: "custom",
|
|
97
|
+
message: "employmentType must be null/undefined for GIG jobs",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
export const CreateRoleJobInputSchema = z.object({
|
|
104
|
+
experienceLevel: z.enum(
|
|
105
|
+
Object.values(EXPERIENCE_LEVELS) as [ExperienceLevel, ...ExperienceLevel[]]
|
|
106
|
+
),
|
|
107
|
+
overview: z.string(),
|
|
108
|
+
keyResponsibilities: z.array(z.string()),
|
|
109
|
+
requiredSkills: z.array(z.string()),
|
|
110
|
+
employeeRequirements: z.array(z.string()).optional(),
|
|
111
|
+
companyBenefits: z.array(z.string()).optional(),
|
|
112
|
+
wagesMin: z.number().optional(),
|
|
113
|
+
wagesMax: z.number().optional(),
|
|
114
|
+
wagesCurrency: z
|
|
115
|
+
.enum(Object.values(WAGES_CURRENCY) as [WagesCurrency, ...WagesCurrency[]])
|
|
116
|
+
.optional(),
|
|
117
|
+
wagesType: z
|
|
118
|
+
.enum(Object.values(WAGE_TYPES) as [WageTypes, ...WageTypes[]])
|
|
119
|
+
.optional(),
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
export const CreateGigJobInputSchema = z.object({
|
|
123
|
+
overview: z.string(),
|
|
124
|
+
deliverables: z.array(z.string()),
|
|
125
|
+
employeeRequirements: z.array(z.string()).optional(),
|
|
126
|
+
aboutCompany: z.string().optional(),
|
|
127
|
+
requiredSkills: z.array(z.string()),
|
|
128
|
+
wagesMin: z.number().optional(),
|
|
129
|
+
wagesMax: z.number().optional(),
|
|
130
|
+
wagesCurrency: z
|
|
131
|
+
.enum(Object.values(WAGES_CURRENCY) as [WagesCurrency, ...WagesCurrency[]])
|
|
132
|
+
.optional(),
|
|
133
|
+
wagesType: z
|
|
134
|
+
.enum(Object.values(WAGE_TYPES) as [WageTypes, ...WageTypes[]])
|
|
135
|
+
.optional(),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const JobSectionEnum = z.enum(
|
|
139
|
+
Object.values(JOB_SECTIONS) as [string, ...string[]]
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
export const UpdateRoleJobInputSchema =
|
|
143
|
+
CreateRoleJobInputSchema.partial().extend({
|
|
144
|
+
id: z.cuid2(),
|
|
145
|
+
jobSections: z
|
|
146
|
+
.array(JobSectionEnum)
|
|
147
|
+
.default([
|
|
148
|
+
JOB_SECTIONS.PERSONAL_INFORMATION,
|
|
149
|
+
JOB_SECTIONS.PROFESSIONAL_INFORMATION,
|
|
150
|
+
JOB_SECTIONS.RESUME,
|
|
151
|
+
])
|
|
152
|
+
.refine(
|
|
153
|
+
(sections) =>
|
|
154
|
+
sections.includes(JOB_SECTIONS.PERSONAL_INFORMATION) &&
|
|
155
|
+
sections.includes(JOB_SECTIONS.PROFESSIONAL_INFORMATION) &&
|
|
156
|
+
sections.includes(JOB_SECTIONS.RESUME),
|
|
157
|
+
{
|
|
158
|
+
message:
|
|
159
|
+
"jobSections must always include PERSONAL_INFORMATION, PROFESSIONAL_INFORMATION, and RESUME",
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
export const UpdateGigJobInputSchema = CreateGigJobInputSchema.partial().extend(
|
|
165
|
+
{
|
|
166
|
+
id: z.cuid2(),
|
|
167
|
+
jobSections: z
|
|
168
|
+
.array(JobSectionEnum)
|
|
169
|
+
.default([
|
|
170
|
+
JOB_SECTIONS.PERSONAL_INFORMATION,
|
|
171
|
+
JOB_SECTIONS.PROFESSIONAL_INFORMATION,
|
|
172
|
+
JOB_SECTIONS.RESUME,
|
|
173
|
+
])
|
|
174
|
+
.refine(
|
|
175
|
+
(sections) =>
|
|
176
|
+
sections.includes(JOB_SECTIONS.PERSONAL_INFORMATION) &&
|
|
177
|
+
sections.includes(JOB_SECTIONS.PROFESSIONAL_INFORMATION) &&
|
|
178
|
+
sections.includes(JOB_SECTIONS.RESUME),
|
|
179
|
+
{
|
|
180
|
+
message:
|
|
181
|
+
"jobSections must always include PERSONAL_INFORMATION, PROFESSIONAL_INFORMATION, and RESUME",
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
}
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
export const UpdateJobInputSchema = CreateJobInputSchema.partial().extend({
|
|
188
|
+
id: z.cuid2(),
|
|
189
|
+
});
|