Checks if user already submited, part 1

This commit is contained in:
Alicia Sykes
2018-02-01 21:11:14 +00:00
parent 560420752e
commit e00f77a1ce
2 changed files with 109 additions and 62 deletions

View File

@@ -17,6 +17,26 @@ class Helpers {
}
/**
* Determines if a given date is today.
* Returns true if it is, false if it isn't
* @param date
* @returns {boolean}
*/
static isDateToday(date){
return true;
}
/**
* Puts a given string into uniform format by making it
* lowercase and removing trailing spaces and funky symbols
* @param str
* @returns {string}
*/
static normaliseString(str) {
return str.toLowerCase().replace(/\W/g, '');
}
}
module.exports = Helpers;

View File

@@ -1,13 +1,11 @@
import Promise from "bluebird";
import TeamMembersModel from "../api/teams/team-members.model";
// const TeamRecordModel = require('../api/records/record.model');
const TeamRecordModel = require('../api/records/record.model');
import EmailAddressHasher from "./email-address-hasher";
import Helpers from "./helpers";
const TeamRecordSchema = require("../api/records/record.model");
class ResponseSaver {
insertUserResponse(userResponse){
@@ -15,54 +13,70 @@ class ResponseSaver {
return new Promise((resolve, reject) => {
/* Ensure that the input is of a valid format */
if (!ResponseSaver.checkInputIsValidJson(userResponse)){
/* Ensure that the input is of a valid format */
if (!ResponseSaver.checkInputIsValidJson(userResponse)) {
errorMessage = "Malformed input. Must be valid JSON.";
return reject(new TypeError(errorMessage));
}
/* Put input into valid format */
// userResponse = this.putInputIntoValidFormat(userResponse);
}
/* Put input into valid format */
// userResponse = this.putInputIntoValidFormat(userResponse);
resolve(userResponse);
})
.then((userResponse)=>{
return new Promise(( resolve, reject) => {
/* Check if user is part of a valid team*/
ResponseSaver.checkIfUserFoundInTeam( userResponse.emailHash).then(
(teamName)=> {
if(!teamName){ // User was not found in any team :(
errorMessage = "User cold not be found.";
return reject(new TypeError(errorMessage));
}
/* Check that the user has not yet responded already today */
ResponseSaver.checkIfUserAlreadySubmittedToday(userResponse.emailHash, teamName,
()=>{
console.log("Ready for the next stage....")
})
});
// TODO check user has not already responded today
// TODO update record with new response
// TODO return appropriate message
let teamUserResponse = {
teamName: "demo",
data: [
{
date: new Date(),
userResults: [ userResponse ]
}
]
};
const _userResponse = new TeamRecordSchema(teamUserResponse);
_userResponse.save((err, saved) => {
err ? reject(err)
: resolpve(saved);
ResponseSaver.checkIfUserFoundInTeam(userResponse.emailHash).then(
(teamName) => {
if (!teamName) { // User was not found in any team :(
errorMessage = "User cold not be found.";
return reject(new TypeError(errorMessage));
}
return resolve(teamName);
})
});
});
})
.then(
(teamName)=> {
return new Promise((resolve, reject) => {
/* Check that the user has not yet responded already today */
ResponseSaver.checkIfUserAlreadySubmittedToday(userResponse.emailHash, teamName).then(
(userNotYetSubmitted) => {
console.log("userNotYetSubmitted ", userNotYetSubmitted);
if(userNotYetSubmitted){
}
}
)
}
);
});
//
// // TODO check user has not already responded today
//
// // TODO update record with new response
//
// // TODO return appropriate message
//
// let teamUserResponse = {
// teamName: "demo",
// data: [
// {
// date: new Date(),
// userResults: [ userResponse ]
// }
// ]
// };
//
// const _userResponse = new TeamRecordSchema(teamUserResponse);
//
// _userResponse.save((err, saved) => {
// err ? reject(err)
// : resolpve(saved);
// });
}
/**
@@ -100,12 +114,9 @@ class ResponseSaver {
teams.forEach((team) => {
let teamName = team.teamName;
team.members.forEach((member) => {
console.log(EmailAddressHasher.makeHash(member.email) + ' comparing to ' + userHash);
console.log(EmailAddressHasher.checkEmailAgainstHash(member.email, userHash));
if (EmailAddressHasher.checkEmailAgainstHash(member.email, userHash)) {
console.log('user found');
resolve(teamName)
}
})
});
@@ -114,19 +125,35 @@ class ResponseSaver {
});
}
static checkIfUserAlreadySubmittedToday(userHash, teamName, cb){
/* Get today's date */
const today = Helpers.roundDate(new Date());
// console.log("====>", TeamRecordModel);
//
//
// TeamRecordModel.find({teamName: teamName}, function(err, teams) {
// if (err) throw err;
// const results = (teams.length > 0 ? teams[0] : {}); // always be's JSON
// console.log(results)
// });
cb()
}
static checkIfUserAlreadySubmittedToday(userHash, teamName){
return new Promise((resolve, reject) => {
/* Get today's date */
const today = Helpers.roundDate(new Date());
/* Make request */
const TeamRecordModel = require('../api/records/record.model');
TeamRecordModel.find({teamName: teamName}, function(err, teams) {
if (err) reject(err);
let teamData = (teams.length > 0 ? teams[0] : {}); // always be's JSON!
if(teamData.length > 1){ teamData = teamData[0]; }
if(Helpers.normaliseString(teamData.teamName) === Helpers.normaliseString(teamName)){
teamData.data.forEach((dateBlock)=>{
if( Helpers.isDateToday(dateBlock.date)) {
dateBlock.userResults.forEach((userResult) => {
if(userResult.userHash === userHash){ resolve(true);}
});
}
});
}
resolve(false)
});
});
}
}