UNPKG

synt_backend

Version:

Synt light-weight node backend service

102 lines (91 loc) 3.01 kB
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;