@fabrix/spool-cart
Version:
Spool - eCommerce Spool for Fabrix
139 lines (138 loc) • 4.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const lodash_1 = require("lodash");
class VendorController extends common_1.FabrixController {
uploadCSV(req, res) {
const VendorCsvService = this.app.services.VendorCsvService;
const csv = req.file;
if (!csv) {
const err = new Error('File failed to upload');
return res.serverError(err);
}
VendorCsvService.vendorCsv(csv.path)
.then(result => {
return res.json({
file: req.file,
result: result
});
})
.catch(err => {
return res.serverError(err);
});
}
findAll(req, res) {
const orm = this.app.models;
const Vendor = orm['Vendor'];
const limit = Math.max(0, req.query.limit || 10);
const offset = Math.max(0, req.query.offset || 0);
const sort = req.query.sort || [['created_at', 'DESC']];
const where = req.jsonCriteria(req.query.where);
Vendor.findAndCountAll({
where: where,
order: sort,
offset: offset,
limit: limit,
req: req
})
.then(vendors => {
res.paginate(vendors.count, limit, offset, sort);
return this.app.services.PermissionsService.sanitizeResult(req, vendors.rows);
})
.then(result => {
return res.json(result);
})
.catch(err => {
return res.serverError(err);
});
}
search(req, res) {
const orm = this.app.models;
const Vendor = orm['Vendor'];
const limit = Math.max(0, req.query.limit || 10);
const offset = Math.max(0, req.query.offset || 0);
const sort = req.query.sort || [['name', 'ASC']];
const term = req.query.term;
const where = req.jsonCriteria(req.query.where);
const defaultQuery = lodash_1.defaults(where, {
$or: [
{
name: {
$iLike: `%${term}%`
}
}
]
});
Vendor.findAndCountAll({
where: defaultQuery,
order: sort,
offset: offset,
req: req,
limit: limit
})
.then(vendors => {
res.paginate(vendors.count, limit, offset, sort);
return this.app.services.PermissionsService.sanitizeResult(req, vendors.rows);
})
.then(result => {
return res.json(result);
})
.catch(err => {
return res.serverError(err);
});
}
products(req, res) {
const Product = this.app.models['Product'];
const vendorId = req.params.id;
const limit = Math.max(0, req.query.limit || 10);
const offset = Math.max(0, req.query.offset || 0);
const sort = req.query.sort || [['created_at', 'DESC']];
if (!vendorId) {
const err = new Error('A vendor id is required');
return res.send(401, err);
}
const VendorProduct = this.app.models['VendorProduct'];
let count = 0;
VendorProduct.findAndCountAll({
where: {
vendor_id: vendorId
},
attributes: ['product_id'],
limit: limit,
offset: offset
})
.then(arr => {
count = arr.count;
const productIds = arr.rows.map(model => model.product_id);
return Product.findAllDefault({
where: {
id: productIds
},
req: req
});
})
.then(products => {
res.paginate(count, limit, offset, sort);
return this.app.services.PermissionsService.sanitizeResult(req, products);
})
.then(result => {
return res.json(result);
})
.catch(err => {
return res.serverError(err);
});
}
processUpload(req, res) {
const VendorCsvService = this.app.services.VendorCsvService;
VendorCsvService.processVendorUpload(req.params.id)
.then(result => {
return res.json(result);
})
.catch(err => {
return res.serverError(err);
});
}
exportVendors(req, res) {
}
}
exports.VendorController = VendorController;