Files
WrenchStripeNode/service/cards.js
T
2024-10-31 17:17:19 -04:00

337 lines
15 KiB
JavaScript

'use strict';
const request = require('request');
const db = require('../app/db')
const logger = require('../app/logger');
const CARD_REQUESTED = 1;
const CARD_HOLDER_CREATED = 10;
const CARD_OWNER_ACTIVE = 30;
const CARD_ASSIGNED = 40;
const CARD_ACTIVATE_CARD = 50;
//const User = require("../app/model/cardModel.js");
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
var cards = {
createApplications: async function(req, res, next){
try {
logger.info(req.body);
var data = {
"status": req.body.status,
"limit": req.body.limit,
};
let Qstring = " SELECT id AS request_id, uid AS request_uid, * FROM members_card_request WHERE status = "+data.status+" LIMIT "+data.limit;
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
if (err) throw err;
logger.info(result.rows);
let resultItem ={
"result": result.rows,
"total_record": result.rows.length
}
next(null, resultItem); // pass control to the next handler
});
} catch (error) {
await res.status(500).json({error: `Internal Server error 002 ${error} `});
}
},
createCardHolder: async function (req, res, next) {
try {
logger.info(req.body);
var data = {
"request_uid": req.body.request_uid,
"request_id": req.body.request_id,
};
let Qstring = " SELECT r.*,m.firstname,m.lastname,m.email,m.stripe_cardholder_id FROM members_card_request r " +
" LEFT JOIN members m ON m.id=r.member_id " +
" WHERE r.uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
await db.query(Qstring, async function (err, result) {
try {
if (err) throw err;
if (result.rows[0].length > 0 && result.rows[0].stripe_cardholder_id !=='')
{
Qstring = " UPDATE members_card_request " +
" SET card_issue_id='"+result.rows[0].stripe_cardholder_id+"' , status = "+CARD_HOLDER_CREATED+", updated = now() " +
" WHERE uid::text = '" + data.request_uid +"'";
db.query(Qstring, async function (err, result) {
let resultItem = {
"result": result.rows[0],
"stripe_cardholder_id": result.rows[0].stripe_cardholder_id,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
}
const req_data = {
"name": result.rows[0].firstname.toString() + ' ' + result.rows[0].firstname.toString(),
"firstname": result.rows[0].firstname,
"lastname": result.rows[0].lastname,
"phone_number": result.rows[0].phone_number,
"email": result.rows[0].email,
"address": result.rows[0].address,
"city": result.rows[0].city,
"state": result.rows[0].state,
"postal_code": result.rows[0].postal_code,
"country": result.rows[0].country,
"dob_day": result.rows[0].dob_day,
"dob_month": result.rows[0].dob_month,
"dob_year": result.rows[0].dob_year,
"member_uid" : result.rows[0].member_uid,
"member_id" : result.rows[0].member_id,
};
logger.info("READY FOR STRIPE CALL ",req_data);
logger.info("READY FOR STRIPE CALL ************************************************************************ AFTER ");
const ReqParam =
{
name: req_data.name,
email: req_data.email,
phone_number: req_data.phone_number,
status: 'active',
type: 'individual',
individual: {
first_name: req_data.firstname,
last_name: req_data.lastname,
dob: {
day: req_data.dob_day,
month: req_data.dob_month,
year: req_data.dob_year
},
},
billing: {
address: {
line1: req_data.address,
city: req_data.city,
state: req_data.state,
postal_code: req_data.postal_code,
country: req_data.country,
},
},
};
logger.info("REQ=>", ReqParam);
stripe.issuing.cardholders.create(ReqParam).then((cardholder) => {
console.log(cardholder);
Qstring = " UPDATE members_card_request " +
" SET card_issue_id='"+cardholder.id+"' , status = 10, updated = now() " +
" WHERE uid::text = '" + data.request_uid +"'";
db.query(Qstring, async function (err, result) {
console.log(cardholder);
Qstring = "UPDATE members SET " +
" stripe_cardholder_id = '"+cardholder.id+"' " +
" WHERE id ="+req_data.member_id+" AND stripe_cardholder_id IS NULL AND uid::text = '"+req_data.member_uid+"'";
logger.info("QUERY ->update members ===>> ===> " + Qstring )
db.query(Qstring, async function (err, result) {
let resultItem = {
"result": cardholder,
"stripe_cardholder_id": cardholder.id,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
});
}).catch((error) => {
console.error(error);
let resultItem = {
"result": error,
"total_record": 0
}
next(null, resultItem);
});
} catch (e) {
next(e.message, null); // pass control to the next handler
}
});
} catch (error) {
await res.status(500).json({error: `Internal Server error 002 ${error} `});
}
},
createCard: async function (req, res, next) {
try {
logger.info(req.body);
var data = {
"request_uid": req.body.request_uid,
"request_id": req.body.request_id,
};
let Qstring = " SELECT r.card_issue_id,m.firstname,m.lastname,m.email FROM members_card_request r " +
" LEFT JOIN members m ON m.id=r.member_id " +
" WHERE r.uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
try {
if (err) throw err;
// , ,
const req_data = {
"card_issue_id": result.rows[0].card_issue_id.toString(),
"firstname": result.rows[0].firstname,
};
stripe.issuing.cards.create({
cardholder: req_data.card_issue_id,
currency: 'usd',
type: 'virtual',
}).then((card)=>{
if ( card.id !== undefined && card.id.length > 10 ){
Qstring = " UPDATE members_card_request " +
" SET status = "+CARD_ASSIGNED+", card_id = '"+card.id+"', card_last4='"+card.last4+"', updated = now() , card_assigned = now() " +
" WHERE uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
let resultItem = {
"card": card,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
}
});
} catch (e) {
next(e.message, null); // pass control to the next handler
}
});
} catch (error) {
await res.status(500).json({error: `Internal Server error 002 ${error} `});
}
},
acceptCardTerms: function (req, res, next) {
logger.info(req.body);
var data = {
"request_uid": req.body.request_uid,
"request_id": req.body.request_id,
"aggrement_ip": req.body.aggrement_ip,
};
// const aggrement_ip = '91.121.146.224';
const aggrement_date = Date.now();
try{
let Qstring = " SELECT r.*,m.firstname,m.lastname,m.email,m.stripe_cardholder_id, r.card_issue_id " +
" FROM members_card_request r " +
" LEFT JOIN members m ON m.id=r.member_id " +
" WHERE r.uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
//const cardholder = await
const req_data = {
"card_issue_id": result.rows[0].card_issue_id.toString() ,
};
stripe.issuing.cardholders.update(
req_data.card_issue_id,
{
individual: {
card_issuing: {
user_terms_acceptance: {
date: aggrement_date,
ip: data.aggrement_ip,
},
},
},
}
).then((acceptCardTerm)=>{
// let us update the entry date stamp
// SET status = CARD_OWNER_ACTIVE
logger.info("****************************acceptCardTerm*************************");
logger.info(acceptCardTerm);
Qstring = " UPDATE members_card_request " +
" SET status = "+CARD_OWNER_ACTIVE+", updated = now(), user_activated= now() " +
" WHERE uid::text = '" + data.request_uid +"'";
db.query(Qstring, async function (err, result) {
let resultItem = {
"result": result.rows[0],
"stripe_cardholder_id": result.rows[0].stripe_cardholder_id,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
let resultItem = {
"result_confirm": acceptCardTerm,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
});
} catch (error) {
res.status(500).json({error: `Internal Server error 002 ${error} `});
}
let resultItem ={
"result": [],
"total_record": 0
}
next(null, resultItem ); // pass control to the next handler
},
activateCard: function (req, res, next) {
try {
logger.info(req.body);
var data = {
"request_uid": req.body.request_uid,
"request_id": req.body.request_id,
};
let Qstring = " SELECT r.card_issue_id,m.firstname,m.lastname,m.email FROM members_card_request r " +
" LEFT JOIN members m ON m.id=r.member_id " +
" WHERE r.uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
try {
if (err) throw err;
const req_data = {
"card_issue_id": result.rows[0].card_issue_id.toString(),
"firstname": result.rows[0].firstname,
};
stripe.issuing.cards.update(
req_data.card_issue_id,
{
status: 'active',
}
).then((cardActivateResult)=>{
if ( card.id !== undefined && card.id.length > 10 ){
Qstring = " UPDATE members_card_request " +
" SET status = "+CARD_ACTIVATE_CARD+", updated = now() , card_activated = now() " +
" WHERE uid::text = '" + data.request_uid +"'";
logger.info(Qstring);
db.query(Qstring, async function (err, result) {
let resultItem = {
"card_activate": cardActivateResult,
"total_record": 0
}
next(null, resultItem); // pass control to the next handler
});
}
});
} catch (e) {
next(e.message, null); // pass control to the next handler
}
});
} catch (error) {
res.status(500).json({error: `Internal Server error 002 ${error} `});
}
},
};
module.exports = cards;