gift-card-server/middleware/api.js
Rodrigo Pedroso 3ac017a5ad Commit project
2019-06-19 10:46:14 -04:00

1290 lines
32 KiB
JavaScript

'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 Generator = require('./gift-card-number.js');
const Response = require('../etc/responses.json');
// REST API
// MARK: welcome
router.all('/welcome', (req, res) => {
res.status(200).json({
success: true,
message: Response.r1[req.body.language]
});
});
// MARK: - Extractors
// MARK: extract client
function extractClient(payload) {
let client_id = payload._id;
let merchant_id = payload.merchant_id;
let branch_id = payload.branch_id;
let client_name = payload.client_name;
let client_email = payload.client_email;
let street = payload.street;
let street_2 = payload.street_2;
let city = payload.city;
let province = payload.province;
let postal_code = payload.postal_code;
let country = payload.country;
let telephone = payload.telephone;
let cellular = payload.cellular;
let telephone_other = payload.telephone_other;
let birthday = payload.birthday;
return {
client_id,
merchant_id,
branch_id,
client_name,
client_email,
street,
street_2,
city,
province,
postal_code,
country,
telephone,
cellular,
telephone_other,
birthday
}
}
// MARK: extract gift card
function extractGiftCard(payload) {
let gift_card_id = payload._id;
let gift_card_number = payload.gift_card_number;
let merchant_id = payload.merchant_id;
let branch_id = payload.branch_id;
let balance = payload.balance;
let points = payload.points;
return {
gift_card_id,
gift_card_number,
merchant_id,
branch_id,
balance,
points
}
}
// MARK: extract transaction
function extractTransaction(payload) {
let transaction_id = payload._id;
let merchant_id = payload.merchant_id;
let branch_id = payload.branch_id;
let client_id = payload.client_id;
let workstation_id = payload.workstation_id;
let serial_number = payload.serial_number;
let employee_id = payload.employee_id;
let employee_number = payload.employee_number;
let invoice = payload.invoice;
let type = payload.type;
let gift_card_id = payload.gift_card_id;
let gift_card_number = payload.gift_card_number;
let points_amount = payload.points_amount;
let remainder = payload.remainder;
let cancelled_transaction_id = payload.cancelled_transaction_id;
let cancelled = payload.cancelled;
let message = payload.message;
return {
transaction_id,
merchant_id,
branch_id,
client_id,
workstation_id,
serial_number,
employee_id,
employee_number,
invoice,
type,
gift_card_id,
gift_card_number,
points_amount,
remainder,
cancelled_transaction_id,
cancelled,
message
}
}
// MARK: - Registration
// MARK: add branch
router.post('/addBranch', (req, res, next) => {
if (!req.body.name) {
return res.status(400).json({
success: false,
error_code: 'e1',
messsage: Response.r2[req.body.language]
});
}
// Search for equal branches already in database for this Merchant
Branch.findOne({ merchant_id: req.body.merchant_id, name: req.body.name }, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) next();
else {
return res.status(409).json({
success: false,
error_code: 'e2',
message: Response.r3[req.body.language]
})
};
})
}, (req, res, next) => {
// Get the next available branch number
Branch.findOne({ merchant_id: req.body.merchant_id }).sort({ number: -1 }).limit(1).exec((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
req.body.number = 1;
next();
}
else {
req.body.number = doc.number + 1;
next();
}
});
}, (req, res) => {
// Create a new branch
const newBranch = new Branch(req.body);
newBranch.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.r4[req.body.language],
branch_id: doc._id
});
});
});
// MARK: add workstation
router.post('/addWorkstation', (req, res, next) => {
if (!req.body.branch_id) {
req.body.branch_id = req.body.merchant_id;
}
// Get the next available workstation number
Workstation.findOne({ merchant_id: req.body.merchant_id }).sort({ number: -1 }).limit(1).exec((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
req.body.number = 1;
next();
}
else {
req.body.number = doc.number + 1;
next();
}
})
}, (req, res) => {
const newWorkstation = new Workstation(req.body);
newWorkstation.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.r5[req.body.language],
workstation_id: doc._id
});
});
});
// MARK: add employee
router.post('/addEmployee', (req, res, next) => {
if (!req.body.employee_name) {
return res.status(400).json({
success: false,
error_code: 'e3',
messsage: Response.r6[req.body.language]
});
}
if (!req.body.branch_id) {
req.body.branch_id = req.body.merchant_id;
}
// Check for employees with the same name at this Merchant
Employee.findOne({merchant_id: req.body.merchant_id, employee_name: req.body.employee_name}, (err, doc) =>{
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) next();
else {
return res.status(400).json({
success: false,
error_code: 'e4',
messsage: Response.r7[req.body.language]
});
}
});
}, (req, res, next) => {
// Get next available employee number
Employee.findOne({ branch_id: req.body.branch_id }).sort({ employee_number: -1 }).limit(1).exec((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
req.body.employee_number = 1;
next();
}
else {
req.body.employee_number = doc.employee_number + 1;
next();
}
})
}, (req, res) => {
const newEmployee = new Employee(req.body);
newEmployee.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.r8[req.body.language],
employee_number: doc.employee_number,
employee_id: doc._id
});
});
});
// MARK: add client
// Adding a client automatically creates a gift-card
router.post('/addClient', (req, res, next) => {
if (!req.body.client_name) {
return res.status(400).json({
success: false,
message: Response.r9[req.body.language],
error_code: 'e5'
});
}
if (!req.body.client_email) {
return res.status(400).json({
success: false,
message: Response.r10[req.body.language],
error_code: 'e6'
});
}
if (!req.body.branch_id) {
Branch.find({ merchant_id: req.body.merchant_id }, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else if (doc.length === 0) {
req.body.branch_id = req.body.merchant_id;
}
else if (doc.length > 1) {
return res.status(400).json({
success: false,
message: Response.r11[req.body.language],
error_code: 'e7'
});
}
});
}
// Check if this client name already exists in this Merchant's database
Client.findOne({ merchant_id: req.body.merchant_id, name: req.body.client_name }, (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.r12[req.body.language],
error_code: 'e8',
client_name: doc.name,
client_id: doc._id
});
}
else {
next();
}
});
}, (req, res, next) => {
// Get next available client number for this merchant
Client.findOne({ merchant_id: req.body.merchant_id }).sort({ number: -1 }).limit(1).exec((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
if (!doc) {
req.body.number = 1;
next();
}
else {
req.body.number = doc.number + 1;
next();
}
})
}, (req, res) => {
// Create next client
const newClient = new Client(req.body);
newClient.save((err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
req.body.client_id = doc._id;
req.body.client_name = doc.client_name;
// Proceed to create a gift card for this new client
res.locals.fromAddClient = true;
Generator(req, res);
});
});
// MARK: add gift card
router.post('/addGiftCard', (req, res) => {
if (!req.body.client_id) {
return res.status(400).json({
success: false,
error_code: 'e9',
message: Response.r13[req.body.language]
});
}
if (!req.body.branch_id) {
return res.status(400).json({
success: false,
error_code: 'e10',
message: Response.r14[req.body.language]
});
}
Generator(req, res);
});
// MARK: - Editing records
// MARK: edit merchant
router.put('/editMerchant', (req, res) => {
if (!req.body.data) {
return res.status(400).json({
success: false,
message: Response.r15[req.body.language],
error_code: 'e11'
});
}
Merchant.findOneAndUpdate({_id: req.body.merchant_id}, {$set: req.body.data}, {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.r16[req.body.language],
error_code: 'e12'
});
}
else
return res.status(200).json({
success: true,
message: Response.r17[req.body.language],
merchant_id: doc._id,
merchant_name: doc.merchant_name,
merchant_email: doc.merchant_email
});
});
});
// MARK: edit branch
router.put('/editBranch', (req, res) => {
if (!req.body.branch_id) {
return res.status(400).json({
success: false,
message: Response.r11[req.body.language],
error_code: 'e7'
});
}
if (!req.body.data) {
return res.status(400).json({
success: false,
message: Response.r15[req.body.language],
error_code: 'e11'
});
}
Branch.findOneAndUpdate({_id: req.body.branch_id}, {$set: req.body.data}, {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.r18[req.body.language],
error_code: 'e13'
});
}
else {
return res.status(200).json({
success: true,
message: Response.r19[req.body.language],
branch_id: doc._id,
branch_name: doc.branch_name,
street: doc.street,
street_2: doc.street_2,
city: doc.city,
province: doc.province,
postal_code: doc.postal_code,
country: doc.country,
telephone: doc.telephone,
cellular: doc.cellular,
telephone_other: doc.telephone_other
});
}
});
});
// MARK: edit workstation
router.put('/editWorkstation', (req, res) => {
if (!req.body.workstation_id) {
return res.status(400).json({
success: false,
message: Response.r20[req.body.language],
error_code: 'e14'
});
}
if (!req.body.data) {
return res.status(400).json({
success: false,
message: Response.r15[req.body.language],
error_code: 'e11'
});
}
Workstation.findOneAndUpdate({_id: req.body.workstation_id}, {$set: req.body.data}, {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.r21[req.body.language],
error_code: 'e15'
});
}
else {
return res.status(200).json({
success: true,
message: Response.r22[req.body.language],
workstation_id: doc._id,
serial_number: doc.serial_number,
workstation_name: doc.workstation_name
});
}
});
});
// MARK: edit client
router.put('/editClient', (req, res) => {
if (!req.body.client_id) {
return res.status(400).json({
success: false,
message: Response.r23[req.body.language],
error_code: 'e16'
});
}
if (!req.body.data) {
return res.status(400).json({
success: false,
message: Response.r15[req.body.language],
error_code: 'e11'
});
}
Client.findOneAndUpdate({_id: req.body.client_id}, {$set: req.body.data}, {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.r24[req.body.language],
error_code: 'e17'
});
}
else {
return res.status(200).json({
success: true,
message: Response.r25[req.body.language],
client_id: doc._id,
client_name: doc.client_name,
client_email: doc.client_email,
birthday: doc.birthday,
street: doc.street,
street_2: doc.street_2,
city: doc.city,
province: doc.province,
postal_code: doc.postal_code,
country: doc.country,
telephone: doc.telephone,
cellular: doc.cellular,
telephone_other: doc.telephone_other
});
}
});
});
// MARK: edit employee
router.put('/editEmployee', (req, res) => {
if (!req.body.employee_id) {
return res.status(400).json({
success: false,
message: Response.r26[req.body.language],
error_code: 'e18'
});
}
if (!req.body.data) {
return res.status(400).json({
success: false,
message: Response.r15[req.body.language],
error_code: 'e11'
});
}
Employee.findOneAndUpdate({_id: req.body.employee_id}, {$set: req.body.data}, {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.r27[req.body.language],
error_code: 'e19'
});
}
else {
return res.status(200).json({
success: true,
message: Response.r28[req.body.language],
employee_id: doc._id,
number: doc.number,
employee_name: doc.employee_name
});
}
});
});
// MARK: - Deleting records
// MARK: delete merchant
router.delete('/deleteMerchant', (req, res) => {
Merchant.remove({_id: req.body.merchant_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else
return res.status(200).json({
success: true,
message: Response.r29[req.body.language]
});
})
});
// MARK: delete branch
router.delete('/deleteBranch', (req, res) => {
if (!req.body.branch_id) {
return res.status(400).json({
success: false,
message: Response.r30[req.body.language],
error_code: 'e20'
});
}
Branch.remove({_id: req.body.branch_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r31[req.body.language]
});
}
})
});
// MARK: delete workstation
router.delete('/deleteWorkstation', (req, res) => {
if (!req.body.workstation_id) {
return res.status(400).json({
success: false,
message: Response.r32[req.body.language],
error_code: 'e21'
});
}
Workstation.remove({_id: req.body.workstation_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r33[req.body.language]
});
}
})
});
// MARK: delete client
router.delete('/deleteClient', (req, res) => {
if (!req.body.client_id) {
return res.status(400).json({
success: false,
message: Response.r23[req.body.language],
error_code: 'e16'
});
}
Client.remove({_id: req.body.client_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r34[req.body.language]
});
}
})
});
// MARK: delete branch
router.delete('/deleteEmployee', (req, res) => {
if (!req.body.employee_id) {
return res.status(400).json({
success: false,
message: Response.r35[req.body.language],
error_code: 'e22'
});
}
Employee.remove({_id: req.body.employee_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r36[req.body.language]
});
}
})
});
// MARK: delete gift card
router.delete('/deleteGiftCard', (req, res) => {
if (!req.body.gift_card_id && !req.body.gift_card_number) {
return res.status(400).json({
success: false,
message: Response.r37[req.body.language],
error_code: 'e24'
});
}
if (req.body.gift_card_id) {
GiftCard.remove({_id: req.body.gift_card_id}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r38[req.body.language]
});
}
});
}
else if (req.body.gift_card_number) {
GiftCard.remove({gift_card_number: req.body.gift_card_number}, (err) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else {
return res.status(200).json({
success: true,
message: Response.r38[req.body.language]
});
}
})
}
});
// MARK: - Query
// MARK: get merchants
router.get('/getMerchants', (req, res) => {
Merchant.find(req.query, (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(200).json({
success: true,
message: Response.r39[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let merchant_id = foo._id;
let merchant_name = foo.merchant_name;
let merchant_email = foo.merchant_email;
let street = foo.street;
let street_2 = foo.street_2;
let city = foo.city;
let province = foo.province;
let postal_code = foo.postal_code;
let country = foo.country;
let telephone = foo.telephone;
let cellular = foo.cellular;
let telephone_other = foo.telephone_other;
let filtered = {
merchant_id,
merchant_name,
merchant_email,
street,
street_2,
city,
province,
postal_code,
country,
telephone,
cellular,
telephone_other
}
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r40[req.body.language],
merchants: array
});
}
});
});
// MARK: get branches
router.get('/getBranches', (req, res) => {
if (!req.query.merchant_id) {
return res.status(400).json({
success: false,
message: Response.r41[req.body.language],
error_code: 'e25'
});
}
Branch.find(req.query, (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(200).json({
success: true,
message: Response.r42[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let branch_id = foo._id;
let merchant_id = foo.merchant_id;
let branch_name = foo.branch_name;
let telephone = foo.telephone;
let filtered = {
branch_id,
merchant_id,
branch_name,
telephone
}
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r43[req.body.language],
branches: array
});
}
});
});
// MARK: get workstations
router.get('/getWorkstations', (req, res) => {
Workstation.find(req.query, (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(200).json({
success: true,
message: Response.r44[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let workstation_id = foo._id;
let merchant_id = foo.merchant_id;
let branch_id = foo.branch_id;
let workstation_name = foo.workstation_name;
let serial_number = foo.serial_number;
let filtered = {
workstation_id,
merchant_id,
branch_id,
workstation_name,
serial_number
}
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r45[req.body.language],
workstations: array
});
}
});
});
// MARK: get clients
router.get('/getClients', (req, res) => {
if (!req.query.merchant_id) {
return res.status(400).json({
success: false,
message: Response.r41[req.body.language],
error_code: 'e25'
});
}
Client.find(req.query, (err, doc) => {
if (err) return res.status(500).send({ error: err });
else if (!doc) {
return res.status(200).json({
success: true,
message: Response.r46[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let filtered = extractClient(foo);
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r47[req.body.language],
clients: array
});
}
});
});
// MARK: get client details
router.get('/getClientDetails', (req, res, next) => {
var empty = true;
for (var i in req.query) {
empty = false;
break;
}
if (empty) {
return res.status(400).json({
success: false,
message: Response.r48[req.body.language],
error_code: 'e27'
})
}
Client.findOne(req.query, (err, doc) => {
if (err) return res.status(500).send({ error: err });
else if (!doc) {
return res.status(200).json({
success: false,
message: Response.r46[req.body.language],
error_code: 'e26'
});
}
else {
res.locals.client = extractClient(doc);
next();
}
});
}, (req, res, next) => {
GiftCard.find({client_id: res.locals.client.client_id}, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else if (doc) {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let filtered = extractGiftCard(foo);
array.push(filtered);
}
res.locals.gift_cards = array;
}
next();
});
}, (req, res, next) => {
Transaction.find({client_id: res.locals.client.client_id}, (err, doc) => {
if (err) return res.status(500).json({
success: false,
message: Response.r0[req.body.language],
error_code: 'e0'
});
else if (doc) {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let filtered = extractTransaction(foo);
array.push(filtered);
}
res.locals.transactions = array;
}
next();
});
}, (req, res, next) => {
return res.status(200).json({
success: true,
message: Response.r49[req.body.language],
details: res.locals
})
});
// MARK: get employees
router.get('/getEmployees', (req, res) => {
Employee.find(req.query, (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(200).json({
success: true,
message: Response.r50[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let employee_id = foo._id;
let merchant_id = foo.merchant_id;
let branch_id = foo.branch_id;
let employee_name = foo.employee_name;
let employee_number = foo.employee_number;
let filtered = {
employee_id,
merchant_id,
branch_id,
employee_name,
employee_number
}
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r51[req.body.language],
employees: array
});
}
});
});
// MARK: get gift cards
router.get('/getGiftCards', (req, res) => {
GiftCard.find(req.query, (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(200).json({
success: true,
message: Response.r52[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let filtered = extractGiftCard(foo);
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r53[req.body.language],
gift_cards: array
});
}
});
});
// MARK: get gift card details
router.get('/getGiftCardDetails', (req, res, next) => {
if (!req.query.gift_card_id && !req.query.gift_card_number) {
return res.status(400).json({
success: false,
message: Response.r37[req.body.language],
error_code: 'e24'
})
}
else if (req.query.gift_card_id){
GiftCard.findOne({ _id: req.query.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;
res.locals.points = doc.points;
res.locals.merchant_id = doc.merchant_id,
res.locals.branch_id = doc.branch_id;
res.locals.client_id = doc.client_id;
res.locals.gift_card_number = doc.gift_card_number;
next();
}
});
}
else if (req.query.gift_card_number){
GiftCard.findOne({ gift_card_number: req.query.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;
res.locals.points = doc.points;
res.locals.merchant_id = doc.merchant_id,
res.locals.branch_id = doc.branch_id;
res.locals.client_id = doc.client_id;
res.locals.gift_card_number = doc.gift_card_number;
next();
}
});
}
}, (req, res, next) => {
Merchant.findOne(res.locals.merchant_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.r55[req.body.language],
error_code: 'e29'
});
}
else {
res.locals.merchant_name = doc.merchant_name;
next();
}
});
}, (req, res, next) => {
Client.findOne(res.locals.client_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.r56[req.body.language],
error_code: 'e30'
});
}
else {
res.locals.client_name = doc.client_name;
next();
}
});
}, (req, res) => {
Branch.findOne(res.locals.branch_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(200).json({
success: true,
message: Response.r57[req.body.language],
gift_card_number: res.locals.gift_card_number,
client_name: res.locals.client_name,
merchant_name: res.locals.merchant_name,
branch_name: res.locals.merchant_name,
balance: res.locals.balance,
points: res.locals.points,
});
}
else {
return res.status(200).json({
success: true,
message: Response.r57[req.body.language],
gift_card_number: res.locals.gift_card_number,
client_name: res.locals.client_name,
merchant_name: res.locals.merchant_name,
branch_name: doc.branch_name,
balance: res.locals.balance,
points: res.locals.points,
});
}
});
});
// MARK: get transactions
router.get('/getTransactions', (req, res) => {
if (!req.query) {
return res.status(400).json({
success: false,
message: Response.r58[req.body.language],
error_code: 'e31'
});
}
Transaction.find(req.query, (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(200).json({
success: true,
message: Response.r59[req.body.language]
});
}
else {
var array = [];
for (var i = 0; i<doc.length; i++) {
let foo = doc[i];
let filtered = extractTransaction(foo);
array.push(filtered);
}
return res.status(200).json({
success: true,
message: Response.r59[req.body.language],
transactions: array
});
}
});
});
module.exports = router;