signup-login-module-with-authorizedotnet-gateway
Version:
User Signup-login-module-with-AuthorizedotNet payment gateway
312 lines (281 loc) • 10.4 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');
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 {
data = { "subscription_id": transaction_result.subscriptionId, "subscription_status": "active" };
let mailOptions = {
from: constants.email,
to: user.email,
subject: 'Subscription successfully completed',
html: '<strong>Hi </strong>' + user.username + '<p>Your subscription successfully completed</p><p>Your subscription ID: <strong>' + transaction_result.subscriptionId + '</strong></p>',
};
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 successfully Cancelled',
html: '<strong>Hi </strong>' + response.username + '<p>Your subscription successfully cancelled</p><p>Your subscription ID: <strong>' + transaction_result.subscriptionId + '</strong></p>',
};
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/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);
}
}