-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
147 lines (134 loc) · 3.59 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
const express = require("express");
const app = express();
const path = require("path");
const { open } = require("sqlite");
const sqlite3 = require("sqlite3");
app.use(express.json());
let db = null;
let dbPath = path.join(__dirname, "moviesData.db");
const initializeDbAndServer = async () => {
try {
db = await open({
filename: dbPath,
driver: sqlite3.Database,
});
app.listen(3000, () => {
console.log("The Server is running at http://localhost:3000/");
});
} catch (e) {
console.log(`DB Error : ${e.message}`);
process.exit(1);
}
};
initializeDbAndServer();
//get all movie names from movie table
app.get("/movies/", async (request, response) => {
const getMoviesQuery = `
SELECT
*
FROM
movie;`;
const movieNamesArray = await db.all(getMoviesQuery);
const getOnlyNames = (dbObject) => {
return {
movieName: dbObject.movie_name,
};
};
response.send(movieNamesArray.map((eachMovie) => getOnlyNames(eachMovie)));
});
//create a new movie in movie table
app.post("/movies/", async (request, response) => {
const movieDetails = request.body;
const { directorId, movieName, leadActor } = movieDetails;
const newMovieQuery = `
INSERT INTO
movie (director_id, movie_name, lead_actor)
VALUES (
${directorId},
'${movieName}',
'${leadActor}'
)`;
const dbResponse = await db.run(newMovieQuery);
response.send("Movie Successfully Added");
});
//get a movie based on movie_id
app.get("/movies/:movieId/", async (request, response) => {
const { movieId } = request.params;
const getMovieQuery = `
SELECT
*
FROM
movie
WHERE
movie_id = ${movieId};`;
const Movie = await db.get(getMovieQuery);
const getDBMovie = (newMovie) => {
return {
movieId: newMovie.movie_id,
directorId: newMovie.director_id,
movieName: newMovie.movie_name,
leadActor: newMovie.lead_actor,
};
};
response.send(getDBMovie(Movie));
});
//update a movie based on movie_id
app.put("/movies/:movieId/", async (request, response) => {
const { movieId } = request.params;
const movieBody = request.body;
const { directorId, movieName, leadActor } = movieBody;
const updateQuery = `
UPDATE
movie
SET
director_id = ${directorId},
movie_name='${movieName}',
lead_actor = '${leadActor}'
WHERE
movie_id = ${movieId};`;
const updateMovie = await db.run(updateQuery);
response.send("Movie Details Updated");
});
//delete a movie based on movie_id
app.delete("/movies/:movieId/", async (request, response) => {
const { movieId } = request.params;
const deleteQuery = `
DELETE FROM
movie
WHERE
movie_id=${movieId};`;
await db.run(deleteQuery);
response.send("Movie Removed");
});
//get all directors
app.get("/directors/", async (request, response) => {
const directorsQuery = `
SELECT
*
FROM
director;`;
const directorsArray = await db.all(directorsQuery);
const getAllResponse = (eachArray) => {
return {
directorId: eachArray.director_id,
directorName: eachArray.director_name,
};
};
response.send(directorsArray.map((eachArray) => getAllResponse(eachArray)));
});
//get list of movie names by director_id
app.get("/directors/:directorId/movies/", async (request, response) => {
const { directorId } = request.params;
const getDirectorMoviesQuery = `
SELECT
movie_name
FROM
movie
WHERE
director_id = '${directorId}';`;
const moviesArray = await db.all(getDirectorMoviesQuery);
response.send(
moviesArray.map((eachMovie) => ({ movieName: eachMovie.movie_name }))
);
});
module.exports = app;