160 lines
5.9 KiB
JavaScript
Executable File
160 lines
5.9 KiB
JavaScript
Executable File
const joi = require('joi');
|
|
|
|
const phoneRegex = /^(\+62|62|0)8[1-9][0-9]{6,11}$/;
|
|
|
|
const createMahasiswaModel = joi.object().keys({
|
|
nama_depan: joi.string().max(255).required().messages({
|
|
'string.base': 'Nama depan harus berupa teks.',
|
|
'string.empty': 'Nama depan tidak boleh kosong.',
|
|
'string.max': 'Nama depan maksimal {#limit} karakter.',
|
|
'any.required': 'Nama depan wajib diisi.',
|
|
}),
|
|
|
|
nama_belakang: joi.string().max(255).optional().allow('', null).messages({
|
|
'string.base': 'Nama belakang harus berupa teks.',
|
|
'string.max': 'Nama belakang maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
email: joi.string().email({ tlds: { allow: false } }).max(255).required().messages({
|
|
'string.base': 'Email harus berupa teks.',
|
|
'string.empty': 'Email tidak boleh kosong.',
|
|
'string.email': 'Format email tidak valid.',
|
|
'string.max': 'Email maksimal {#limit} karakter.',
|
|
'any.required': 'Email wajib diisi.',
|
|
}),
|
|
|
|
kontak: joi.string().pattern(phoneRegex).max(255).required().messages({
|
|
'string.base': 'Kontak harus berupa teks.',
|
|
'string.empty': 'Kontak tidak boleh kosong.',
|
|
'string.pattern.base': 'Format nomor kontak tidak valid. Gunakan format Indonesia (08xx atau +628xx).',
|
|
'string.max': 'Kontak maksimal {#limit} karakter.',
|
|
'any.required': 'Kontak wajib diisi.',
|
|
}),
|
|
|
|
jurusan: joi.string().max(255).required().messages({
|
|
'string.base': 'Jurusan harus berupa teks.',
|
|
'string.empty': 'Jurusan tidak boleh kosong.',
|
|
'string.max': 'Jurusan maksimal {#limit} karakter.',
|
|
'any.required': 'Jurusan wajib diisi.',
|
|
}),
|
|
|
|
universitas: joi.string().max(255).required().messages({
|
|
'string.base': 'Universitas harus berupa teks.',
|
|
'string.empty': 'Universitas tidak boleh kosong.',
|
|
'string.max': 'Universitas maksimal {#limit} karakter.',
|
|
'any.required': 'Universitas wajib diisi.',
|
|
}),
|
|
|
|
negara: joi.string().max(255).required().messages({
|
|
'string.base': 'Negara harus berupa teks.',
|
|
'string.empty': 'Negara tidak boleh kosong.',
|
|
'string.max': 'Negara maksimal {#limit} karakter.',
|
|
'any.required': 'Negara wajib diisi.',
|
|
}),
|
|
|
|
role: joi.string().valid('student').default('student').messages({
|
|
'string.base': 'Role harus berupa teks.',
|
|
'any.only': 'Role hanya boleh "student".',
|
|
}),
|
|
|
|
cv_path: joi.string().required().messages({
|
|
'string.base': 'Path CV harus berupa teks.',
|
|
'string.empty': 'Path CV tidak boleh kosong.',
|
|
'any.required': 'CV wajib diupload.',
|
|
}),
|
|
|
|
portofolio_path: joi.string().required().messages({
|
|
'string.base': 'Path portofolio harus berupa teks.',
|
|
'string.empty': 'Path portofolio tidak boleh kosong.',
|
|
'any.required': 'Portofolio wajib diupload.',
|
|
}),
|
|
|
|
motivasi: joi.string().required().messages({
|
|
'string.base': 'Motivasi harus berupa teks.',
|
|
'string.empty': 'Motivasi tidak boleh kosong.',
|
|
'any.required': 'Motivasi wajib diisi.',
|
|
}),
|
|
|
|
relevant_skills: joi.string().max(255).required().messages({
|
|
'string.base': 'Keahlian yang relevan harus berupa teks.',
|
|
'string.empty': 'Keahlian yang relevan tidak boleh kosong.',
|
|
'string.max': 'Keahlian yang relevan maksimal {#limit} karakter.',
|
|
'any.required': 'Keahlian yang relevan wajib diisi.',
|
|
}),
|
|
});
|
|
|
|
const updateMahasiswaModel = joi.object().keys({
|
|
nama_depan: joi.string().max(255).optional().messages({
|
|
'string.base': 'Nama depan harus berupa teks.',
|
|
'string.max': 'Nama depan maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
nama_belakang: joi.string().max(255).optional().allow('', null).messages({
|
|
'string.base': 'Nama belakang harus berupa teks.',
|
|
'string.max': 'Nama belakang maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
email: joi.string().email({ tlds: { allow: false } }).max(255).optional().messages({
|
|
'string.base': 'Email harus berupa teks.',
|
|
'string.email': 'Format email tidak valid.',
|
|
'string.max': 'Email maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
kontak: joi.string().pattern(phoneRegex).max(255).optional().messages({
|
|
'string.base': 'Kontak harus berupa teks.',
|
|
'string.pattern.base': 'Format nomor kontak tidak valid. Gunakan format Indonesia (08xx atau +628xx).',
|
|
'string.max': 'Kontak maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
jurusan: joi.string().max(255).optional().messages({
|
|
'string.base': 'Jurusan harus berupa teks.',
|
|
'string.max': 'Jurusan maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
universitas: joi.string().max(255).optional().messages({
|
|
'string.base': 'Universitas harus berupa teks.',
|
|
'string.max': 'Universitas maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
negara: joi.string().max(255).optional().messages({
|
|
'string.base': 'Negara harus berupa teks.',
|
|
'string.max': 'Negara maksimal {#limit} karakter.',
|
|
}),
|
|
|
|
cv_path: joi.string().optional().messages({
|
|
'string.base': 'Path CV harus berupa teks.',
|
|
}),
|
|
|
|
portofolio_path: joi.string().optional().messages({
|
|
'string.base': 'Path portofolio harus berupa teks.',
|
|
}),
|
|
|
|
motivasi: joi.string().optional().messages({
|
|
'string.base': 'Motivasi harus berupa teks.',
|
|
}),
|
|
|
|
relevant_skills: joi.string().max(255).optional().messages({
|
|
'string.base': 'Keahlian yang relevan harus berupa teks.',
|
|
'string.max': 'Keahlian yang relevan maksimal {#limit} karakter.',
|
|
}),
|
|
});
|
|
|
|
const getAllMahasiswaModel = joi.object().keys({
|
|
page: joi.number().integer().min(1).default(1).messages({
|
|
'number.base': 'Halaman harus berupa angka.',
|
|
'number.integer': 'Halaman harus berupa angka bulat.',
|
|
'number.min': 'Halaman minimal adalah {#limit}.',
|
|
}),
|
|
limit: joi.number().integer().min(1).default(10).messages({
|
|
'number.base': 'Limit harus berupa angka.',
|
|
'number.integer': 'Limit harus berupa angka bulat.',
|
|
'number.min': 'Limit minimal adalah {#limit}.',
|
|
}),
|
|
});
|
|
|
|
module.exports = {
|
|
createMahasiswaModel,
|
|
updateMahasiswaModel,
|
|
getAllMahasiswaModel
|
|
};
|