Skip to content

Commit

Permalink
Merge pull request #23 from hnginternship5/master
Browse files Browse the repository at this point in the history
update
  • Loading branch information
IDTitanium committed May 16, 2019
2 parents b3db8de + acbdbdf commit 844d75d
Show file tree
Hide file tree
Showing 14 changed files with 582 additions and 782 deletions.
93 changes: 45 additions & 48 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
var mongoose = require('mongoose');
var createError = require('http-errors');
var express = require('express');
var exphbs = require('express-handlebars');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require('express-session');
var flash = require('connect-flash');
var MongoStore = require('connect-mongo')(session);
require('dotenv').config();
require('./schedule');
const passport = require('passport');
const fx = require('money');

var mongoose = require("mongoose");
var createError = require("http-errors");
var express = require("express");
var exphbs = require("express-handlebars");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
var session = require("express-session");
var flash = require("connect-flash");
var MongoStore = require("connect-mongo")(session);
require("dotenv").config();
require("./schedule");
const passport = require("passport");
const fx = require("money");

// The database setup
// we should probable store the url in .env for security reasons.
var databaseUrl =
'mongodb://job_alert_admin:#developerHNG1@ds135456.mlab.com:35456/job_alert_db';
"mongodb://job_alert_admin:#developerHNG1@ds135456.mlab.com:35456/job_alert_db";

// connect to database
mongoose.connect(databaseUrl, { useNewUrlParser: true }, function(err, client) {
if (err) console.log(err);
console.log('Connection passed');
console.log("Connection passed");
});

let db = mongoose.connection;

db.once('open', () => console.log('Connected to database'));
db.once("open", () => console.log("Connected to database"));

// checks if connection to db is a success
db.on('error', console.error.bind(console, 'Database connection error:'));
db.on("error", console.error.bind(console, "Database connection error:"));

var indexRouter = require('./routes/index');
var indexRouter = require("./routes/index");
// var usersRouter = require('./routes/users');

var app = express(); require('./config/passport')(passport); //pass passport for configuration
var app = express();
require("./config/passport")(passport); //pass passport for configuration

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set("views", path.join(__dirname, "views"));

app.engine('.hbs', exphbs({ defaultLayout: 'main', extname: '.hbs' }));
app.engine(".hbs", exphbs({ defaultLayout: "main", extname: ".hbs" }));

app.set('view engine', 'hbs');
app.set("view engine", "hbs");

app.use(logger('dev'));
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, "public")));

