forked from lucaspatenaude/ScoreSpot
164 lines
5.4 KiB
JavaScript
164 lines
5.4 KiB
JavaScript
// *****************************************************
|
|
// <!-- Section 1 : Import Dependencies -->
|
|
// *****************************************************
|
|
|
|
const express = require("express"); // To build an application server or API
|
|
const app = express();
|
|
const handlebars = require("express-handlebars");
|
|
const Handlebars = require("handlebars");
|
|
const path = require("path");
|
|
const bodyParser = require("body-parser");
|
|
const session = require("express-session"); // To set the session object. To store or access session data, use the `req.session`, which is (generally) serialized as JSON by the store.
|
|
const bcrypt = require("bcryptjs"); // To hash passwords
|
|
const axios = require("axios"); // To make HTTP requests from our server. We'll learn more about it in Part C.
|
|
const moment = require("moment"); // To extract current time data
|
|
|
|
// *****************************************************
|
|
// <!-- Section 2 : Connect to DB -->
|
|
// *****************************************************
|
|
|
|
// Start the Database
|
|
const db = require("./database/db"); // Import the db module
|
|
|
|
// *****************************************************
|
|
// <!-- Section 3 : Handlebars COnfiguration -->
|
|
// *****************************************************
|
|
|
|
// express-handlebars is a Handlebars view engine for Express. Handlebars.js is a popular templating engine that is powerful, flexible, and helps to create reusable HTML templates.
|
|
const hbs = require("./config/handlebars"); // Import the hbs module
|
|
|
|
// Register `hbs` as our view engine using its bound `engine()` function.
|
|
app.engine("hbs", hbs.engine);
|
|
app.set("view engine", "hbs");
|
|
app.set("views", path.join(__dirname, "../public/views"));
|
|
app.use(express.static(path.join(__dirname, "../public/assets"))); // Serve asset files from the 'public/assets' directory
|
|
app.use(bodyParser.json()); // specify the usage of JSON for parsing request body.
|
|
|
|
// *****************************************************
|
|
// <!-- Section 4 : Session Setup -->
|
|
// *****************************************************
|
|
|
|
const sessionConfig = require("./config/session"); // Import the hbs module
|
|
sessionConfig(app);
|
|
|
|
// *****************************************************
|
|
// <!-- Section 5 : Website Routes -->
|
|
// *****************************************************
|
|
|
|
// *****************************************************
|
|
// <!-- Section 4 : Middleware -->
|
|
// *****************************************************
|
|
|
|
// Middleware to automatically update live scoreboard
|
|
const fetchMatchesData = require("./middleware/navigation-bar/current-match-information");
|
|
app.use(fetchMatchesData);
|
|
|
|
//Middleware to automatically update in-game time abbreviations
|
|
|
|
const convert_time = require("./middleware/navigation-bar/convert-time");
|
|
app.use(convert_time);
|
|
|
|
// Other middleware and route imports
|
|
const leagueRoutes = require("./routes/league-pages/league-routes");
|
|
leagueRoutes(app);
|
|
|
|
// Clubs Page Middleware
|
|
|
|
const fetchClubsData = require("./middleware/clubs-page/get-current-club-information");
|
|
|
|
app.get("/club/:clubID", [fetchClubsData], (req, res) => {
|
|
// Render the Handlebars view with league data
|
|
|
|
var isFav = false;
|
|
var fav_teams = res.locals.fav_teams;
|
|
if (res.locals.user && fav_teams) {
|
|
const isTeamIDInFavTeams = fav_teams.some((team) => {
|
|
const teamIdInt = parseInt(team.teamid);
|
|
const clubIdInt = parseInt(req.params.clubID);
|
|
console.log("Checking team:", teamIdInt);
|
|
console.log("equal to", clubIdInt);
|
|
return teamIdInt === clubIdInt;
|
|
});
|
|
if (isTeamIDInFavTeams) {
|
|
isFav = true;
|
|
}
|
|
}
|
|
res.render("pages/clubs-page", {
|
|
isFav: isFav,
|
|
clubID: req.params.clubID,
|
|
clubs: res.locals.club,
|
|
});
|
|
});
|
|
|
|
// *****************************************************
|
|
// <!-- Section 5 : Routes -->
|
|
// *****************************************************
|
|
|
|
/************************
|
|
Home Page Routes
|
|
*************************/
|
|
|
|
// Redirect to the home page
|
|
app.get("/", (req, res) => {
|
|
res.redirect("/home");
|
|
});
|
|
|
|
// Render the home page
|
|
app.get("/home", (req, res) => {
|
|
const loggedIn = req.session.user ? true : false;
|
|
res.render("pages/home");
|
|
});
|
|
|
|
/************************
|
|
Login Page Routes
|
|
*************************/
|
|
|
|
// Account Routes
|
|
const loginRoutes = require("./routes/account/login");
|
|
app.use("/", loginRoutes);
|
|
|
|
/************************
|
|
Registration Page Routes
|
|
*************************/
|
|
|
|
// Account Routes
|
|
const registerRoutes = require("./routes/account/register");
|
|
app.use("/", registerRoutes);
|
|
|
|
/************************
|
|
Logout Route
|
|
*************************/
|
|
|
|
const logoutRoute = require("./routes/account/logout");
|
|
app.use("/", logoutRoute);
|
|
|
|
/************************
|
|
League Page Routes
|
|
*************************/
|
|
|
|
// Import and call generateLeagueRoutes function
|
|
const generateLeagueRoutes = require("./routes/league-pages/generate-league-routes");
|
|
generateLeagueRoutes(app);
|
|
|
|
/************************
|
|
Club Page Routes
|
|
*************************/
|
|
|
|
// Import and call generateLeagueRoutes function
|
|
const generateClubRoutes = require("./routes/club-pages/generate-club-routes");
|
|
generateClubRoutes(app);
|
|
|
|
/************************
|
|
Favorite Team Database
|
|
*************************/
|
|
|
|
const databaseRoutes = require("./routes/database/database-routes").router;
|
|
app.use("/", databaseRoutes);
|
|
|
|
// *****************************************************
|
|
// <!-- Section 6 : Export the App Module to Index.js -->
|
|
// *****************************************************
|
|
|
|
// Export the app object to index.js
|
|
module.exports = app;
|