/* Modules */ require('dotenv').config() const path = require('path') const express = require('express') const helmet = require('helmet') const cors = require('cors') const morgan = require('morgan') const redirectToHTTPS = require('express-http-to-https').redirectToHTTPS /* Files Imports & Variables */ const sequelize = require('./assets/utils/database') const { PORT } = require('./assets/config/config') const errorHandling = require('./assets/utils/errorHandling') const isAuth = require('./middlewares/isAuth') const isAdmin = require('./middlewares/isAdmin') const app = express() /* Middlewares */ app.use(helmet()) app.use(cors()) app.use(morgan('dev')) app.use(express.json()) app.use(redirectToHTTPS([/localhost:(\d{4})/])) /* Routes */ app.use('/images', express.static(path.join(__dirname, 'assets', 'images'))) app.use('/functions', require('./routes/functions')) app.use('/categories', require('./routes/categories')) app.use('/users', require('./routes/users')) app.use('/admin', isAuth, isAdmin, require('./routes/admin')) app.use('/favorites', require('./routes/favorites')) app.use('/comments', require('./routes/comments')) app.use('/quotes', require('./routes/quotes')) app.use('/tasks', require('./routes/tasks')) /* Errors Handling */ app.use((_req, _res, next) => errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })) // 404 app.use((error, _req, res, _next) => { console.log(error) const { statusCode, message } = error return res.status(statusCode || 500).json({ message }) }) /* Database Relations */ const Functions = require('./models/functions') const Categories = require('./models/categories') const Users = require('./models/users') const Favorites = require('./models/favorites') const Comments = require('./models/comments') const Quotes = require('./models/quotes') const Tasks = require('./models/tasks') // A function has a category Categories.hasOne(Functions, { constraints: true, onDelete: 'CASCADE' }) Functions.belongsTo(Categories) // Users can have favorites functions Users.hasMany(Favorites) Favorites.belongsTo(Users, { constraints: false }) Functions.hasMany(Favorites) Favorites.belongsTo(Functions, { constraints: false }) // Users can post comments on functions Users.hasMany(Comments) Comments.belongsTo(Users, { constraints: false }) Functions.hasMany(Comments) Comments.belongsTo(Functions, { constraints: false }) // Users can suggest new quotes Users.hasMany(Quotes) Quotes.belongsTo(Users, { constraints: false }) // Users can have tasks Users.hasMany(Tasks) Tasks.belongsTo(Users, { constraints: false }) /* Server */ // sequelize.sync({ force: true }) sequelize.sync() .then(() => { app.listen(PORT, () => console.log('\x1b[36m%s\x1b[0m', `Started on port ${PORT}.`)) }) .catch((error) => console.log(error))