Files
nextplacement/apps/student/app/signup/schema.ts
2025-07-06 23:30:58 +05:30

52 lines
1.4 KiB
TypeScript

import { z } from "zod";
export const sgpiSchema = z.object({
sem: z.number().min(1).max(8),
sgpi: z.number().min(0).max(10),
kt: z.boolean(),
ktDead: z.boolean(),
});
export const internshipSchema = z.object({
title: z.string(),
company: z.string(),
description: z.string(),
location: z.string(),
startDate: z.coerce.date(),
endDate: z.coerce.date(),
});
export const resumeSchema = z.object({
title: z.string(),
link: z.string().url(),
});
export const studentSignupSchema = z.object({
rollNumber: z.string().max(12),
firstName: z.string().max(255),
middleName: z.string().max(255),
lastName: z.string().max(255),
mothersName: z.string().max(255),
gender: z.string().max(10),
dob: z.coerce.date(),
personalGmail: z.string().email(),
phoneNumber: z.string().max(10),
address: z.string(),
degree: z.string(),
branch: z.string(),
year: z.string(),
skills: z.array(z.string()),
linkedin: z.string(),
github: z.string(),
ssc: z.coerce.number(),
hsc: z.coerce.number(),
isDiploma: z.boolean(),
sgpi: z.array(sgpiSchema),
internships: z.array(internshipSchema).optional(),
resume: z.array(resumeSchema).optional(),
});
export type StudentSignup = z.infer<typeof studentSignupSchema>;
export type Internship = z.infer<typeof internshipSchema>;
export type Resume = z.infer<typeof resumeSchema>;
export type SGPI = z.infer<typeof sgpiSchema>;