synt_backend
Version:
Synt light-weight node backend service
142 lines (131 loc) • 3.73 kB
JavaScript
const db = require("./../mysql/models/index");
export const validateEmail = (email) => {
// contains something @ something
if (/\S+@\S+/.test(email)) return true;
return false;
};
export const validatePhone = (phone) => {
// exactly matches 10 digits without anything before and after
if (/(?<!\d)\d{10}(?!\d)/.test(phone)) return true;
return false;
};
export const validateNewUser = (user, t) => {
if (!user.email) {
return {
success: false,
errors: {
email: t("api.users.errors.emailRequired", "Email is required"),
},
};
}
if (!validateEmail(user.email)) {
return {
success: false,
errors: {
email: t("api.users.errors.emailRequired", "Email is required"),
},
};
}
return { success: true };
};
export const formatVatNumber = (vat_number, t) => {
// check length
if (!vat_number || vat_number.length < 4) {
return {
success: false,
errors: {
vat_number: t(
"api.vmes.post.errors.companyNumberInvalid",
"Company number invalid."
),
},
};
}
// clean
vat_number = vat_number
.toUpperCase()
.replaceAll(",", "")
.replaceAll(".", "")
.replaceAll(" ", "");
// validate country code
let country_code, company_number;
if (/^[a-zA-Z]+$/.test(vat_number.slice(0, 2))) {
// first two chars are letters
country_code = vat_number.slice(0, 2);
company_number = vat_number.slice(2);
} else {
country_code = "BE"; // set default number to Belgian
if (!/^\d+$/.test(vat_number)) {
// company number should be digit only
return {
success: false,
errors: {
vat_number: t(
"api.vmes.post.errors.companyNumberInvalid",
"Company number invalid."
),
},
};
}
company_number = vat_number;
vat_number = "BE" + company_number;
}
// all went well return formatted vat number
return {
success: true,
vat_number,
country_code,
company_number,
};
};
export const validateVme = async (t, VMEId, user = false, syntOnly = false) => {
if (!VMEId) {
return {
success: false,
error:
t(
"api.vmes.errors.unknownVmeAndContact",
"Your VME is unknown. Please contact support."
) + "Je VME is niet gekend. Neem contact op met support.",
};
}
let role = null;
if (user) {
// Validate roles whether user can change vme
let roles = await db.UserVME.findOne({ where: { UserId: user.id, VMEId } });
if (roles) {
role = roles.type;
}
if (!user.is_admin && syntOnly && role !== "synt_authoriser") {
return {
success: false,
error: "Je hebt niet de bevoegdheid van Synt.",
};
}
}
return db.VME.findOne({
where: { id: VMEId },
include: [{ model: db.Company }, { model: db.User, as: "Users" }],
}).then((VME) => {
return { success: true, VME, role };
});
};
export const formatVME = (VME) => {
// get company details
VME.setDataValue("name", VME.Company.name || "");
VME.setDataValue("address", VME.Company.address || "");
VME.setDataValue("vat_number", VME.Company.vat_number || "");
VME.setDataValue("current_account", VME.Company.current_account || "");
VME.setDataValue("savings_account", VME.Company.savings_account || "");
VME.setDataValue("email", VME.Company.email || "");
VME.setDataValue("phone", VME.Company.phone || "");
// format synt user data
VME.Users.forEach((User) => {
if (
User.UserVME.type === "synt_authoriser" ||
User.UserVME.type === "synt_viewer"
)
VME.setDataValue("synt_name", User.full_name || "");
});
return VME;
};