signup-login-with-authorizenet
Version:
User Signup-login-with-AuthorizedotNet payment gateway
414 lines (377 loc) • 16.7 kB
text/typescript
// Uncomment these imports to begin using these cool features!
// import {inject} from '@loopback/context';
import { repository } from '@loopback/repository';
import { UserRepository } from '../repositories';
var path = require('path');
const mongodb = require('mongodb');
var createSubscription = require('../../../service/createSubscription')
var updateSubscription = require('../../../service/updateSubscription')
var cancelSubscription = require('../../../service/cancelSubscription')
var getSubscription = require('../../../service/getSubscription')
var getSubscriptionStatus = require('../../../service/getSubscriptionStatus');
var constants = require('../../../constants');
var paymentconstants = require('../../../paymentConfig');
const nodemailer = require('nodemailer');
var CronJob = require('cron').CronJob;
var md5 = require('md5');
const config = require("../../../updateport");
const superagent = require('superagent');
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: constants.service,
auth: {
user: constants.email,
pass: constants.password
}
});
import { User } from '../models';
import {
HttpErrors,
post,
param,
requestBody,
get,
put,
patch,
del,
} from '@loopback/rest';
export class UserController {
constructor((UserRepository) protected userRepo: UserRepository) { }
('/users/signup')
async createUser(() user: User) {
let data;
if (!user.email) {
throw new HttpErrors.BadRequest('email is required');
}
let response = await this.userRepo.find({ where: { email: user.email } });
console.log(response)
if (response.length > 0) {
throw new HttpErrors.BadRequest('email already exists');
}
else {
let creation_response = await this.userRepo.create(user);
if (creation_response) {
let repo = this.userRepo;
return new Promise((resolve, reject) => {
createSubscription.createSubscription(user, function (err, transaction_result) {
if (err) {
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message[0].text)
}
else {
var date = new Date();
data = { "subscription_id": transaction_result.subscriptionId, "subscription_status": "active" };
let mailOptions = {
from: constants.email,
to: user.email,
subject: 'Subscription successfully completed',
html:"<!doctype html><html><head><style>"+
"table { width: 100%; line-height: inherit; text-align: left; background:#fff; }"+
"table, th, td { border: 1px solid black; border-collapse: collapse; }"+
"th, td { padding: 7px; text-align: center; }"+
"table tr.top table td {padding-bottom: 20px;}"+
"</style></head><body><div style='max-width: 800px; margin: auto; padding: 30px; border: 1px solid #808080; box-shadow: 0 0 10px rgba(0, 0, 0, .15); font-size: 16px; line-height: 24px; color: #555;'>"+
"<div style=' margin-bottom: 30px; text-align: center'>"+
"<h1 style='width:100%; line-height: 20px; display: block;text-align:center; margin: 0 auto;'>"+constants.appName+"</h1> "+
"</div><hr><div style='text-align: center;margin:30px 0px;'>"+
"<p>Thank you for Subscribing,<br>Following are your subscription details"+
"<table cellpadding='0' cellspacing='0'><tr class='heading'><th>Name</th><th>Subscription ID</th><th>Payment Schedule</th><th>Subscription Amount</th>"+
"</tr> <tr> <td>"+ user.username +"</td> <td>"+transaction_result.subscriptionId+"</td> <td>Payments occur on day "+date.getDate()+" of every month</td>"+
"<td>$"+paymentconstants.amount+"</td></tr></table></div> </div></body></html>",};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});
console.log(creation_response._id)
update(user)
async function update(user) {
let result = await repo.updateById(creation_response._id, data);
if (result == true) {
let id = creation_response._id;
let updatedResult = await repo.findById(id);
resolve(updatedResult);
}
}
}
}
})
})
}
}
}
('/users/updateSubscription')
async updateSubscription(() user: Object) {
let repo = this.userRepo;
let id = new mongodb.ObjectID(user.user_id);
console.log(id)
let response = await this.userRepo.findById(id);
console.log(response._id)
if (response) {
return new Promise((resolve, reject) => {
updateSubscription.updateSubscription(response.subscription_id, user, function (err, transaction_result) {
if (err) {
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message.text);
}
else {
user.subscription_status = "active";
console.log(response._id)
update(user)
async function update(user) {
let result = await repo.updateById(response._id, user);
if (result == true) {
let id = response._id;
let updatedResult = await repo.findById(id);
resolve(updatedResult);
}
}
}
}
})
})
}
else {
throw new HttpErrors.BadRequest('subscription_id not found');
}
}
('/users/getSubscriptionDetails')
async getSubscriptionDetails(() user: Object) {
let repo = this.userRepo;
let id = new mongodb.ObjectID(user.user_id);
console.log(id)
let response = await this.userRepo.findById(id);
console.log(response._id)
if (response) {
return new Promise((resolve, reject) => {
getSubscription.getSubscription(response.subscription_id, function (err, transaction_result) {
if (err) {
throw new HttpErrors.BadRequest('subscription_id not found');
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message[0].text);
}
else {
resolve(transaction_result);
}
}
})
})
}
else {
throw new HttpErrors.BadRequest('subscription_id not found');
}
}
('/users/getSubscriptionStatus')
async getSubscriptionStatus(() user: Object) {
let repo = this.userRepo;
let id = new mongodb.ObjectID(user.user_id);
console.log(id)
let response = await this.userRepo.findById(id);
console.log(response._id)
if (response) {
return new Promise((resolve, reject) => {
getSubscriptionStatus.getSubscriptionStatus(response.subscription_id, function (err, transaction_result) {
if (err) {
throw new HttpErrors.BadRequest('subscription_id not found');
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message[0].text);
}
else {
resolve(transaction_result);
}
}
})
})
}
else {
throw new HttpErrors.BadRequest('subscription_id not found');
}
}
('/users/cancelSubscription')
async cancelSubscription(() user: Object) {
let repo = this.userRepo;
let id = new mongodb.ObjectID(user.user_id);
console.log(id)
let response = await this.userRepo.findById(id);
console.log(response._id)
if (response) {
return new Promise((resolve, reject) => {
cancelSubscription.cancelSubscription(response.subscription_id, function (err, transaction_result) {
if (err) {
throw new HttpErrors.BadRequest('subscription_id not found');
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message[0].text);
}
else {
user.subscription_status = "inactive";
console.log(response._id)
update(user)
async function update(user) {
let result = await repo.updateById(response._id, user);
if (result == true) {
let id = response._id;
let updatedResult = await repo.findById(id);
let mailOptions = {
from: constants.email,
to: response.email,
subject: 'Subscription Cancelled',
html:"<!doctype html><html><head><style>"+
"table { width: 100%; line-height: inherit; text-align: left; background:#fff; }"+
"table, th, td { border: 1px solid black; border-collapse: collapse; }"+
"th, td { padding: 7px; text-align: center; }"+
"table tr.top table td {padding-bottom: 20px;}"+
"</style></head><body><div style='max-width: 800px; margin: auto; padding: 30px; border: 1px solid #808080; box-shadow: 0 0 10px rgba(0, 0, 0, .15); font-size: 16px; line-height: 24px; color: #555;'>"+
"<div style=' margin-bottom: 30px; text-align: center'>"+
"<h1 style='width:100%; line-height: 20px; display: block;text-align:center; margin: 0 auto;'>"+constants.appName+"</h1> "+
"</div><hr><div style='text-align: center;margin:30px 0px;'>"+
"<p>Hi "+response.username+",<br> You have been successfully cancelled your subscription.</p></div> </div></body></html>",
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});
resolve(updatedResult);
}
}
}
}
})
})
}
else {
throw new HttpErrors.BadRequest('subscription_id not found');
}
}
('/users/reSubscribe')
async reSubscribe(() user: Object) {
let data;
let repo = this.userRepo;
let id = new mongodb.ObjectID(user.user_id);
console.log(id)
let response = await this.userRepo.findById(id);
console.log(response._id)
if (response) {
response.cardnumber = user.cardnumber;
response.cardcode = user.cardcode;
response.expiredate = user.expiredate;
console.log(response)
return new Promise((resolve, reject) => {
createSubscription.createSubscription(response, function (err, transaction_result) {
if (err) {
reject(err);
}
else {
if (transaction_result.messages.resultCode == "Error") {
throw new rest_1.HttpErrors.BadRequest(transaction_result.messages.message[0].text);
reject(transaction_result.messages.message[0].text);
}
else {
var date = new Date();
data = {
"cardnumber" : user.cardnumber,
"cardcode" : user.cardcode,
"expiredate" : user.expiredate,
"subscription_id": transaction_result.subscriptionId, "subscription_status": "active" };
let mailOptions = {
from: constants.email,
to: response.email,
subject: 'Subscription successfully completed',
html:"<!doctype html><html><head><style>"+
"table { width: 100%; line-height: inherit; text-align: left; background:#fff; }"+
"table, th, td { border: 1px solid black; border-collapse: collapse; }"+
"th, td { padding: 7px; text-align: center; }"+
"table tr.top table td {padding-bottom: 20px;}"+
"</style></head><body><div style='max-width: 800px; margin: auto; padding: 30px; border: 1px solid #808080; box-shadow: 0 0 10px rgba(0, 0, 0, .15); font-size: 16px; line-height: 24px; color: #555;'>"+
"<div style=' margin-bottom: 30px; text-align: center'>"+
"<h1 style='width:100%; line-height: 20px; display: block;text-align:center; margin: 0 auto;'>"+constants.appName+"</h1> "+
"</div><hr><div style='text-align: center;margin:30px 0px;'>"+
"<p>Thank you for Subscribing,<br>Following are your subscription details"+
"<table cellpadding='0' cellspacing='0'><tr class='heading'><th>Name</th><th>Subscription ID</th><th>Payment Schedule</th><th>Subscription Amount</th>"+
"</tr> <tr> <td>"+ response.username +"</td> <td>"+transaction_result.subscriptionId+"</td> <td>Payments occur on day "+date.getDate()+" of every month</td>"+
"<td>$"+paymentconstants.amount+"</td></tr></table></div> </div></body></html>",};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});
console.log(response._id);
update(response);
async function update(response) {
let result = await repo.updateById(response._id, data);
if (result == true) {
let id = response._id;
let updatedResult = await repo.findById(id);
resolve(updatedResult);
}
}
}
}
});
});
}
}
('/users/login')
async loginUser(() user: Object): Promise<object> {
// let userget = await this.userRepo.find();
if (!user.email && !user.password) {
throw new HttpErrors.BadRequest('email or password is empty');
}
let response = await this.userRepo.find({ where: { email: user.email } })
if (response.length > 0) {
return response[0]
}
else {
throw new HttpErrors.BadRequest('email or password is incorrect!!!!');
}
}
('/users/{id}')
async findUserById(.path.number('id') id: string): Promise<User> {
return await this.userRepo.findById(id);
}
('/users')
async findUser(): Promise<User[]> {
return await this.userRepo.find();
}
('/users/{id}')
async replaceUser(
.path.number('id') id: string,
() user: User,
): Promise<boolean> {
return await this.userRepo.replaceById(id, user);
}
('/users/{id}')
async updateUser(
.path.number('id') id: string,
() user: User,
): Promise<boolean> {
return await this.userRepo.updateById(id, user);
}
('/users/{id}')
async deleteUser(.path.number('id') id: string): Promise<boolean> {
return await this.userRepo.deleteById(id);
}
}