diff --git a/client/src/components/Movies.tsx b/client/src/components/Movies.tsx index 84cf31938a74f0ed58a171a156066df351514f26..31db9129293e91ab7e569b7ecaad6e01f559659e 100644 --- a/client/src/components/Movies.tsx +++ b/client/src/components/Movies.tsx @@ -40,7 +40,7 @@ function Movies(props: MoviesProps){ }) } - // returns movies by given field + // returns movies by given field (Abbasj:This method became retired by other students in last week!) function getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) { services.queryFetch(services.generateQuery(columnType, value, neededData)) .then(res => res.json()) @@ -54,6 +54,7 @@ function Movies(props: MoviesProps){ pageStart={0} loadMore={() => { if (MoviesStore.hasMore){ + if(MoviesStore.movies.length ) getAllMovies({ lim: MoviesStore.movies.length + 13 }) } }} diff --git a/server/package-lock.json b/server/package-lock.json index b53a57b0a877a2cadfd9ad385aa54c9826b8e06b..20d32c75d3492dc4c5532d06fef69b220947845e 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -5528,6 +5528,11 @@ "is-obj": "^2.0.0" } }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, "dotenv-expand": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", diff --git a/server/package.json b/server/package.json index 4204a5cfbe3e6c691294afcf5003251e4c8ba351..5e2cb5495f5fdefe367e924c7556eec696a6ddfd 100644 --- a/server/package.json +++ b/server/package.json @@ -27,7 +27,7 @@ "web-vitals": "^1.1.2" }, "scripts": { - "start": "forever start src/server.js", + "start": "nodemon src/server_local.ts --exec ts-node", "build": "tsc src/server.ts", "test": "react-scripts test", "eject": "react-scripts eject" @@ -53,4 +53,4 @@ "devDependencies": { "@types/cors": "^2.8.12" } -} \ No newline at end of file +} diff --git a/server/src/database.ts b/server/src/database.ts index b34bf45a8edf087016e326da43b95e452589d1ba..20ab60f7eec79f946e2f16d6e0735c42c96148b7 100644 --- a/server/src/database.ts +++ b/server/src/database.ts @@ -1,13 +1,28 @@ import { createPool , Pool} from "mysql2/promise"; -export async function connect(): Promise<Pool>{ - const connection = createPool({ - host: "mysql.ansatt.ntnu.no", - user: 'abbasj_abbas', - password: 'abbas2021', - database: 'abbasj_project3', - connectionLimit: 10 - }) - - return connection; +var _connection = connect(); + + + async function connect(): Promise<Pool>{ + + if(typeof(_connection) === "undefined"){ + + const connection = createPool({ + host: "mysql.ansatt.ntnu.no", + user: 'abbasj_abbas', + password: 'abbas2021', + database: 'abbasj_project3', + connectionLimit: 20 + }) + + return connection; + } + + return _connection; + } + + +export async function sendQuery(query: string){ + return (await _connection).query(query); +} \ No newline at end of file diff --git a/server/src/server.ts b/server/src/server.ts index ec2f974f9c15edbb3370c433b6ba0527134e19fe..e0c7836ad39ec2d90672c5b765927bb9148757e4 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -3,7 +3,7 @@ var express = require('express'); var { graphqlHTTP } = require('express-graphql'); var { GraphQLObjectType, GraphQLSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql'); -import {connect} from "./database" +import {sendQuery} from "./database" import * as cors from 'cors'; const MovieType = new GraphQLObjectType({ @@ -31,8 +31,7 @@ const RootQuery = new GraphQLObjectType({ lim: {type: GraphQLInt} }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('SELECT * FROM movie LIMIT '+args.lim); + const response = await sendQuery('SELECT * FROM movie LIMIT '+args.lim); return response[0]; } }, @@ -49,7 +48,6 @@ const RootQuery = new GraphQLObjectType({ description: { type: GraphQLString }, }, async resolve(parent: any, args: any) { - const connection = await connect(); let query = ''; if(typeof args.id!='undefined' && args.id){query = getQuery('id' , args.id)} else if(typeof args.title!='undefined' && args.title){query = getQuery('title' , args.title)} @@ -60,7 +58,7 @@ const RootQuery = new GraphQLObjectType({ else if(typeof args.director_last_name!='undefined' && args.director_last_name){query = getQuery('director_last_name' , args.director_last_name)} else if(typeof args.description!='undefined' && args.description){query = getQuery('description' , args.description)} - const response = await connection.query(query); + const response = await sendQuery(query); return response[0]; } }, @@ -76,12 +74,11 @@ const RootQuery = new GraphQLObjectType({ order: {type: GraphQLBoolean} }, async resolve(parent: any, args: any) { - const connection = await connect(); let query = ''; if(typeof args.title!='undefined' && typeof args.genre!='undefined'){ console.log("resolve") query = getSearchQuery(args.title, args.genre, args.order)} - const response = await connection.query(query); + const response = await sendQuery(query); return response[0]; } } @@ -132,8 +129,7 @@ const Mutation = new GraphQLObjectType({ cover_image: { type: GraphQLString } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('INSERT INTO movie VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [args.id, args.title, args.genre, args.rating_dice_throw, args.year, args.director_first_name, args.director_last_name, args.description, args.cover_image]); + const response = await sendQuery('INSERT INTO movie VALUES ({$args.id}, {$args.title}, {$args.genre}, {$args.rating_dice_throw}, {$args.year}, {$args.director_first_name}, {$args.director_last_name}, {$args.description}, {$args.cover_image})'); return response[0]; } }, @@ -143,8 +139,7 @@ const Mutation = new GraphQLObjectType({ id: {type: GraphQLInt} }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('DELETE FROM movie WHERE id = ?', [args.id]); + const response = await sendQuery('DELETE FROM movie WHERE id = {$args.id}'); return response[0]; } }, @@ -162,8 +157,7 @@ const Mutation = new GraphQLObjectType({ cover_image: { type: GraphQLString } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('UPDATE movie SET title = ?, genre = ?, rating_dice_throw = ?, year = ?, director_first_name = ?, director_last_name = ? , description = ?, cover_image = ? WHERE id = ?', [args.title, args.genre, args.rating_dice_throw, args.year, args.director_first_name, args.director_last_name, args.description, args.cover_image, args.id]); + const response = await sendQuery('UPDATE movie SET title = {$args.title}, genre = {$args.genre}, rating_dice_throw = {$args.rating_dice_throw}, year = {$args.year}, director_first_name = {$args.director_first_name}, director_last_name = {$args.director_last_name} , description = {$args.description}, cover_image = {$args.cover_image} WHERE id = {$args.id}'); return response[0]; } }, @@ -174,8 +168,7 @@ const Mutation = new GraphQLObjectType({ rating_dice_throw: { type: GraphQLInt } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('UPDATE movie SET rating_dice_throw = ? WHERE id = ?', [args.genre, args.id]); + const response = await sendQuery('UPDATE movie SET rating_dice_throw = {$args.rating_dice_throw} WHERE id = {$args.id}'); return response[0]; } } diff --git a/server/src/server_local.ts b/server/src/server_local.ts index 319f68e4574ef356938ddc62a1c6b5ff5f4c6ec2..8cb7f6ad365a869ebcfab38adba0d52c269b3b26 100644 --- a/server/src/server_local.ts +++ b/server/src/server_local.ts @@ -3,7 +3,7 @@ var express = require('express'); var { graphqlHTTP } = require('express-graphql'); var { GraphQLObjectType, GraphQLSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql'); -import {connect} from "./database" +import {sendQuery} from "./database" const MovieType = new GraphQLObjectType({ name: "Movie", @@ -30,8 +30,7 @@ const RootQuery = new GraphQLObjectType({ lim: {type: GraphQLInt} }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('SELECT * FROM movie LIMIT '+args.lim); + const response = await sendQuery('SELECT * FROM movie LIMIT '+args.lim); return response[0]; } }, @@ -48,7 +47,6 @@ const RootQuery = new GraphQLObjectType({ description: { type: GraphQLString }, }, async resolve(parent: any, args: any) { - const connection = await connect(); let query = ''; if(typeof args.id!='undefined' && args.id){query = getQuery('id' , args.id)} else if(typeof args.title!='undefined' && args.title){query = getQuery('title' , args.title)} @@ -59,7 +57,7 @@ const RootQuery = new GraphQLObjectType({ else if(typeof args.director_last_name!='undefined' && args.director_last_name){query = getQuery('director_last_name' , args.director_last_name)} else if(typeof args.description!='undefined' && args.description){query = getQuery('description' , args.description)} - const response = await connection.query(query); + const response = await sendQuery(query); return response[0]; } }, @@ -75,12 +73,11 @@ const RootQuery = new GraphQLObjectType({ order: {type: GraphQLBoolean} }, async resolve(parent: any, args: any) { - const connection = await connect(); let query = ''; if(typeof args.title!='undefined' && typeof args.genre!='undefined'){ console.log("resolve") query = getSearchQuery(args.title, args.genre, args.order)} - const response = await connection.query(query); + const response = await sendQuery(query); return response[0]; } } @@ -130,8 +127,7 @@ const Mutation = new GraphQLObjectType({ cover_image: { type: GraphQLString } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('INSERT INTO movie VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [args.id, args.title, args.genre, args.rating_dice_throw, args.year, args.director_first_name, args.director_last_name, args.description, args.cover_image]); + const response = await sendQuery('INSERT INTO movie VALUES ({$args.id}, {$args.title}, {$args.genre}, {$args.rating_dice_throw}, {$args.year}, {$args.director_first_name}, {$args.director_last_name}, {$args.description}, {$args.cover_image})'); return response[0]; } }, @@ -141,8 +137,7 @@ const Mutation = new GraphQLObjectType({ id: {type: GraphQLInt} }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('DELETE FROM movie WHERE id = ?', [args.id]); + const response = await sendQuery('DELETE FROM movie WHERE id = {$args.id}'); return response[0]; } }, @@ -160,8 +155,7 @@ const Mutation = new GraphQLObjectType({ cover_image: { type: GraphQLString } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('UPDATE movie SET title = ?, genre = ?, rating_dice_throw = ?, year = ?, director_first_name = ?, director_last_name = ? , description = ?, cover_image = ? WHERE id = ?', [args.title, args.genre, args.rating_dice_throw, args.year, args.director_first_name, args.director_last_name, args.description, args.cover_image, args.id]); + const response = await sendQuery('UPDATE movie SET title = {$args.title}, genre = {$args.genre}, rating_dice_throw = {$args.rating_dice_throw}, year = {$args.year}, director_first_name = {$args.director_first_name}, director_last_name = {$args.director_last_name} , description = {$args.description}, cover_image = {$args.cover_image} WHERE id = {$args.id}'); return response[0]; } }, @@ -172,8 +166,7 @@ const Mutation = new GraphQLObjectType({ rating_dice_throw: { type: GraphQLInt } }, async resolve(parent: any, args: any) { - const connection = await connect(); - const response = await connection.query('UPDATE movie SET rating_dice_throw = ? WHERE id = ?', [args.genre, args.id]); + const response = await sendQuery('UPDATE movie SET rating_dice_throw = {$args.rating_dice_throw} WHERE id = {$args.id}'); return response[0]; } }