UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

202 lines (201 loc) 6.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@fabrix/fabrix/dist/common"); const Validator = require("../../validator"); class ShopController extends common_1.FabrixController { generalStats(req, res) { res.json({}); } count(req, res) { const EventsService = this.app.services.EventsService; EventsService.count('Shop') .then(count => { const counts = { shops: count }; return res.json(counts); }) .catch(err => { return res.serverError(err); }); } findAll(req, res) { const orm = this.app.models; const Shop = orm['Shop']; 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); Shop.findAndCountAll({ where: where, order: sort, offset: offset, limit: limit, req: req }) .then(shops => { res.paginate(shops.count, limit, offset, sort); return this.app.services.PermissionsService.sanitizeResult(req, shops.rows); }) .then(result => { return res.json(result); }) .catch(err => { return res.serverError(err); }); } create(req, res) { const ShopService = this.app.services.ShopService; Validator.validateShop.create(req.body) .then(values => { return ShopService.create(req.body); }) .then(shop => { return this.app.services.PermissionsService.sanitizeResult(req, shop); }) .then(result => { return res.json(result); }) .catch(err => { return res.serverError(err); }); } update(req, res) { const ShopService = this.app.services.ShopService; const id = req.params.id; Validator.validateShop.update(req.body) .then(values => { return ShopService.update(id, req.body); }) .then(shop => { return this.app.services.PermissionsService.sanitizeResult(req, shop); }) .then(result => { return res.json(result); }) .catch(err => { return res.serverError(err); }); } addCustomer(req, res) { } removeCustomer(req, res) { } customers(req, res) { } addOrder(req, res) { } removeOrder(req, res) { } orders(req, res) { } addProduct(req, res) { } removeProduct(req, res) { } products(req, res) { } addUser(req, res) { } removeUser(req, res) { } users(req, res) { } login(req, res) { let shopId = req.params.id; const Shop = this.app.models['Shop']; const User = this.app.models['User']; if (!shopId && req.user) { shopId = req.user.current_shop_id; } if (!shopId && !req.user) { const err = new Error('A shop id and a user in session are required'); return res.send(401, err); } let resShop; Shop.findById(shopId) .then(shop => { if (!shop) { throw new Error('Unexpected Error while authenticating shop'); } resShop = shop; return new Promise((resolve, reject) => { req.loginShop(resShop, function (err) { if (err) { return reject(err); } return resolve(resShop); }); }); }) .then((shop) => { return User.findById(req.user.id, { attributes: ['id', 'current_shop_id'] }) .then(user => { user.current_shop_id = resShop.id; return user.save(); }); }) .then(() => { return this.app.services.PermissionsService.sanitizeResult(req, resShop); }) .then(result => { return res.json(result); }) .catch(err => { return res.serverError(err); }); } switchShop(req, res) { const shopId = req.params.id; const Shop = this.app.models['Shop']; const User = this.app.models['User']; if (!shopId && !req.user) { const err = new Error('A shop id and a user in session are required'); return res.send(401, err); } User.findById(req.user.id, { attributes: ['id', 'current_shop_id'] }) .then(user => { user.current_shop_id = shopId; return user.save(); }) .then(user => { return Shop.findById(shopId); }) .then(shop => { return new Promise((resolve, reject) => { req.loginShop(shop, (err) => { if (err) { return reject(err); } return resolve(shop); }); }); }) .then(shop => { return this.app.services.PermissionsService.sanitizeResult(req, shop); }) .then(result => { return res.json(result); }) .catch(err => { return res.serverError(err); }); } logout(req, res) { const User = this.app.models['User']; if (!req.user) { const err = new Error('A user in session is required'); return res.send(401, err); } User.findById(req.user.id, { attributes: ['id', 'current_shop_id'] }) .then(user => { user.current_shop_id = null; return user.save(); }) .then(() => { req.logoutShop(); res.json({}); }); } } exports.ShopController = ShopController;