synt_backend
Version:
Synt light-weight node backend service
102 lines (91 loc) • 3.01 kB
JavaScript
import { Router } from "express";
const router = Router();
const db = require("./../mysql/models/index");
import * as ValidationHelper from "./../helpers/validations";
import { formatSupplier, formatVME } from "./../helpers/format";
const getCompany = require("@syntbeheer/kbo/index");
var validate = require("validate-vat");
router.get("/:vat_number/:type?", getCompanyByVat);
function getCompanyByVat(req, res) {
const { t } = req;
let { vat_number, type = "VME" } = req.params;
// prepare vat number
// verify and format vat number
const vatValidation = ValidationHelper.formatVatNumber(vat_number, t);
if (!vatValidation.success) {
return res.json(vatValidation);
}
// define const
const { company_number, country_code } = vatValidation;
return new Promise(() => {
validate(country_code, company_number, async (err, validationInfo) => {
if (err !== null) {
console.error(err);
}
if (
typeof validationInfo === "undefined" ||
(validationInfo !== undefined && validationInfo.valid === false)
) {
let kboCompany = await getCompany(company_number);
if (kboCompany) {
validationInfo = kboCompany;
} else {
return res.json({
success: false,
error: t(
"api.companies.errors.companyNumberInvalid",
"The company number is invalid."
),
});
}
}
let Company = {
vat_number: validationInfo.countryCode + validationInfo.vatNumber,
company_number: validationInfo.vatNumber,
country_code: validationInfo.countryCode,
name: validationInfo.name,
address: validationInfo.address,
};
db.Company.findOne({ where: { company_number, country_code } }).then(
(C) => {
if (C) {
if (type === "VME") {
db.VME.findOne({
where: { CompanyId: C.id },
include: [
{ model: db.Company },
{ model: db.User, as: "Users" },
],
}).then((VME) => {
return res.json({
success: true,
Company: C,
VME: formatVME(VME, req.t),
});
});
} else if (type === "Supplier") {
db.Supplier.findOne({
where: { CompanyId: C.id },
include: [{ model: db.Company }],
}).then((Supplier) => {
return res.json({
success: true,
Company: C,
Supplier: formatSupplier(Supplier),
});
});
}
} else {
db.Company.create({ ...Company }); // do not wait for it
return res.json({
success: true,
Company,
VME: null,
});
}
}
);
});
});
}
module.exports = router;