UNPKG

synt_backend

Version:

Synt light-weight node backend service

142 lines (131 loc) 3.73 kB
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; };