update member cards

This commit is contained in:
Le Viet
2022-05-27 20:53:20 +07:00
parent 0eaf9f481f
commit e9f2c97da2
10 changed files with 543 additions and 260 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
"username": "savvy",
"password": "savvy001!",
"database": "savvy",
"host": "postgres",
"host": "10.10.33.21",
"port": 5432,
"dialect": "postgres"
},
+1 -2
View File
@@ -1,5 +1,5 @@
const { check, validationResult } = require('express-validator');
const memberServices = require("../services").member;
const memberServices = require("../services").memberService.member;
module.exports = {
register(req, res) {
@@ -123,7 +123,6 @@ module.exports = {
},
getSlideCardData(req, res) {
console.log('ss');
memberServices.getSlideCard(req)
.then(data => res.status(200).send(data))
.catch(error => res.status(400).send(error.errors));
-242
View File
@@ -1,242 +0,0 @@
const sequelize = require("../../models").sequelize;
const { Op } = require("sequelize");
const { forEach } = require('lodash');
const MembersCardAssign = require("../../models").MembersCardAssign;
module.exports = {
CARD_BEHAVIORS: {
BH0001: 'BH0001',
BH0002: 'BH0002',
BH0003: 'BH0003',
BH0004: 'BH0004',
BH0005: 'BH0005',
BH0006: 'BH0006',
BH0007: 'BH0007',
BH0008: 'BH0008',
BH0009: 'BH0009',
BH00010: 'BH00010',
BH00011: 'BH00011',
BH00012: 'BH00012',
BH00013: 'BH00013',
BH00014: 'BH00014',
BH00015: 'BH00015',
BH00016: 'BH00016',
BH00017: 'BH00017',
BH00018: 'BH00018',
},
DEFAULT_CARD_TYPE: 33000,
DEFAULT_CARD_COUNT: 100,
CARD_LOCATIONS: {
DEFAULT: 0,
MAINFEED: 100,
ACTIVITIES: 200
},
CARD_ADD_DENIED: 0,
CARD_ADD_ALLOWED: 100,
async getMemberSurveyCards(memberId) {
var result = {};
let sql = `SELECT card_id FROM members_onboarding_survey mos
LEFT JOIN onboarding_survey_cards ca ON ca.answers_key = mos.answers_key
LEFT JOIN main_cards a ON a.id=ca.card_id
WHERE mos.member_id = :member_id AND a.status = 1
AND card_id NOT IN (SELECT card_id FROM members_card_assign WHERE member_id = :member_id AND status=1)
GROUP BY card_id`;
const results = await sequelize.query(sql,
{
replacements: {
member_id: memberId
}
});
if (results[0]) {
var obj = this
console.log(results)
forEach(results[0], async function (value) {
await obj.userCardAdd(memberId, value.card_id)
});
result = results[0];
}
return result;
},
async userCardAdd(memberId, cardId) {
console.log('add card')
var a = this;
const memberCard = await this.getMemberCardAssignByMemberIdAndCardId(memberId, cardId);
//console.log("memberCard: ",memberCard)
if (memberCard) {
console.log('card status', memberCard.status)
if (memberCard.status == 0) {
const cardClick = await this.getMemberCardClickTrack(memberId, cardId);
const data = {
status: 1,
updated: Date.now()
};
console.log('cardClick', cardClick)
if (cardClick) {
if (cardClick.expiration == 0) {
this.updateMemberCardAssign(memberId, cardId, data);
}
} else {
//update card status
this.updateMemberCardAssign(memberId, cardId, data);
}
} else {
//status already added
}
} else {
//insert member card assign
data = {
member_id: memberId,
card_id: cardId,
status: 1
}
//console.log(data);
//this.memberCardAssignInsert(data);
}
},
async memberCardAssignInsert(data) {
return await MembersCardAssign.create(data);
},
async getMemberCardAssignByMemberIdAndCardId(memberId, cardId) {
console.log('getMemberCardAssignByMemberIdAndCardId')
return await MembersCardAssign.findOne({
where: {
card_id: cardId,
member_id: memberId,
status: {
[Op.in]: [0, 1]
}
}
});
},
async getMemberCardClickTrack(memberId, cardId) {
var result = null;
let sql = `SELECT expiration FROM members_cardclicktrack mc LEFT JOIN main_cards a ON a.id=mc.card_id
WHERE a.id=:card_id AND mc.member_id=:member_id LIMIT 1`;
const results = await sequelize.query(sql,
{
replacements: {
card_id: cardId,
member_id: memberId
}
});
if (results[0].expiration) {
console.log(results[0])
result = results[0];
}
return result;
},
async updateMemberCardAssign(memberId, cardId, data) {
console.log('updateMemberCardAssign')
return MembersCardAssign
.update(data,
{
returning: true,
where: {
member_id: memberId,
card_id: cardId,
}
}
)
.then(([rowsUpdate, [updatedRow]]) => {
return updatedRow
})
.catch(error => {
console.log(error)
});
},
async getMemberCardsByType(memberId, cardType, limit) {
var result = {};
var total = 0;
var queryMain = '';
var sqlSelect = '';
var sqlCount = '';
var cardType = cardType;
console.log(cardType)
switch (cardType) {
case 33000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM main_cards a
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN members_card_assign ca ON ca.card_id=a.id AND ca.member_id=:member_id AND ca.status=1
WHERE a.status = 1 AND a.deleted IS NULL AND a.button1_action IN ('GOOFFERS','CARPOOL') `;
sqlCount += queryMain;
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
break;
case 22000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM members_card_assign ca
LEFT JOIN main_cards a ON a.id=ca.card_id
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
WHERE ca.member_id = :member_id AND ca.status =1 AND a.status=1
AND show_area IN (`+ this.CARD_LOCATIONS.DEFAULT + `,` + this.CARD_LOCATIONS.MAINFEED + `) AND a.deleted IS NULL AND ca.subscribe IS NULL AND ca.completed IS NULL `;
sqlCount += queryMain;
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
break;
case 55000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM members_card_assign ca
LEFT JOIN main_cards a ON a.id=ca.card_id
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
WHERE ca.member_id = :member_id AND a.button1_action IN ('GOOFFERS') AND ca.subscribe IS NOT NULL `;
sqlCount += queryMain;
sqlSelect += queryMain + ` ORDER BY ca.subscribe ASC`;
break;
case 11000:
sqlCount = `SELECT count(a.id) `;
sqlSelect = `SELECT a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data `;
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 ORDER BY RANDOM()`;
break;
default:
sql = `select 1 from 1`;
}
sqlSelect += ` LIMIT ` + limit;
console.log("sql", sqlSelect)
const results = await sequelize.query(sqlSelect,
{
replacements: { member_id: memberId }
});
if (results[0]) {
forEach(results[0], async function (card) {
console.log(card.card_behavior)
});
//result = results[0];
}
const totalCards = await sequelize.query(sqlCount,
{
replacements: { member_id: memberId }
});
if (totalCards[0][0]) {
total = parseInt(totalCards[0][0].count);
}
return { total: total, result: result };
},
verifyMemberCardDescision(cardData, member){
var behavior = cardData.card_behavior;
switch(behavior){
case this.CARD_BEHAVIORS.BH0001:
return this.CARD_ADD_ALLOWED;
}
return this.CARD_ADD_ALLOWED;
}
}
+136
View File
@@ -0,0 +1,136 @@
const sequelize = require("../../models").sequelize;
const MembersBankAccount = require("../../models").MembersBankAccounts;
const OAuth2PullJob = require("../../models").Oauth2PullJobs;
module.exports = (memberCardService, memberService) => {
var cardBehavior = {};
cardBehavior.behaviorBH0001 = async (member) => {
return memberCardService.CARD_ADD_ALLOWED;
};
cardBehavior.behaviorBH0002 = async (member) => {
const totalBankAccount = await MembersBankAccount.count({
where: {
member_id: member.id
}
});
if (member.last_acct == "" && totalBankAccount == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0003 = async (member) => {
const totalPullEmail = await OAuth2PullJob.count({
where: {
member_id: member.id
}
});
if (member.last_email == "" && totalPullEmail == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0004 = async (member) => {
const totalPullEmail = await OAuth2PullJob.count({
where: {
member_id: member.id
}
});
if (member.last_acct == "" && totalPullEmail == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0005 = async (member) => {
const weeklySpending = await memberService.weeklyMemberSpending(member);
if (weeklySpending.weekly_total == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0006 = async (member) => {
if (member.max_budget == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0007 = async (member) => {
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0008 = async (member) => {
const weeklySpending = await memberService.weeklyMemberSpending(member);
if (weeklySpending.over_spending > 0 && weeklySpending.under_spending == 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0009 = async (member) => {
const weeklySpending = await memberService.weeklyMemberSpending(member);
if (weeklySpending.under_spending > 0 && weeklySpending.over_spending == 0 && weeklySpending.user_budget_percentbelow > 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0010 = async (member) => {
return await memberService.enableGPS(member);
};
cardBehavior.behaviorBH0011 = async (member) => {
const enableGPS = await memberService.enableGPS(member);
if (enableGPS && member.last_acct != "" && member.last_email != "") {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0012 = async (member) => {
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0013 = async (member) => {
const enableGPS = await memberService.enableGPS(member);
return !enableGPS;
};
cardBehavior.behaviorBH0014 = async (member) => {
const weeklySpending = await memberService.weeklyMemberSpending(member);
if (weeklySpending.user_budget_percentabove > 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0015 = async (member) => {
const weeklySpending = await memberService.weeklyMemberSpending(member);
if (weeklySpending.user_budget_percentbelow > 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0016 = async (member) => {
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0017 = async (member) => {
return memberCardService.CARD_ADD_DENIED;
};
cardBehavior.behaviorBH0018 = async (member) => {
if (member.min_budget + member.max_budget > 0) {
return memberCardService.CARD_ADD_ALLOWED;
}
return memberCardService.CARD_ADD_DENIED;
};
return cardBehavior;
}
+11
View File
@@ -0,0 +1,11 @@
const memberCard = require("./memberCard");
const cardBehavior = require("./cardBehavior");
/* console.log({
memberCard,
cardBehavior
}) */
module.exports = {
memberCard,
cardBehavior
};
+253
View File
@@ -0,0 +1,253 @@
const sequelize = require("../../models").sequelize;
const { Op } = require("sequelize");
const { forEach, invoke } = require('lodash');
const MembersCardAssign = require("../../models").MembersCardAssign;
module.exports = (memberService) => {
const cardBehaviorService = require("./cardBehavior")(this,memberService);
return {
CARD_BEHAVIORS: {
BH0001: 'BH0001',
BH0002: 'BH0002',
BH0003: 'BH0003',
BH0004: 'BH0004',
BH0005: 'BH0005',
BH0006: 'BH0006',
BH0007: 'BH0007',
BH0008: 'BH0008',
BH0009: 'BH0009',
BH00010: 'BH00010',
BH00011: 'BH00011',
BH00012: 'BH00012',
BH00013: 'BH00013',
BH00014: 'BH00014',
BH00015: 'BH00015',
BH00016: 'BH00016',
BH00017: 'BH00017',
BH00018: 'BH00018',
},
DEFAULT_CARD_TYPE: 33000,
DEFAULT_CARD_COUNT: 100,
CARD_LOCATIONS: {
DEFAULT: 0,
MAINFEED: 100,
ACTIVITIES: 200
},
CARD_ADD_DENIED: 0,
CARD_ADD_ALLOWED: 100,
async getMemberSurveyCards(memberId) {
var result = {};
let sql = `SELECT card_id FROM members_onboarding_survey mos
LEFT JOIN onboarding_survey_cards ca ON ca.answers_key = mos.answers_key
LEFT JOIN main_cards a ON a.id=ca.card_id
WHERE mos.member_id = :member_id AND a.status = 1
AND card_id NOT IN (SELECT card_id FROM members_card_assign WHERE member_id = :member_id AND status=1)
GROUP BY card_id`;
const results = await sequelize.query(sql,
{
replacements: {
member_id: memberId
}
});
if (results[0]) {
var obj = this
console.log(results)
forEach(results[0], async function (value) {
await obj.userCardAdd(memberId, value.card_id)
});
result = results[0];
}
return result;
},
async userCardAdd(memberId, cardId) {
console.log('add card')
var a = this;
const memberCard = await this.getMemberCardAssignByMemberIdAndCardId(memberId, cardId);
//console.log("memberCard: ",memberCard)
if (memberCard) {
console.log('card status', memberCard.status)
if (memberCard.status == 0) {
const cardClick = await this.getMemberCardClickTrack(memberId, cardId);
const data = {
status: 1,
updated: Date.now()
};
console.log('cardClick', cardClick)
if (cardClick) {
if (cardClick.expiration == 0) {
this.updateMemberCardAssign(memberId, cardId, data);
}
} else {
//update card status
this.updateMemberCardAssign(memberId, cardId, data);
}
} else {
//status already added
}
} else {
//insert member card assign
data = {
member_id: memberId,
card_id: cardId,
status: 1
}
//console.log(data);
//this.memberCardAssignInsert(data);
}
},
async memberCardAssignInsert(data) {
return await MembersCardAssign.create(data);
},
async getMemberCardAssignByMemberIdAndCardId(memberId, cardId) {
console.log('getMemberCardAssignByMemberIdAndCardId')
return await MembersCardAssign.findOne({
where: {
card_id: cardId,
member_id: memberId,
status: {
[Op.in]: [0, 1]
}
}
});
},
async getMemberCardClickTrack(memberId, cardId) {
var result = null;
let sql = `SELECT expiration FROM members_cardclicktrack mc LEFT JOIN main_cards a ON a.id=mc.card_id
WHERE a.id=:card_id AND mc.member_id=:member_id LIMIT 1`;
const results = await sequelize.query(sql,
{
replacements: {
card_id: cardId,
member_id: memberId
}
});
if (results[0].expiration) {
console.log(results[0])
result = results[0];
}
return result;
},
async updateMemberCardAssign(memberId, cardId, data) {
console.log('updateMemberCardAssign')
return MembersCardAssign
.update(data,
{
returning: true,
where: {
member_id: memberId,
card_id: cardId,
}
}
)
.then(([rowsUpdate, [updatedRow]]) => {
return updatedRow
})
.catch(error => {
console.log(error)
});
},
async getMemberCardsByType(member, cardType, limit) {
var memberId = member.id;
var result = {};
var total = 0;
var queryMain = '';
var sqlSelect = '';
var sqlCount = '';
var cardType = cardType;
console.log(cardType)
switch (cardType) {
case 33000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM main_cards a
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN members_card_assign ca ON ca.card_id=a.id AND ca.member_id=:member_id AND ca.status=1
WHERE a.status = 1 AND a.deleted IS NULL AND a.button1_action IN ('GOOFFERS','CARPOOL') `;
sqlCount += queryMain;
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
break;
case 22000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM members_card_assign ca
LEFT JOIN main_cards a ON a.id=ca.card_id
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
WHERE ca.member_id = :member_id AND ca.status =1 AND a.status=1
AND show_area IN (`+ this.CARD_LOCATIONS.DEFAULT + `,` + this.CARD_LOCATIONS.MAINFEED + `) AND a.deleted IS NULL AND ca.subscribe IS NULL AND ca.completed IS NULL `;
sqlCount += queryMain;
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
break;
case 55000:
sqlCount = `SELECT count(ca.id) `;
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
queryMain = `FROM members_card_assign ca
LEFT JOIN main_cards a ON a.id=ca.card_id
LEFT JOIN address adr ON adr.id = a.card_location
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
WHERE ca.member_id = :member_id AND a.button1_action IN ('GOOFFERS') AND ca.subscribe IS NOT NULL `;
sqlCount += queryMain;
sqlSelect += queryMain + ` ORDER BY ca.subscribe ASC`;
break;
case 11000:
sqlCount = `SELECT count(a.id) `;
sqlSelect = `SELECT a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data `;
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 ORDER BY RANDOM()`;
break;
default:
sql = `select 1 from 1`;
}
sqlSelect += ` LIMIT ` + limit;
console.log("sql", sqlSelect)
const results = await sequelize.query(sqlSelect, {
replacements: { member_id: memberId }
});
var testCardAllowed = this.CARD_ADD_DENIED
if (results[0]) {
var self = this;
forEach(results[0], async function (card) {
//console.log("card behavior: ", card.card_behavior)
if (cardType == 22000) {
testCardAllowed = self.verifyMemberCardDescision(card, member);
}
});
result = results[0];
}
const totalCards = await sequelize.query(sqlCount, {
replacements: { member_id: memberId }
});
if (totalCards[0][0]) {
total = parseInt(totalCards[0][0].count);
}
return { total: total, result: result };
},
async verifyMemberCardDescision(cardData, member) {
var behavior = cardData.card_behavior;
var func = 'behavior' + behavior;
if (func in cardBehaviorService) {
//console.log('call function ', func)
return invoke(cardBehaviorService, func, member);
}
return this.CARD_ADD_ALLOWED;
}
}
}
+12 -2
View File
@@ -1,4 +1,14 @@
const member = require("./member/member");
const cardService = require("./card");
const mailService = require("./mail");
const memberService = require("./member");
/*console.log({
cardService,
mailService,
memberService
})*/
module.exports = {
member
cardService,
mailService,
memberService
};
+1
View File
@@ -1,6 +1,7 @@
const handlebars = require('handlebars');
const fs = require('fs');
const sgMail = require('@sendgrid/mail')
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
module.exports = {
emailResetPassword(user, resetPin) {
+7
View File
@@ -0,0 +1,7 @@
const member = require("./member");
const resetPassword = require("./resetPassword");
module.exports = {
member,
resetPassword
};
+121 -13
View File
@@ -3,13 +3,15 @@ const { pick, forEach } = require('lodash');
const bcrypt = require('bcrypt');
const crypto = require('crypto');
const Member = require("../../models").Members;
const MemberOnboardingSurvey = require("../../models").MembersOnboardingSurvey;
const sequelize = require("../../models").sequelize;
const MemberOnboardingSurvey = require("../../models").MembersOnboardingSurvey;
const MembersTracking = require("../../models").MembersTracking;
const MembersBankAccount = require("../../models").MembersBankAccounts;
const resetPasswordService = require("./resetPassword");
const cardService = require("../card/card");
const memberCardService = require("../card").memberCard.bind(this);
const mailServiceMember = require("../mail").member;
const { DEFAULT_CARD_TYPE } = require('../card/card');
console.log('card in member', memberCardService)
module.exports = {
RESET_START: 100,
RESET_CONFIRM: 200,
@@ -80,7 +82,7 @@ module.exports = {
}
} else {
return {
message: "Wrong username or password."
message: "Wrong email."
};
}
} catch (error) {
@@ -143,7 +145,7 @@ module.exports = {
let expired = date.setDate(date.getDate() + 7);
var status = 3;
if (user == null) {
console.log('user null')
return false;
@@ -266,7 +268,7 @@ module.exports = {
},
async getProfile(req) {
console.log(req.user)
//console.log(req.user)
const member_id = req.user.id;
var result = {};
let sql = `SELECT dg.personality AS personality_name,m.id AS member_id,m.*,m.id as id
@@ -489,19 +491,125 @@ module.exports = {
return 0;*/
},
async getSlideCard(req) {
async weeklyMemberSpending(member) {
var overSpending = 0;
var underSpending = 0;
var weeklyTotal = 0;
var populationAverage = 0;
var memberAverage = 0;
var userBudgetPercentBelow = 0;
var userBudgetPercentAbove = 0;
var userMoreLocalAveragePerm = 0;
var userLessLocalAveragePerm = 0;
var totalBank = 0;
var totalEmail = 0;
var totalWeeklySpend = 0;
//local average
var queryPopulation = `SELECT avg(amount) *0.01 AS population_average
FROM members_bankimport
WHERE category IN (SELECT category FROM activity_listcategory) AND currency='USD'`;
const avgPop = await sequelize.query(queryPopulation);
if (avgPop[0][0]) {
populationAverage = parseFloat(avgPop[0][0].population_average);
}
var queryMemberAverage = `SELECT avg(amount) *0.01 AS member_average
FROM members_bankimport
WHERE category IN (SELECT category FROM activity_listcategory) AND member_id = :member_id AND currency='USD'`;
const memberAverge = await sequelize.query(queryMemberAverage, {
replacements: { member_id: member.id }
});
if (memberAverge[0][0]) {
memberAverage = parseFloat(memberAverge[0][0].member_average);
}
if (memberAverage > 0 && memberAverage > populationAverage) {
userMoreLocalAveragePerm = memberAverage - populationAverage;
}
if (memberAverage > 0 && memberAverage < populationAverage) {
userLessLocalAveragePerm = populationAverage - memberAverage;
}
//end local average
var totalWeeklyBudget = (member.min_budget + member.max_budget) / 200;
var queryBankImport = `SELECT * FROM (SELECT round(0.01*sum(amount),2) AS total FROM members_bankimport
WHERE member_id= :member_id AND LOWER(category) IN (SELECT LOWER(category) FROM activity_listcategory)
AND date_trunc('day', time) > (current_date - 8)
AND date_trunc('day', time) < current_date) AS c WHERE c.total IS NOT NULL`;
const totalBankImport = await sequelize.query(queryBankImport, {
replacements: { member_id: member.id }
});
if (totalBankImport[0][0]) {
totalBank = parseInt(totalBankImport[0][0].total);
}
var queryTotalEmail = `SELECT * FROM (SELECT round(sum(a.cost),2) AS total
FROM parsedemail_item a, trackedemail_item b WHERE b.id=a.trackedemail_item_id
AND b.member_id= :member_id AND a.dup_id IS NULL AND date_trunc('day', a.travel_date_end) > (current_date - 8)
AND date_trunc('day', a.travel_date_end) < current_date) AS c WHERE c.total IS NOT NULL`;
const totalEmailCost = await sequelize.query(queryTotalEmail, {
replacements: { member_id: member.id }
});
if (totalEmailCost[0][0]) {
totalEmail = parseInt(totalEmailCost[0][0].total);
}
totalWeeklySpend = totalBank + totalEmail;
if (totalWeeklySpend > totalWeeklyBudget && totalWeeklyBudget > 0) {
overSpending = totalWeeklySpend - totalWeeklyBudget;
userBudgetPercentAbove = overSpending / totalWeeklyBudget;
}
if (totalWeeklyBudget > totalWeeklySpend && totalWeeklyBudget > 0) {
underSpending = totalWeeklyBudget - totalWeeklySpend;
userBudgetPercentBelow = underSpending / totalWeeklyBudget;
}
weeklyTotal = totalWeeklySpend;
return {
over_spending: overSpending,
under_spending: underSpending,
weekly_total: weeklyTotal,
user_budget_percentbelow: userBudgetPercentBelow,
user_budget_percentabove: userBudgetPercentAbove,
user_less_localavergperm: userLessLocalAveragePerm,
user_more_localavergperm: userMoreLocalAveragePerm,
population_average: populationAverage,
member_average: memberAverage
};
},
async enableGPS(member) {
const totalTracking = await MembersBankAccount.count({
where: {
member_id: member.id
}
});
if (totalTracking > 0) {
return true;
}
return false;
},
async getSlideCard(req) {
const member_id = req.user.id;
const card_type = (req.query.card_type) ? req.query.card_type : DEFAULT_CARD_TYPE;
const card_count = (req.query.card_count) ? req.query.card_count : cardService.DEFAULT_CARD_COUNT;
//const surveyCards = await cardService.getMemberSurveyCards(member_id);
const card_type = (req.query.card_type) ? req.query.card_type : memberCardService.DEFAULT_CARD_TYPE;
const card_count = (req.query.card_count) ? req.query.card_count : memberCardService.DEFAULT_CARD_COUNT;
//const surveyCards = await memberCardService.getMemberSurveyCards(member_id);
//console.log(surveyCards);
console.log("card_type:", card_type);
console.log("get cards")
const member = await this.getProfile(req);
const memberCards = await memberCardService(this).getMemberCardsByType(member, parseInt(card_type), card_count);
const memberCards = await cardService.getMemberCardsByType(member_id, parseInt(card_type), card_count);
console.log("memberCards", memberCards.total)
//console.log("memberCards", memberCards)
if (surveyCards) {
}
}