Skip to content

Commit

Permalink
day 09
Browse files Browse the repository at this point in the history
  • Loading branch information
serinryu authored and serinryu committed Jan 24, 2022
1 parent d0824a9 commit b302c54
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 5 deletions.
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Expand Up @@ -11,6 +11,7 @@
"license": "ISC",
"dependencies": {
"axios": "^0.25.0",
"body-parser": "^1.19.1",
"dotenv": "^14.2.0",
"express": "^4.17.2",
"mongoose": "^5.13.14",
Expand Down
35 changes: 32 additions & 3 deletions src/controllers/movieController.js
Expand Up @@ -2,7 +2,8 @@ import {
getMovieById,
getMovies,
getMovieByMinimumRating,
getMovieByMinimumYear
getMovieByMinimumYear,
addMovie
} from "../db.js";

export const home = (req, res) => {
Expand All @@ -15,7 +16,11 @@ export const movieDetail = (req, res) => {
params: { id }
} = req;
const movie = getMovieById(id);
return res.render("movies/detail.pug", {pageTitle: movie.title, movie })
try{
return res.render("movies/detail.pug", {pageTitle: movie.title, movie })
} catch(error) {
return res.send("error")
}
};

export const filterMovie = (req, res) => {
Expand All @@ -32,4 +37,28 @@ export const filterMovie = (req, res) => {
} ${both} ${rating === "" ? "" : `rating: ${rating}`}`;
console.log(getyearMovies)
return res.render("movies/home", { pageTitle, movies });
};
};

export const getAdd = (req, res) => {
return res.render("movies/add", { pageTitle: "Add Movie"})
}

export const postAdd = (req, res) => {
const { body : {
title,
synopsis,
genres
}} = req;
const newMovie = {
title,
synopsis,
genres : formatGenres(genres)
};
addMovie(newMovie);
const movies = getMovies();
return res.redirect("/");
}

export const formatGenres = (genres) => {
return genres.split(",").map((genre) => genre.trim());
}
19 changes: 19 additions & 0 deletions src/db.js
Expand Up @@ -47,3 +47,22 @@ export const getMovieByMinimumRating = (rating) => {
}
return movies.filter((m) => m.rating >= rating);
};

/*
This adds a movie to the DB.
Only ONE required argument, it should be an object containing
title: string;
synopsis: string;
genres: Array of strings;
*/

export const addMovie = ({ title, synopsis, genres }) => {
if (typeof title !== "string" || typeof synopsis !== "string") {
throw Error("❌ title and synopsis should be strings ❌");
}
if (!genres instanceof Array) {
throw Error("❌ genres should be an array ❌");
}
const id = Math.floor(Math.random() * (title.length + Date.now()));
movies = [{ id, title, synopsis, genres }, ...movies];
};
3 changes: 2 additions & 1 deletion src/routers/movieRouter.js
@@ -1,10 +1,11 @@
import express from "express";
import { home, movieDetail, filterMovie } from "../controllers/movieController.js";
import { home, movieDetail, filterMovie, getAdd, postAdd } from "../controllers/movieController.js";

const movieRouter = express.Router();

movieRouter.get("/", home);
movieRouter.get("/filter", filterMovie);
movieRouter.route("/add").get(getAdd).post(postAdd);
movieRouter.get("/:id", movieDetail);

export default movieRouter;
2 changes: 2 additions & 0 deletions src/server.js
Expand Up @@ -12,6 +12,8 @@ const app = express();
app.set("view engine", "pug");
app.set("views", process.cwd() + "/src/views");

app.use(express.urlencoded({extended:true}));

//middleware
app.use(urlLogger);
app.use(timeLogger);
Expand Down
3 changes: 3 additions & 0 deletions src/views/movies/add.pug
@@ -0,0 +1,3 @@
extends ../layout.pug
block content
include ../partials/addForm.pug
2 changes: 1 addition & 1 deletion src/views/movies/detail.pug
@@ -1,6 +1,6 @@
extends ../layout.pug
block content
p=movie.description_full
p=movie.synopsis
ul
each genre in movie.genres
li
Expand Down
5 changes: 5 additions & 0 deletions src/views/partials/addForm.pug
@@ -0,0 +1,5 @@
form(action="/add",method="POST")
input(type="text", placeholder="Title", name="title",required)
textarea(placeholder="Synopsis", name="synopsis",required)
input(type="text", placeholder="Genres", name="genres",required)
input(type="submit", value="Add Movie")
5 changes: 5 additions & 0 deletions src/views/partials/header.pug
@@ -1,2 +1,7 @@
header
ul
li
a(href="/") Home
li
a(href="/add") Add
h1=pageTitle

0 comments on commit b302c54

Please sign in to comment.