quiz init commit
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
'use strict';
|
||||
|
||||
const ValidationService = require('../../services/ValidationService')
|
||||
const AuthService = require('../../services/AuthService');
|
||||
const JWTService = require('../../services/JwtService');
|
||||
const SessionService = require('../../services/SessionService');
|
||||
const PasswordService = require('../../services/PasswordService');
|
||||
const db = require("../../models");
|
||||
const helpers = require("../../core/helpers");
|
||||
const { validateEmail } = require('../../core/utils');
|
||||
const app = require('express').Router();
|
||||
|
||||
const role_id= 2
|
||||
|
||||
app.get("/member/profile", SessionService.verifySessionMiddleware(role_id, "member"),
|
||||
|
||||
|
||||
|
||||
async function (
|
||||
req,
|
||||
res,
|
||||
next
|
||||
) {
|
||||
const user = await db.user.getByPK(req.session.user);
|
||||
const id = user.id;
|
||||
|
||||
const AuthViewModel = require("../../view_models/member_auth_view_model")
|
||||
|
||||
const viewModel = new AuthViewModel(db.user,"Profile")
|
||||
|
||||
viewModel._base_url = '/member/profile'
|
||||
|
||||
if(!user || !user.id){
|
||||
viewModel.error = "User Not Found"
|
||||
return res.render("member/Profile", viewModel)
|
||||
}
|
||||
if (req.session.csrf === undefined) {
|
||||
req.session.csrf = SessionService.randomString(100);
|
||||
}
|
||||
|
||||
try{
|
||||
// TODO: make this responsive with no joins as well
|
||||
const exists = await db.user.get_user_credential(id, db);
|
||||
|
||||
if(!exists || +exists.status === 0){
|
||||
viewModel.error = "Profile Not Found";
|
||||
return res.render("member/Profile", viewModel);
|
||||
}
|
||||
|
||||
const values = exists;
|
||||
Object.keys(viewModel.form_fields).forEach((field) => {
|
||||
if (field === 'credential.email') {
|
||||
viewModel.form_fields[field] = values["credential"]["email"];
|
||||
return;
|
||||
}
|
||||
if (field === 'credential.password') {
|
||||
viewModel.form_fields[field] = values["credential"]["password"];
|
||||
return;
|
||||
}
|
||||
viewModel.form_fields[field] = values[field];
|
||||
});
|
||||
viewModel.credential = db.credential
|
||||
|
||||
return res.render("member/Profile",viewModel)
|
||||
} catch(error){
|
||||
viewModel.error = "Something went wrong"
|
||||
return res.render("member/Profile", viewModel)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
app.post(
|
||||
'/member/profile',
|
||||
|
||||
|
||||
|
||||
SessionService.verifySessionMiddleware(role_id, 'member'),
|
||||
|
||||
async function (req, res, next) {
|
||||
let UserRef;
|
||||
let CredentialRef;
|
||||
|
||||
let User;
|
||||
let Credential;
|
||||
|
||||
const user = await db.user.getByPK(req.session.user);
|
||||
|
||||
const AuthViewModel = require('../../view_models/member_auth_view_model');
|
||||
|
||||
const viewModel = new AuthViewModel(db.user,"Profile")
|
||||
viewModel._base_url = '/member/profile'
|
||||
|
||||
|
||||
if (!user || !user.id) {
|
||||
viewModel.error = 'User Not Found';
|
||||
return res.render('member/Profile', viewModel);
|
||||
}
|
||||
|
||||
if (req.session.csrf === undefined) {
|
||||
req.session.csrf = SessionService.randomString(100);
|
||||
}
|
||||
|
||||
const { first_name,last_name,credential_email,credential_password,status } = req.body;
|
||||
|
||||
var credentialFields = {
|
||||
'email': credential_email,'password': credential_password
|
||||
};
|
||||
|
||||
viewModel.form_fields = {
|
||||
...viewModel.form_fields,
|
||||
first_name,last_name,'credential.email': credential_email,'credential.password': credential_password,status
|
||||
};
|
||||
|
||||
|
||||
delete credentialFields.password;
|
||||
delete viewModel.form_fields['credential.password'];
|
||||
|
||||
if(credential_password && credential_password !== "" && credential_password !== null && credential_password !== undefined){
|
||||
credentialFields.password = credential_password;
|
||||
}
|
||||
|
||||
try {
|
||||
if (req.validationError) {
|
||||
viewModel.error = req.validationError;
|
||||
return res.render('member/Profile', viewModel);
|
||||
}
|
||||
|
||||
CredentialRef = await db.credential.getByFields({
|
||||
user_id: user.id,
|
||||
status: 1,
|
||||
type: 0,
|
||||
});
|
||||
|
||||
if (!CredentialRef) throw new Error('Email Address Not Found');
|
||||
|
||||
const credentialType = CredentialRef.type;
|
||||
|
||||
UserRef = await db.user.getByFields({
|
||||
id: user.id,
|
||||
status: 1,
|
||||
});
|
||||
|
||||
if (!UserRef) throw new Error('Email Address Not Found');
|
||||
|
||||
if (credentialType == 0 && Object.entries(credentialFields).length > 0) {
|
||||
if(credentialFields.email){
|
||||
if (!validateEmail(credentialFields.email)) {
|
||||
viewModel.error = 'Invalid email';
|
||||
return res.render('member/Profile', viewModel);
|
||||
}
|
||||
|
||||
if (CredentialRef.email !== credentialFields.email) {
|
||||
const userExists = await db.credential.getByField('email', credentialFields.email);
|
||||
if (userExists) {
|
||||
throw new Error('Email Address Already Exists');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (credentialFields.password) {
|
||||
credentialFields.password = await PasswordService.hash(credentialFields.password);
|
||||
}
|
||||
|
||||
Credential = await db.credential.edit(
|
||||
credentialFields,
|
||||
CredentialRef.id,
|
||||
);
|
||||
|
||||
}
|
||||
User = await db.user.edit(
|
||||
{
|
||||
first_name,last_name,status
|
||||
},
|
||||
UserRef.id,
|
||||
);
|
||||
|
||||
viewModel.success = 'Profile Updated Successfully';
|
||||
return res.render('member/Profile', viewModel);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
try {
|
||||
if (Credential && CredentialRef) {
|
||||
await db.credential.edit(
|
||||
credentialFields,
|
||||
CredentialRef.id,
|
||||
);
|
||||
}
|
||||
viewModel.error = error.message || "Something went wrong"
|
||||
return res.render('member/Profile', viewModel);
|
||||
} catch (error_2) {}
|
||||
viewModel.error = error_2.message || "Something went wrong"
|
||||
return res.render('member/Profile', viewModel);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
module.exports = app;
|
||||
Reference in New Issue
Block a user