Files
JellySport/src/app.js

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;