UNPKG

trailpack-proxy-cart

Version:

eCommerce - Trailpack for Proxy Engine

668 lines (608 loc) 15.9 kB
/* eslint no-console: [0] */ 'use strict' const Controller = require('trails/controller') const lib = require('../../lib') const Errors = require('proxy-engine-errors') const _ = require('lodash') /** * @module DiscountController * @description Generated Trails.js Controller. */ module.exports = class DiscountController extends Controller { /** * * @param req * @param res */ generalStats(req, res) { res.json({}) } /** * * @param req * @param res */ findById(req, res) { const orm = this.app.orm const Discount = orm['Discount'] const id = req.params.id Discount.findById(id, {}) .then(discount => { if (!discount) { throw new Errors.FoundError(Error(`Discount id ${id} not found`)) } return this.app.services.ProxyPermissionsService.sanitizeResult(req, discount) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ findByHandle(req, res) { const orm = this.app.orm const Discount = orm['Discount'] const handle = req.params.handle Discount.findOne({ where: { handle: handle } }) .then(discount => { if (!discount) { throw new Errors.FoundError(Error(`Discount handle ${handle} not found`)) } return this.app.services.ProxyPermissionsService.sanitizeResult(req, discount) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ findAll(req, res) { const orm = this.app.orm const Discount = orm['Discount'] 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 = this.app.services.ProxyEngineService.jsonCritera(req.query.where) Discount.findAndCount({ order: sort, offset: offset, limit: limit, where: where }) .then(discounts => { this.app.services.ProxyEngineService.paginate(res, discounts.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, discounts.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ search(req, res) { const orm = this.app.orm const Discount = orm['Discount'] 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 = this.app.services.ProxyEngineService.jsonCritera(req.query.where) const defaults = _.defaults(where, { $or: [ { name: { $iLike: `%${term}%` }, code: { $iLike: `%${term}%` } } ] }) Discount.findAndCount({ where: defaults, order: sort, offset: offset, req: req, limit: limit }) .then(discounts => { // Paginate this.app.services.ProxyEngineService.paginate(res, discounts.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, discounts.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ create(req, res) { const DiscountService = this.app.services.DiscountService req.body = req.body || {} lib.Validator.validateDiscount.create(req.body) .then(values => { return DiscountService.create(req.body) }) .then(discount => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, discount) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ update(req, res) { const DiscountService = this.app.services.DiscountService const discountID = req.params.id req.body = req.body || {} lib.Validator.validateDiscount.update(req.body) .then(values => { return DiscountService.update(discountID, req.body) }) .then(discount => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, discount) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ destroy(req, res) { const DiscountService = this.app.services.DiscountService const discountID = req.params.id lib.Validator.validateDiscount.destroy(discountID) .then(values => { return DiscountService.destroy(discountID) }) .then(discount => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, discount) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addProduct(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addProduct(req.params.id, req.params.product) .then(product => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, product) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addProducts(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addProducts(req.params.id, req.body) .then(product => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, product) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ removeProduct(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.removeProduct(req.params.id, req.params.product) .then(product => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, product) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ products(req, res) { const Product = this.app.orm['Product'] const discountId = 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 (!discountId) { const err = new Error('A discount id is required') return res.send(401, err) } Product.findAndCountDefault({ order: sort, include: [ { model: this.app.orm['Discount'], as: 'discounts', where: { id: discountId } } ], offset: offset, limit: limit }) .then(products => { // Paginate this.app.services.ProxyEngineService.paginate(res, products.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, products.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addCustomer(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addCustomer(req.params.id, req.params.customer) .then(customer => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, customer) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addCustomers(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addCustomers(req.params.id, req.body) .then(customer => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, customer) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ removeCustomer(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.removeCustomer(req.params.id, req.params.customer) .then(customer => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, customer) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ customers(req, res) { const Customer = this.app.orm['Customer'] const discountId = 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 (!discountId) { const err = new Error('A discount id is required') return res.send(401, err) } Customer.findAndCountDefault({ order: sort, include: [ { model: this.app.orm['Discount'], as: 'discounts', where: { id: discountId } } ], offset: offset, limit: limit }) .then(customers => { // Paginate this.app.services.ProxyEngineService.paginate(res, customers.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, customers.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addCart(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addCart(req.params.id, req.params.cart) .then(cart => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, cart) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ removeCart(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.removeCart(req.params.id, req.params.cart) .then(cart => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, cart) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ carts(req, res) { const Cart = this.app.orm['Cart'] const discountId = 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 (!discountId) { const err = new Error('A cart id is required') return res.send(401, err) } Cart.findAndCount({ order: sort, include: [ { model: this.app.orm['Discount'], as: 'discounts', where: { id: discountId } } ], offset: offset, limit: limit }) .then(carts => { // Paginate this.app.services.ProxyEngineService.paginate(res, carts.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, carts.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addCollection(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addCollection(req.params.id, req.params.collection) .then(collection => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, collection) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ addCollections(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.addCollections(req.params.id, req.body) .then(collection => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, collection) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ removeCollection(req, res) { const DiscountService = this.app.services.DiscountService DiscountService.removeCollection(req.params.id, req.params.collection) .then(collection => { return this.app.services.ProxyPermissionsService.sanitizeResult(req, collection) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ collections(req, res) { const Collection = this.app.orm['Collection'] const discountId = 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 (!discountId) { const err = new Error('A collection id is required') return res.send(401, err) } Collection.findAndCountDefault({ order: sort, include: [ { model: this.app.orm['Discount'], as: 'discounts', where: { id: discountId } } ], offset: offset, limit: limit }) .then(collections => { // Paginate this.app.services.ProxyEngineService.paginate(res, collections.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, collections.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } /** * * @param req * @param res */ events(req, res) { const Event = this.app.orm['Event'] const discountId = req.params.id if (!discountId && !req.user) { const err = new Error('A discount id and a user in session are required') return res.send(401, err) } 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']] Event.findAndCount({ order: sort, where: { object_id: discountId, object: 'discount' }, offset: offset, limit: limit }) .then(events => { // Paginate this.app.services.ProxyEngineService.paginate(res, events.count, limit, offset, sort) return this.app.services.ProxyPermissionsService.sanitizeResult(req, events.rows) }) .then(result => { return res.json(result) }) .catch(err => { return res.serverError(err) }) } }