Commit project

This commit is contained in:
Rodrigo Pedroso 2019-06-19 10:46:14 -04:00
commit 3ac017a5ad
1030 changed files with 94062 additions and 0 deletions

1290
middleware/api.js Normal file

File diff suppressed because it is too large Load diff

65
middleware/auth-check.js Normal file
View file

@ -0,0 +1,65 @@
'use strict';
const Merchant = require('mongoose').model('Merchant');
const config = require('../etc');
const atob = require('abab').atob;
const Response = require('../etc/responses.json');
module.exports = (req, res, next) => {
var lang;
if (req.query.language) {
lang = req.query.language;
}
else if (req.body.language) {
lang = req.body.language;
}
else {
req.body.language = 'en';
}
if (!req.headers.authorization) {
return res.status(401).json({
success: false,
message: Response.r81[lang],
error_code: 'e51'
})
}
const decoded = atob(req.headers.authorization.split(/ /)[1]);
const userId = decoded.split(/:/)[0];
const pwd = decoded.split(/:/)[1];
return Merchant.findById(userId, (userErr, user) => {
// Check user id
if (userErr || !user) {
return res.status(401).json({
success: false,
message: 'UserId ' + userId + Response.r82[lang]
});
}
// Check password
return user.comparePassword(pwd, (pwdErr, isMatch) => {
if (pwdErr) {
return done(pwdErr);
}
if (!isMatch) {
return res.status(401).json({
success: false,
message: Response.r83[lang]
})
}
if (!req.body.merchant_id) {
req.body.merchant_id = userId;
}
else {
console.log('Merchant déjà');
}
return next();
})
});
};

121
middleware/auth.js Normal file
View file

@ -0,0 +1,121 @@
'use strict';
const express = require('express');
const passport = require('passport');
const validator = require('validator');
const config = require('../etc');
const router = new express.Router();
const Merchant = require('mongoose').model('Merchant');
const Response = require('../etc/responses.json');
function validateSignupForm(payload, lang) {
var errors = {};
let isFormValid = true;
let message = '';
if (!payload || typeof payload.merchant_email !== 'string' || !validator.isEmail(payload.merchant_email)) {
isFormValid = false;
message = Response.r85[lang];
errors = 'e33';
}
if (!payload || typeof payload.password !== 'string' || payload.password.trim().length < 3) {
isFormValid = false;
message = Response.r86[lang];
errors = 'e34';
}
if (!payload || typeof payload.merchant_name !== 'string' || payload.merchant_name.trim().length === 0) {
isFormValid = false;
message = Response.r87[lang];
errors = 'e35';
}
return {
success: isFormValid,
message,
errors
};
}
router.post('/signup', (req, res, next) => {
var lang;
if (req.query.language) {
lang = req.query.language;
res.locals.lang = lang;
}
else if (req.body.language) {
lang = req.body.language;
res.locals.lang = lang;
}
else {
req.body.language = 'en';
res.locals.lang = lang;
}
const validationResult = validateSignupForm(req.body, lang);
if (!validationResult.success) {
return res.status(400).json({
success: false,
message: validationResult.message,
error_code: validationResult.errors
});
}
// Get the next higher merchant number
Merchant.findOne({}).sort({number: -1}).limit(1).exec((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[lang],
error_code: 'e0'
});
if (!doc) {
// There are no merchants on the database. Create the very first one.
req.body.number = 1;
next();
}
else {
req.body.number = doc.number + 1;
next();
}
});
}, (req, res, next) => {
let lang = res.locals.lang;
return passport.authenticate('local-signup', (err, doc) => {
if (err) {
if (err.name === 'MongoError' && err.code === 11000) {
// the 11000 Mongo code is for a duplication email error
// the 409 HTTP status code is for conflict error
return res.status(409).json({
success: false,
message: Response.r90[lang],
error_code: 'e36'
});
}
return res.status(400).json({
success: false,
message: Response.r90[lang],
error_code: 'e36'
});
}
if (!doc) {
return res.status(400).json({
success: false,
message: Response.r92[lang],
error_code: 'e37'
});
}
return res.status(200).json({
success: true,
message: 'Merchant ' + req.body.merchant_name + Response.r93[lang],
merchant_id: doc._id
});
})(req, res, next);
});
module.exports = router;

View file

