update api cards and backoffice

This commit is contained in:
Le Viet
2022-06-20 15:02:52 +07:00
parent 4ce4d0c3fd
commit 5e3dc0c755
13 changed files with 1140 additions and 591 deletions
+27
View File
@@ -747,6 +747,11 @@
"supports-color": "^7.1.0" "supports-color": "^7.1.0"
} }
}, },
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
},
"check-error": { "check-error": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
@@ -1041,6 +1046,11 @@
"which": "^2.0.1" "which": "^2.0.1"
} }
}, },
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
},
"crypto": { "crypto": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
@@ -2981,6 +2991,23 @@
"ssri": "^8.0.1" "ssri": "^8.0.1"
} }
}, },
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
"integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
"requires": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
},
"dependencies": {
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
}
}
},
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+1
View File
@@ -23,6 +23,7 @@
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"md5": "^2.3.0",
"morgan": "1.9.1", "morgan": "1.9.1",
"node-gyp": "^9.0.0", "node-gyp": "^9.0.0",
"nodemailer": "^6.7.2", "nodemailer": "^6.7.2",
+27
View File
@@ -0,0 +1,27 @@
const memberServices = require("../services").adminService.bkouser;
console.log(memberServices)
module.exports = {
register(req, res) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
console.log(errors)
return res.status(400).json({ errors: errors.array() });
}
return memberServices.create(req)
.then(member => {
res.status(200).send({
message: "Register succesfully"
})
})
.catch(error => {
res.status(400).send(error.errors)
});
},
login(req, res) {
memberServices.login(req)
.then(accessToken => res.status(200).send(accessToken))
.catch(error => res.status(400).send(error.errors));
},
};
+3 -1
View File
@@ -1,5 +1,7 @@
const member = require("./member"); const member = require("./member");
const bkoUser = require("./bkouser");
module.exports = { module.exports = {
member member,
bkoUser
}; };
+33
View File
@@ -142,4 +142,37 @@ module.exports = {
res.status(400).send(error.errors) res.status(400).send(error.errors)
}); });
}, },
saveDashCard(req, res) {
console.log('saveDashCard')
memberServices.saveDashCard(req)
.then(data => {
return res.status(200).send(data)
})
.catch(error => {
res.status(400).send(error.errors)
});
},
getDashCards(req, res) {
console.log('getDashCard');
memberServices.getDashCards(req)
.then(data => {
return res.status(200).send(data)
})
.catch(error => {
res.status(400).send(error.errors)
});
},
subscribeCard(req, res) {
console.log('subscribeCard')
memberServices.subscribeCard(req)
.then(data => {
return res.status(200).send(data)
})
.catch(error => {
res.status(400).send(error.errors)
});
},
}; };
+52
View File
@@ -0,0 +1,52 @@
const BkoUserController = require("../controllers").bkoUser;
module.exports = (app, url) => {
/**
* @swagger
* /v1/user/login:
* post:
* tags:
* - Users
* summary: Create a JSONPlaceholder user.
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* username:
* type: string
* description: The user's username.
* example: test
* password:
* type: string
* description: The user's password.
* example: password
* responses:
* 200:
* description: Login success
* content:
* application/json:
* schema:
* type: object
* properties:
* accessToken:
* type: string
* description: Message
* example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RAZmxvYXQuc2ciLCJpYXQiOjE2NDcwODIxNDIsImV4cCI6MTY0NzA4Mzk0Mn0.fMQYB4ielKPh21QcZFwOJSjlGNCAg8rkvEcKWctxdX8
* 400:
* description: Invalid
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* description: Message
* example: Wrong username or password
*/
app.post(url + "admin/login", BkoUserController.login);
};
+3 -1
View File
@@ -1,6 +1,8 @@
const member = require("./member"); const member = require("./member");
const admin = require("./admin");
const url = '/api/v1/'; const url = '/api/v1/';
module.exports = (app) => { module.exports = (app) => {
member(app, url) member(app, url);
admin(app, url);
}; };
+53 -4
View File
@@ -292,8 +292,10 @@ module.exports = (app, url) => {
* app.post("refreshlinkemail"); * app.post("refreshlinkemail");
* app.post("usertransportlist"); * app.post("usertransportlist");
* app.post("usertransportprofile"); * app.post("usertransportprofile");
* app.post("getdashcarddata"); *
*/ * */
app.get(url + "user/getdashcarddata", auth, memberController.getDashCards);
/** /**
* @swagger * @swagger
* /v1/user/loadsavedcards: * /v1/user/loadsavedcards:
@@ -314,8 +316,55 @@ module.exports = (app, url) => {
* $ref: '#/components/schemas/Member' * $ref: '#/components/schemas/Member'
*/ */
app.get(url + "user/loadsavedcards", auth, memberController.loadSavedCards); app.get(url + "user/loadsavedcards", auth, memberController.loadSavedCards);
/**
* @swagger
* /v1/user/savedashcard:
* post:
* tags:
* - Users
* summary: Create a JSONPlaceholder user.
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* email:
* type: string
* description: The user's username.
* example: test@float.sg
* mode:
* type: integer
* description: The reset mode
* example: 100
* responses:
* 200:
* description: Login success
* content:
* application/json:
* schema:
* type: object
* properties:
* accessToken:
* type: string
* description: Message
* example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RAZmxvYXQuc2ciLCJpYXQiOjE2NDcwODIxNDIsImV4cCI6MTY0NzA4Mzk0Mn0.fMQYB4ielKPh21QcZFwOJSjlGNCAg8rkvEcKWctxdX8
* 400:
* description: Invalid
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* description: Message
* example: Wrong username or password
*/
app.post(url + "user/savedashcard", auth, memberController.saveDashCard);
/* /*
* app.post("savedashcard"); *
* app.post("saveuserbudget"); * app.post("saveuserbudget");
* app.post("resetpass"); * app.post("resetpass");
* app.post("settingsarray"); * app.post("settingsarray");
@@ -346,9 +395,9 @@ module.exports = (app, url) => {
*/ */
app.get(url + "user/getslidecarddata", auth, memberController.getSlideCardData); app.get(url + "user/getslidecarddata", auth, memberController.getSlideCardData);
app.post(url + "user/subscribecard", auth, memberController.subscribeCard);
/** /**
* app.post("subscribedcarddata"); * app.post("subscribedcarddata");
* app.post("subscribecard");
* app.post("savesurvey"); * app.post("savesurvey");
* app.post("pointsdetail"); * app.post("pointsdetail");
* app.post("loadredeemabale"); * app.post("loadredeemabale");
+93
View File
@@ -0,0 +1,93 @@
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
const crypto = require('crypto');
const {pick, merge } = require('lodash');
const BkoUser = require("../../models").BkoUsers;
var md5 = require('md5');
module.exports = {
RESET_START: 100,
RESET_CONFIRM: 200,
RESET_COMPLETE: 300,
async create(req) {
const { username, password, firstname, lastname, phone, email, signUpSurveyData } = req.body;
const salt = bcrypt.genSaltSync(10);
const hashpassword = bcrypt.hashSync(password, salt);
const user = {
username: username,
password: hashpassword,
firstname: firstname,
lastname: lastname,
phone: phone,
email: email
}
const member = await BkoUser.create(user);
if (member.id > 0) {
var arrayData = [];
forEach(signUpSurveyData, async function (survey) {
var answers = survey.answers;
forEach(answers, function (answer, answerKey) {
if (answer === true) {
var surveyData = {
member_id: member.id,
answers_key: answerKey,
answers: answer,
status: 1
}
arrayData.push(surveyData)
}
})
});
MemberOnboardingSurvey.bulkCreate(arrayData);
}
return member;
},
async login(req) {
console.log('sss');
try {
const user = await BkoUser.findOne({
where: {
username: req.body.username,
status: 1
}
});
console.log(md5(req.body.password));
if (user) {
if (md5(req.body.password) == user.password) {
user.last_login = Date.now()
user.save()
rs = [
'firstname',
'lastname',
'username',
'email',
'pid',
'loc'
];
b = pick(user, rs)
var a ={
session_id: md5(Math.random(99)*10000),
retval: 0
}
return merge(a,b)
} else {
return {
message: "Wrong username or password."
};
}
} else {
return {
message: "Wrong email."
};
}
} catch (error) {
console.debug(error)
return {
message: "Internal Server error Occured"
};
}
},
}
+5
View File
@@ -0,0 +1,5 @@
const bkouser = require("./bkouser");
module.exports = {
bkouser
};
+162 -14
View File
@@ -1,7 +1,9 @@
const sequelize = require("../../models").sequelize; const sequelize = require("../../models").sequelize;
const { Op } = require("sequelize"); const { Op } = require("sequelize");
const { forEach, invoke } = require('lodash'); const { forEach, invoke, omit, merge } = require('lodash');
const MembersCardAssign = require("../../models").MembersCardAssign; const MembersCardAssign = require("../../models").MembersCardAssign;
const MainCards = require("../../models").MainCards;
const MemberSavedCards = require("../../models").MemberSavedCards;
module.exports = (memberService) => { module.exports = (memberService) => {
const cardService = { const cardService = {
@@ -73,14 +75,18 @@ module.exports = (memberService) => {
status: 1, status: 1,
updated: Date.now() updated: Date.now()
}; };
const condition = {
member_id: memberId,
card_id: cardId,
}
console.log('cardClick', cardClick) console.log('cardClick', cardClick)
if (cardClick) { if (cardClick) {
if (cardClick.expiration == 0) { if (cardClick.expiration == 0) {
this.updateMemberCardAssign(memberId, cardId, data); this.updateMemberCardAssign(condition, data);
} }
} else { } else {
//update card status //update card status
this.updateMemberCardAssign(memberId, cardId, data); this.updateMemberCardAssign(condition, data);
} }
} else { } else {
//status already added //status already added
@@ -93,7 +99,7 @@ module.exports = (memberService) => {
status: 1 status: 1
} }
//console.log(data); //console.log(data);
//this.memberCardAssignInsert(data); this.memberCardAssignInsert(data);
} }
}, },
@@ -133,16 +139,13 @@ module.exports = (memberService) => {
}, },
async updateMemberCardAssign(memberId, cardId, data) { async updateMemberCardAssign(condition, data) {
console.log('updateMemberCardAssign') console.log('updateMemberCardAssign')
return MembersCardAssign return MembersCardAssign
.update(data, .update(data,
{ {
returning: true, returning: true,
where: { where: condition
member_id: memberId,
card_id: cardId,
}
} }
) )
.then(([rowsUpdate, [updatedRow]]) => { .then(([rowsUpdate, [updatedRow]]) => {
@@ -206,7 +209,7 @@ module.exports = (memberService) => {
queryMain = `FROM main_cards a LEFT JOIN card_actions b ON (b.id=a.card_action_id) queryMain = `FROM main_cards a LEFT JOIN card_actions b ON (b.id=a.card_action_id)
WHERE a.status = 1 AND a.deleted IS NULL`; WHERE a.status = 1 AND a.deleted IS NULL`;
sqlCount += queryMain; sqlCount += queryMain;
sqlSelect += queryMain + ` ORDER BY RANDOM()`; sqlSelect += queryMain + ` ORDER BY RANDOM()`;
break; break;
default: default:
sql = `select 1 from 1`; sql = `select 1 from 1`;
@@ -349,9 +352,9 @@ module.exports = (memberService) => {
async getSavedCards(memberId) { async getSavedCards(memberId) {
console.log(memberId) console.log(memberId)
var result = { var result = {
total_record : 0, total_record: 0,
session_valid : '', session_valid: '',
internal_return : 0, internal_return: 0,
status: 'OK' status: 'OK'
} }
var saveCardsSql = `SELECT m.id AS saved_card_id, mc.*,mc.id AS card_id var saveCardsSql = `SELECT m.id AS saved_card_id, mc.*,mc.id AS card_id
@@ -362,7 +365,7 @@ module.exports = (memberService) => {
const resultRaw = await sequelize.query(saveCardsSql, { const resultRaw = await sequelize.query(saveCardsSql, {
replacements: { member_id: memberId } replacements: { member_id: memberId }
}); });
if (resultRaw[0]) { if (resultRaw[0]) {
result.total_record = resultRaw[0].length; result.total_record = resultRaw[0].length;
let ic = 0; let ic = 0;
@@ -389,6 +392,151 @@ module.exports = (memberService) => {
} }
return { result: result } return { result: result }
},
async getDashCards(cardCount) {
var result = {
name: "Save Money",
short_title: "Save Money",
title: "Let start saving money...",
description: "I'm Float. Together we are going to make your travel, commute, and life a whole lot better. Did you bring a life jacket?",
background_picture: "https://adminsavvy.sworks.float.sg/SAVVY/img/feed1.jpg",
button1: "",
button1_text: "Let Start",
button1_action: "GOOFFERS",
can_save: 0,
card_id: 0
};
if (cardCount > 0) {
var card = await MainCards.findOne({
where: {
id: cardCount
}
});
if (card) {
result = card.dataValues;
result.card_id = result.id
return omit(result, 'id');
}
}
return result;
},
async saveDashCard(memberId, cardId) {
result = {
saved_card_id: 0
};
var data = {
member_id: memberId,
card_id: cardId
};
var saveCard = await MemberSavedCards.findOne({
where: data
});
console.log(saveCard)
if (!saveCard) {
return await MemberSavedCards.create(data);
}
return saveCard;
},
async subscribeCard(memberId, cardId, dir) {
memberService.refreshMembersPersonalty(memberId);
return
var result = {
saved_card_id: 0
}
var condition = {
member_id: memberId,
card_id: cardId
};
var cardAssign = await MembersCardAssign.findOne({
where: merge(condition, {
status: 1
})
});
console.log(cardAssign)
if (cardAssign) {
switch (dir) {
case 1:
var data = {
subscribe: Date.now()
};
this.updateMemberCardAssign(
merge(condition, {subscribe: null}),
data
);
result.sub_status = "SUBSCRIB";
break;
case 2:
var data = {
subscribe: null
};
this.updateMemberCardAssign(
merge(condition, {subscribe: {
[Op.ne]: null
}}),
data
);
result.sub_status = "UNSUB";
break;
}
} else {
var cardAssign = await MembersCardAssign.findOne({
where: merge(condition, {
status: 0
})
});
if (!cardAssign) {
var dataCard = {
member_id: memberId,
card_id: cardId,
how: "DEALS"
}
card = await this.memberCardAssignInsert(dataCard);
if (card.id) {
var data = {
subscribe: Date.now(),
status: 3
};
var condition = {
member_id: memberId,
card_id: card.id,
subscribe: null
};
this.updateMemberCardAssign(condition, data);
result.sub_status = "SUBSCRIB";
memberService.refreshMembersPersonalty(memberId)
}
} else {
var data = {
subscribe: Date.now(),
status: 3,
how: "DEALS"
};
var condition = {
member_id: memberId,
card_id: card.id,
id: cardAssign.id
};
this.updateMemberCardAssign(condition, data);
}
}
cardAssign = await MembersCardAssign.findOne({
where: {
member_id: memberId,
card_id: cardId,
status: 1
}
});
memberService.refreshMembersPersonalty(memberId)
console.log(cardAssign)
return cardAssign;
} }
} }
+3 -1
View File
@@ -1,6 +1,7 @@
const cardService = require("./card"); const cardService = require("./card");
const mailService = require("./mail"); const mailService = require("./mail");
const memberService = require("./member"); const memberService = require("./member");
const adminService = require("./admin");
/*console.log({ /*console.log({
cardService, cardService,
@@ -10,5 +11,6 @@ const memberService = require("./member");
module.exports = { module.exports = {
cardService, cardService,
mailService, mailService,
memberService memberService,
adminService
}; };
File diff suppressed because it is too large Load Diff