app.use(
session({
secret: 'dfgdhhahg15sdff',
secret: "dfgdhhahg15sdff",
saveUninitialized: false,
resave: true,
store: new MongoStore({
Expand All @@ -68,42 +68,39 @@ app.use(flash());

//locals
app.use(function(req, res, next) {
res.locals.success = req.flash('success');
res.locals.emailError = req.flash('emailError');
res.locals.errors = req.flash('errors');
res.locals.paymentError = req.flash('paymentError');
res.locals.payment = req.flash('payment');
res.locals.adminError = req.flash('adminError');
res.locals.adminSuccess = req.flash('adminSuccess');
res.locals.user = req.flash('user');
next();
res.locals.success = req.flash("success");
res.locals.emailError = req.flash("emailError");
res.locals.errors = req.flash("errors");
res.locals.paymentError = req.flash("paymentError");
res.locals.payment = req.flash("payment");
res.locals.adminError = req.flash("adminError");
res.locals.adminSuccess = req.flash("adminSuccess");
res.locals.user = req.flash("user");
next();
});


app.use('/', indexRouter);
app.use("/", indexRouter);
// app.use("/auth.js", authRouter);
// app.use('/users', usersRouter);





// catch 404 and forward to error handler
app.use(function(req, res, next) {
res.render('404');
res.render("404");
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {message:"An internal Server Error Occured. Try again later!"};
res.locals.error =
req.app.get("env") === "development"
? err
: { message: "An internal Server Error Occured. Try again later!" };

// render the error page
res.status(err.status || 500);
res.render('error');
res.render("error");
});



module.exports = app;
// export default passport;
// export default passport;
114 changes: 91 additions & 23 deletions controllers/controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const getData = async () => {
let title = element.title;
let company = element.company;
let url = title + ' ' + company;
let regex = /[\.\ \]\[\(\)\!\,\<\>\`\~\{\}\?\/\\\"\'\|\@\%\&\*]/g;
let regex = /[\.\ \]\[\(\)\!\,\<\>\`\~\{\}\?\/\\\"\:\'\|\@\%\&\*]/g;
let custom_url = url.toLowerCase().replace(regex, '-');
element.custom_url = custom_url;
});
Expand Down Expand Up @@ -234,28 +234,96 @@ const Jobs = {
}
else if(categories.includes(slug)) {
try {
let allCategoryJobs = [];
let formalSlug = slug.charAt(0).toUpperCase() + slug.slice(1);

//Same algo as above...
for (let i = 0; i < main.length; i++){
if (main[i].type == formalSlug || main[i].description.toLowerCase().includes(slug) ) {
allCategoryJobs.push(main[i]);
continue;
}
};

//Jobs with no images
allCategoryJobs.slice().map(function (job) {
job.company_logo = (!job.company_logo) ? "/images/no_job_image.jpg" : job.company_logo;
return job;
});
return res.status(200).render('jobCategory', {
name: formalSlug,
status: 'success',
TotalJobs: Object.keys(allCategoryJobs).length,
data: allCategoryJobs
});
//Refine the slugs for effective searching, remove the hyphens and capitalize each word
if (slug.includes('-')) {
let newSlug = slug.charAt(0).toUpperCase() + slug.slice(1);
let oldSlug = newSlug.split('-');
oldSlug[1] = oldSlug[1].charAt(0).toUpperCase() + oldSlug[1].slice(1);
var formalSlug = oldSlug.join(' ');
}
else {
var formalSlug = slug.charAt(0).toUpperCase() + slug.slice(1);
}

//Now Check if the query string has values
if (typeof req.query.tech == "undefined") {
let allCategoryJobs = [];


//Same algo as above...
for (let i = 0; i < main.length; i++){
if (main[i].type == formalSlug || main[i].description.toLowerCase().includes(slug) ) {
allCategoryJobs.push(main[i]);
continue;
}
};

//Jobs with no images
allCategoryJobs.slice().map(function (job) {
job.company_logo = (!job.company_logo) ? "/images/no_job_image.jpg" : job.company_logo;
return job;
});
return res.status(200).render('jobCategory', {
name: formalSlug,
status: 'success',
TotalJobs: Object.keys(allCategoryJobs).length,
data: allCategoryJobs
});
}
else {
//If it does not have values, grab the values
let query = req.query.tech;
let selectedTech = query.split('|');

let selectedJobs = [];
for (let j = 0; j<selectedTech.length; j++) {
//Perform search with reference to relative parameters and add additional params where necessary
switch (selectedTech[j]) {
case 'react':
selectedTech.push('reactjs','react.js');
break;
case 'node':
selectedTech.push('nodejs','node.js');
break;
case 'java':
selectedTech[j] = ' java ';
break;
case 'ios':
selectedTech[j] = ' ios ';
break;
case 'cplusplus':
selectedTech[j] = 'c++';
break;
case 'asp':
selectedTech[j] = ' asp ';
selectedTech.push('asp.net')
break;
default:
break;
}
//Search for jobs and add them to the selected jobs array
for (let i = 0; i < main.length; i++){
if (main[i].type == formalSlug && main[i].description.toLowerCase().includes(selectedTech[j]) && selectedJobs.includes(main[i]) == false ) {
selectedJobs.push(main[i]);
continue;
}
};
};
//Jobs with no images
selectedJobs.slice().map(function (job) {
job.company_logo = (!job.company_logo) ? "/images/no_job_image.jpg" : job.company_logo;
return job;
});

return res.status(200).render('jobCategory', {
name: formalSlug,
tech: selectedTech,
status: 'success',
TotalJobs: Object.keys(selectedJobs).length,
data: selectedJobs
});

}

} catch (error) {
return res.status(400).send(error);
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"passport-facebook": "^3.0.0",
"passport-google": "^0.3.0",
"passport-google-oauth": "^2.0.0",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"passport-strategy": "^1.0.0",
"paystack": "^2.0.1",
Expand Down
10 changes: 10 additions & 0 deletions routes/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var fbSession = require('passport-facebook');
var googleSess = require('passport-google-oauth');
var jwt = require('passport-jwt')
var authRouter = express.Router()


//Put all your code here


module.exports = authRouter;
4 changes: 4 additions & 0 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,10 @@ router.get("/jobs/:slug", Jobs.fetchSingle);
router.post("/jobs/:job_id", Jobs.update_job);
router.get("/jobs/:job_id/delete", Jobs.cancel_job);

router.get("/jobs/full-time/:tech", Jobs.fetchAllFullTimeSearchJobs);
router.get("/jobs/part-time/:tech", Jobs.fetchAllPartTimeSearchJobs);
router.get("/jobs/contract/:tech", Jobs.fetchAllContractSearchJobs);

// for registered users
router.post("/register_user", Jobs.create_registered_user);
router.post("/update_user/:_id", Jobs.update_registered_user);
Expand Down
38 changes: 29 additions & 9 deletions views/about.hbs
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
<head>
<title>DevAlert | About Us</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-139612600-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-139612600-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-139612600-1');
</script>
gtag('config', 'UA-139612600-1');
</script>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://res.cloudinary.com/ivory/image/upload/v1558011480/Alternate_Logo_1.png"/>
<meta name="keywords"
content="Remote-jobs, Remote, DevAlert, developer-jobs, developer, programmer, software-engineer, engineer, tech" />
<meta name="description"
content="Devalert is a remote job platform that connects developers to remote jobs. It gives developers the access to remote jobs in the world, effective Telecommuting skills and building a better remote platform for all developers." />
<style>
#about {
padding: 15px 5px;
Expand Down Expand Up @@ -62,6 +69,19 @@
</head>
{{> header}}
<div id="about" class="container">
{{!-- Bread crumb --}}
<div class="row">
<div class="col-12">
<div class=" my-4 shadow-sm">
<nav aria-label="breadcrumb">
<ol class="breadcrumb bg-white br-0">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item" aria-current="page">About us</li>
</ol>
</nav>
</div>
</div>
</div>

<h1>About us</h1>

Expand All @@ -87,4 +107,4 @@
</div>
<br>
</div>
{{> footer}}
{{> footer}}
Loading

0 comments on commit 844d75d

Please sign in to comment.