@ -0,0 +1,193 @@
'use strict';
const Merchant = require('mongoose').model('Merchant');
const Branch = require('mongoose').model('Branch');
const GiftCard = require('mongoose').model('GiftCard');
const Response = require('../etc/responses.json');
/*
* Gather date, merchant_id, branch_id and gift card sequence
* to generate a gift_card_number
*/
module.exports = (req, res, next) => {
getMerchantNumber(req, res);
}
// MARK: get merchant number
function getMerchantNumber(req, res) {
// Merchant number
Merchant.findOne({ _id: req.body.merchant_id }, (err, doc) => {
if (err || !doc) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
// Make sure the merchant number always has 3 digits
var numberString = doc.number.toString();
if (numberString.length === 1) {
numberString = "00" + numberString;
}
else if (numberString.length === 2) {
numberString = "0" + numberString;
}
req.body.merchant_number = numberString;
req.body.merchant_name = doc.merchant_name;
getBranchNumber(req, res);
}
});
}
// MARK: get branch number
function getBranchNumber(req, res) {
// Branch number
Branch.findOne({ _id: req.body.branch_id }, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
// This Merchant has only the main office, no branches.
req.body.branch_number = req.body.merchant_id;
req.body.branch_number = "00";
req.body.branch_name = req.body.merchant_name;
}
else {
// Make sure the branch number always has 2 digits
var numberString = doc.number.toString();
if (numberString.length === 1) {
numberString = "0" + numberString;
}
req.body.branch_number = numberString;
req.body.branch_name = doc.branch_name;
}
generateCardNumber(req, res);
});
}
// MARK: generate card number
function generateCardNumber(req, res) {
// Get date
var d = new Date();
var year = d.getFullYear().toString().substr(-2);
var month = (d.getMonth() + 1).toString();
if (month.length === 1) {
month = "0" + month;
}
var day = d.getDate().toString();
if (day.length === 1) {
day = "0" + day;
}
// Get next available card number
GiftCard.findOne({ merchant_id: req.body.merchant_id, branch_id: req.body.branch_id }).sort({ number: -1 }).limit(1).exec((err, doc) => {
var numberString;
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
req.body.number = 1;
numberString = '1';
}
else {
req.body.number = doc.number + 1;
numberString = req.body.number.toString();
}
// Make sure the card number always has 4 digits
if (numberString.length === 1) {
numberString = "000" + numberString;
}
else if (numberString.length === 2) {
numberString = "00" + numberString;
}
else if (numberString.length === 3) {
numberString = "0" + numberString;
}
// Trim numbers with more than 4 digits. The date components will guarantee the cardNumber uniqueness.
else if (numberString.length >= 4) {
numberString = numberString.slice(-4);
}
// Finally compose complete card number
const cardNumber =
year +
month +
day +
req.body.merchant_number +
req.body.branch_number +
numberString
req.body.gift_card_number = cardNumber;
addGiftCard(req, res);
});
}
// MARK: add gift card
function addGiftCard(req, res) {
req.body.balance = 0;
req.body.points = 0;
var msg;
if (res.locals.fromAddClient) {
msg = Response.r78[req.body.language];
}
else {
msg = Response.r79[req.body.language];
}
var newGiftCard = new GiftCard(req.body);
newGiftCard.save((err, doc) => {
if (err) {
// Gift card number not unique due to simultaneous creation
console.log('Gift card number not unique due to simultaneous creation. New number assigned automatically.');
const number = Number(req.body.gift_card_number) + 1;
req.body.gift_card_number = number.toString();
newGiftCard = new GiftCard(req.body);
newGiftCard.save((err2, doc2) => {
if (err2) {
return res.status(400).json({
success: false,
message: Response.r80[req.body.language],
error: 'e32'
});
}
else {
return res.status(200).json({
success: true,
message: msg,
client_name: req.body.client_name,
client_id: req.body.client_id,
gift_card_number: doc2.gift_card_number,
merchant_name: req.body.merchant_name,
branch_name: req.body.branch_name,
balance: doc2.balance,
points: doc2.points
});
}
})
}
else {
return res.status(200).json({
success: true,
message: msg,
client_name: req.body.client_name,
client_id: req.body.client_id,
gift_card_number: doc.gift_card_number,
merchant_name: req.body.merchant_name,
branch_name: req.body.branch_name,
balance: doc.balance,
points: doc.points
});
}
});
}

33
middleware/lang.js Normal file
View file

