I'm loving this!
import { Validator as v, rule } from '@bunnykit/orm/validation';
export const baseAdmissionSchema = v.schema({
student_mode: rule().enum(StudentModeEnum),
student_id: rule().string().requiredIf('student_mode', StudentModeEnum.EXISTING),
semester_id: rule().string().required(),
first_name: rule().string().requiredIf('student_mode', StudentModeEnum.NEW),
last_name: rule().string().requiredIf('student_mode', StudentModeEnum.NEW),
middle_name: rule().string(),
lrn: rule().string(),
birthdate: rule().date().string().requiredIf('student_mode', StudentModeEnum.NEW),
gender: rule().string().requiredIf('student_mode', StudentModeEnum.NEW),
branch_id: rule()
.required()
.string()
.default((await Branch.first())?.id ?? ''),
program_id: rule().string().required(),
year_level: rule().number().required(),
section_id: rule().string(),
academic_level_id: rule().string().required(),
guardians: rule().sometimes().array().max(2),
'guardians.*.firstname': rule().required().string(),
'guardians.*.lastname': rule().required().string(),
'guardians.*.contact_number': rule().required().string(),
'guardians.*.relationship': rule().required().string(),
'guardians.*.email': rule().string().email().sometimes().nullable()
});
...
import { form } from '$app/server';
import { DB } from '@bunnykit/orm';
import { createAdmissionInputSchema } from './admission.schema';
import Admission from '$module/admission/models/admission';
export const createAdmissionForm = form(createAdmissionInputSchema, async (data) => {
return await DB.transaction(async () => {
const { guardians, ...admissionData } = data;
const admission = await Admission.create(admissionData);
if (guardians && guardians.length > 0) {
await admission.guardians().createMany(guardians);
}
return { success: true };
});
});
data?.guardians?.map(g => g.email) are all fully typed!