@ -0,0 +1,33 @@
'use strict';
const Merchant = require('mongoose').model('Merchant');
module.exports = (req, res, next) => {
if (req.body.language) {
return next();
}
else if (req.query.language) {
req.body.language = req.query.language;
return next();
}
else {
Merchant.findOne({_id: req.body.merchant_id}, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: 'Server error / Erreur de serveur',
error_code: 'e0'
});
else if (!doc) {
return res.status(400).json({
success: false,
message: "Merchant not found / Merchant pas encontré",
error_code: 'e12'
});
}
else {
req.body.language = doc.language;
return next();
}
});
}
}

View file

@ -0,0 +1,32 @@
'use strict';
const express = require('express');
const router = new express.Router();
const Response = require('../etc/responses.json');
router.use((req, res, next) => {
var lang;
if (req.query.language) {
lang = req.query.language;
}
else if (req.body.language) {
lang = req.body.language;
}
else {
lang = 'en';
}
const error = {};
if (!req.body.merchant_id) {
return res.status(400).json({
success: false,
message: Response.r84[lang],
error_code: 'e38'
});
}
next();
});
module.exports = router;

740
middleware/trans.js Normal file
View file

@ -0,0 +1,740 @@
'use strict';
const express = require('express');
const router = new express.Router();
const Merchant = require('mongoose').model('Merchant');
const Branch = require('mongoose').model('Branch');
const Workstation = require('mongoose').model('Workstation');
const Employee = require('mongoose').model('Employee');
const Client = require('mongoose').model('Client');
const GiftCard = require('mongoose').model('GiftCard');
const Transaction = require('mongoose').model('Transaction');
const Response = require('../etc/responses.json');
// MARK: - Transactions
// MARK: validation
function validateTransaction(payload) {
var errors = 'e39';
let isFormValid = true;
var message = Response.r61[req.body.language];
if (!payload.money_amount) {
isFormValid = false;
message = Response.r62[req.body.language];
errors = 'e40';
}
if (!payload.workstation_id && !payload.serial_number) {
isFormValid = false;
message = Response.r63[req.body.language];
errors = 'e41';
}
if (!payload.employee_id) {
isFormValid = false;
message = Response.r64[req.body.language];
errors = 'e42';
}
return {
success: isFormValid,
message,
errors
};
}
// MARK: reload GiftCard
router.put('/reloadGiftCard', (req, res, next) => {
const validationResult = validateTransaction(req.body);
if (!validationResult.success) {
return res.status(400).json({
success: false,
message: validationResult.message,
error_code: validationResult.errors
});
}
// Retrieve serial_number to make sure it gets registered in the transaction
if (!req.body.serial_number) {
Workstation.findOne({_id: req.body.workstation_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r21[req.body.language],
error_code: 'e15'
});
}
else {
req.body.serial_number = doc.serial_number;
next();
}
});
}
}, (req, res, next) => {
// Retrieve employee number to guarantee it will be registered in the transaction
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r27[req.body.language],
error_code: 'e19'
});
}
else {
req.body.employee_number = doc.employee_number;
next();
}
});
}, (req, res, next) => {
if (req.body.gift_card_id) {
GiftCard.findOneAndUpdate(
{_id: req.body.gift_card_id},
{$inc: {balance: req.body.money_amount}},
{new: true},
(err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
req.body.success = true;
req.body.balance = doc.balance;
req.body.branch_id = doc.branch_id;
req.body.client_id = doc.client_id;
req.body.gift_card_id = doc._id;
req.body.gift_card_number = doc.gift_card_number;
req.body.message = Response.r65[req.body.language];
next();
}
});
}
else if (req.body.gift_card_number) {
GiftCard.findOneAndUpdate(
{gift_card_number: req.body.gift_card_number},
{$inc: {balance: req.body.money_amount}},
{new: true},
(err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
req.body.success = true;
req.body.balance = doc.balance;
req.body.branch_id = doc.branch_id;
req.body.client_id = doc.client_id;
req.body.gift_card_id = doc._id;
req.body.gift_card_number = doc.gift_card_number;
req.body.message = Response.r65[req.body.language];
next();
}
});
}
else {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
});
// MARK: redeem GiftCard
router.put('/redeemGiftCard', (req, res, next) => {
const validationResult = validateTransaction(req.body);
if (!validationResult.success) {
return res.status(400).json({
success: false,
message: validationResult.message,
errors: validationResult.errors
});
}
// Retrieve serial_number to make sure it gets registered in the transaction
if (!req.body.serial_number) {
Workstation.findOne({_id: req.body.workstation_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r21[req.body.language],
error_code: 'e15'
});
}
else {
req.body.serial_number = doc.serial_number;
next();
}
});
}
}, (req, res, next) => {
// Retrieve employee number to guarantee it will be registered in the transaction
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r27[req.body.language],
error_code: 'e19'
});
}
else {
req.body.employee_number = doc.employee_number;
next();
}
});
}, (req, res, next) => {
if (req.body.gift_card_id) {
GiftCard.findOne({_id: req.body.gift_card_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
if (req.body.money_amount <= doc.balance) {
GiftCard.findOneAndUpdate(
{_id: req.body.gift_card_id},
{$inc: {balance: -req.body.money_amount}},
{new: true},
(err, doc2) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
req.body.success = true;
req.body.balance = doc2.balance;
req.body.branch_id = doc2.branch_id;
req.body.client_id = doc2.client_id;
req.body.gift_card_id = doc2._id;
req.body.gift_card_number = doc2.gift_card_number;
req.body.message = Response.r66[req.body.language];
next();
}
});
}
else {
return res.status(200).json({
success: false,
message: Response.r67[req.body.language],
error_code: 'e44',
giftCardBalance: doc.balance
});
}
}
});
}
else if (req.body.gift_card_number) {
GiftCard.findOne({gift_card_number: req.body.gift_card_number}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
if (req.body.money_amount <= doc.balance) {
GiftCard.findOneAndUpdate(
{gift_card_number: req.body.gift_card_number},
{$inc: {balance: -req.body.money_amount}},
{new: true},
(err, doc2) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else {
req.body.success = true;
req.body.balance = doc2.balance;
req.body.branch_id = doc2.branch_id;
req.body.client_id = doc2.client_id;
req.body.gift_card_id = doc2._id;
req.body.gift_card_number = doc2.gift_card_number;
req.body.message = Response.r66[req.body.language];
next();
}
});
}
else if (req.body.enforce) {
GiftCard.findOneAndUpdate(
{gift_card_number: req.body.gift_card_number},
{$set: {balance: 0}},
{new: true},
(err, doc2) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else {
req.body.success = true;
req.body.balance = doc2.balance;
req.body.gift_card_id = doc2._id;
req.body.branch_id = doc2.branch_id;
req.body.client_id = doc2.client_id;
req.body.gift_card_number = doc2.gift_card_number;
req.body.remainder = req.body.money_amount - doc.balance;
req.body.message = Response.r66[req.body.language];
next();
}
});
}
else {
return res.status(200).json({
success: false,
message: Response.r67[req.body.language],
error_code: 'e44',
giftCardBalance: doc.balance
});
}
}
});
}
});
// MARK: cancel transaction
router.post('/cancelTransaction', (req, res, next) => {
if (!req.body.transaction_id) {
return res.status(400).json({
success: false,
message: Response.r68[req.body.language],
error_code: 'e45'
});
}
if (!req.body.employee_id) {
return res.status(400).json({
success: false,
message: Response.r64[req.body.language],
error_code: 'e42'
});
}
// Retrieve employee number to guarantee it will be registered in the transaction
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r27[req.body.language],
error_code: 'e19'
});
}
else {
req.body.employee_number = doc.employee_number;
next();
}
});
}, (req, res, next) => {
Transaction.findOneAndUpdate(
{_id: req.body.transaction_id},
{$set: {cancelled: true}},
{new: true},
(err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r69[req.body.language],
error_code: 'e46'
});
}
else {
if (doc.type === 'Redeem') {
res.locals.gift_card_id = doc.gift_card_id;
res.locals.amount = doc.money_amount;
res.locals.transaction_id = req.body.transaction_id;
res.locals.doc = doc;
next();
}
else if (doc.type === 'Reload') {
res.locals.gift_card_id = doc.gift_card_id;
res.locals.amount = -doc.money_amount;
res.locals.transaction_id = req.body.transaction_id;
res.locals.doc = doc;
next();
}
else if (doc.type === 'Activation'){
res.locals.gift_card_id = doc.gift_card_id;
res.locals.transaction_id = req.body.transaction_id;
res.locals.doc = doc;
next();
}
else if (doc.type === 'Remittance') {
res.locals.gift_card_id = doc.gift_card_id;
res.locals.amount = doc.remainder;
res.locals.transaction_id = req.body.transaction_id;
res.locals.doc = doc;
next();
}
}
});
}, (req, res, next) => {
if (res.locals.doc.type == 'Activation') {
GiftCard.findOneAndRemove({ _id: res.locals.gift_card_id }, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
req.body.success = true;
req.body.balance = doc.balance;
req.body.branch_id = doc.branch_id;
req.body.client_id = doc.client_id;
req.body.gift_card_id = doc._id;
req.body.gift_card_number = doc.gift_card_number;
req.body.type = 'Cancel';
req.body.cancelled_transaction_id = res.locals.transaction_id;
req.body.message = Response.r70[req.body.language];
next();
}
});
}
else {
GiftCard.findOneAndUpdate(
{_id: res.locals.gift_card_id},
{$inc: {balance: res.locals.amount}},
{new: true},
(err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
req.body.success = true;
req.body.balance = doc.balance;
req.body.branch_id = doc.branch_id;
req.body.client_id = doc.client_id;
req.body.gift_card_id = doc._id;
req.body.gift_card_number = doc.gift_card_number;
req.body.type = 'Cancel';
req.body.cancelled_transaction_id = res.locals.transaction_id;
req.body.message = Response.r71[req.body.language];
next();
}
}
);
}
});
// MARK: empty gift card (remittance)
router.post('/emptyGiftCard', (req, res, next) => {
if (!req.body.gift_card_id && !req.body.gift_card_number) {
return res.status(400).json({
success: false,
error_code: 'e24',
message: Response.r37[req.body.language]
});
}
if (!req.body.branch_id) {
return res.status(400).json({
success: false,
error_code: 'e7',
message: Response.r11[req.body.language]
});
}
if (!req.body.employee_id) {
return res.status(400).json({
success: false,
message: Response.r64[req.body.language],
error_code: 'e42'
});
}
// Retrieve employee number to guarantee it will be registered in the transaction
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r27[req.body.language],
error_code: 'e19'
});
}
else {
req.body.employee_number = doc.employee_number;
next();
}
});
}, (req, res, next) => {
if (req.body.gift_card_id) {
GiftCard.findOne({ _id: req.body.gift_card_id }, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
res.locals.balance = doc.balance;
req.body.gift_card_number = doc.gift_card_number;
next();
}
});
}
else if (req.body.gift_card_number) {
GiftCard.findOne({ gift_card_number: req.body.gift_card_number }, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else if (!doc) {
return res.status(400).json({
success: false,
message: Response.r54[req.body.language],
error_code: 'e28'
});
}
else {
res.locals.balance = doc.balance;
req.body.gift_card_id = doc._id;
next();
}
});
}
}, (req, res, next) => {
if (res.locals.balance > 5) {
return res.status(400).json({
sucess: false,
error_code: 'e47',
message: Response.r72[req.body.language]
});
}
else if (res.locals.balance == 0) {
return res.status(400).json({
sucess: false,
error_code: 'e48',
message: Response.r73[req.body.language]
});
}
next();
}, (req, res, next) => {
Branch.findOne({ _id: req.body.branch_id }, (err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
if (!doc) {
return res.status(400).json({
success: false,
message: Response.r18[req.body.language],
error_code: 'e13'
});
}
else {
if (doc.province !== 'QC') {
return res.status(400).json({
success: false,
message: Response.r74[req.body.language] + doc.province + '.',
error_code: 'e49'
});
}
else {
GiftCard.findOneAndUpdate(
{gift_card_number: req.body.gift_card_number},
{$set: {balance: 0}},
{new: true},
(err, doc2) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
else {
req.body.success = true;
req.body.balance = doc2.balance;
req.body.gift_card_id = doc2._id;
req.body.branch_id = req.body.branch_id;
req.body.client_id = doc2.client_id;
req.body.gift_card_number = doc2.gift_card_number;
req.body.remainder = res.locals.balance;
req.body.type = 'Remittance';
req.body.message = Response.r75[req.body.language];
next();
}
});
}
}
});
});
// MARK: - Record transaction
router.use((req, res) => {
if (req.body.success) {
const newTransaction = new Transaction(req.body);
newTransaction.save((err, doc) => {
if (err) {
return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
}
return res.status(200).json({
success: true,
message: Response.r76[req.body.language] + req.body.message,
transaction_id: doc._id,
type: req.body.type,
balance: req.body.balance,
remainder: req.body.remainder
})
});
}
else {
return res.status(400).json({
success: false,
message: Response.r77[req.body.language],
error_code: 'e50'
});
}
});
module.exports = router;