Skip to content
Snippets Groups Projects
Commit bb6ff715 authored by Abbas Jafari's avatar Abbas Jafari :speech_balloon:
Browse files

Merge branch 'deployment_test' into 'master'

Merged all recent changes

See merge request it2810-h21/team-54/project-3!10
parents e3acc713 b3c9f191
No related branches found
No related tags found
No related merge requests found
...@@ -26,7 +26,7 @@ yarn-debug.log* ...@@ -26,7 +26,7 @@ yarn-debug.log*
yarn-error.log* yarn-error.log*
/.vscode /.vscode
.idea/
#env variables #env variables
.env .env
......
...@@ -2364,6 +2364,15 @@ ...@@ -2364,6 +2364,15 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"@types/react-infinite-scroller": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.2.tgz",
"integrity": "sha512-3Tu/wspMKAOH/YkGmTrXgfYizL9DnMb4opksrl+m5jiESxGkRN4tiKf6lr7SN0FUgoFyQyK9o+yMKn1bWMTVmA==",
"dev": true,
"requires": {
"@types/react": "*"
}
},
"@types/resolve": { "@types/resolve": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
...@@ -4377,15 +4386,6 @@ ...@@ -4377,15 +4386,6 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
}, },
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"cosmiconfig": { "cosmiconfig": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
...@@ -12114,6 +12114,14 @@ ...@@ -12114,6 +12114,14 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
"integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew=="
}, },
"react-infinite-scroller": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz",
"integrity": "sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==",
"requires": {
"prop-types": "^15.5.8"
}
},
"react-is": { "react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
"mobx-react": "^7.2.1", "mobx-react": "^7.2.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-infinite-scroller": "^1.2.4",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"typescript": "^4.4.3", "typescript": "^4.4.3",
"web-vitals": "^1.1.2" "web-vitals": "^1.1.2"
...@@ -46,6 +47,7 @@ ...@@ -46,6 +47,7 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@types/react-infinite-scroller": "^1.2.2",
"@types/cors": "^2.8.12" "@types/cors": "^2.8.12"
} }
} }
...@@ -53,3 +53,36 @@ ...@@ -53,3 +53,36 @@
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
table {
table-layout:fixed;
width: 100%;
text-align: center;
}
th {
color: white;
background-color: green;
}
tr:nth-child(even) {
background-color: #Cdeadd;
}
table, th, td {
border: 1px solid #Cdeadd;
padding: 1em;
overflow: visible;
word-wrap: break-word;
text-align: left;
width: 100%;
}
table th:first-child{
width: 200%;
}
table th:second-child{
width: 60%;
}
...@@ -35,7 +35,6 @@ class Header extends React.Component<MoviesProps, MyState> { ...@@ -35,7 +35,6 @@ class Header extends React.Component<MoviesProps, MyState> {
<input type="text" placeholder="Filter on genre..." onChange={this.handleChange} id="textfield2"></input> <input type="text" placeholder="Filter on genre..." onChange={this.handleChange} id="textfield2"></input>
Order by year: Order by year:
<input type="checkbox" id="checkbox1" onChange={this.handleChange}></input> <input type="checkbox" id="checkbox1" onChange={this.handleChange}></input>
<button onClick={this.search}>Search</button> <button onClick={this.search}>Search</button>
</div> </div>
) )
...@@ -44,10 +43,6 @@ class Header extends React.Component<MoviesProps, MyState> { ...@@ -44,10 +43,6 @@ class Header extends React.Component<MoviesProps, MyState> {
handleChange = (event: any) => { handleChange = (event: any) => {
let element = event.target.id let element = event.target.id
if (event.keyCode === 13) { // not working
console.log("enter")
this.search()
}
if (element == 'textfield1') { if (element == 'textfield1') {
this.setState({ inputTitle: event.target.value }) this.setState({ inputTitle: event.target.value })
...@@ -58,27 +53,29 @@ class Header extends React.Component<MoviesProps, MyState> { ...@@ -58,27 +53,29 @@ class Header extends React.Component<MoviesProps, MyState> {
else if (element == 'checkbox1') { else if (element == 'checkbox1') {
this.setState({ checkbox1_checked: event.target.checked }) this.setState({ checkbox1_checked: event.target.checked })
} }
// else if (element == 'checkbox12') {
// this.setState({ checkbox2_checked: event.target.checked })
// }
} }
// TODO mysql ordering not working because of graphql scrambling
search = () => { search = () => {
this.getMoviesBySearch('id title genre description', this.state.inputTitle, this.state.inputGenre, this.state.checkbox1_checked); this.getMoviesBySearch('title genre year', this.state.inputTitle, this.state.inputGenre, this.state.checkbox1_checked);
} }
getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) { getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) {
services.queryFetch(services.generateQuery(columnType, value, neededData)) services.queryFetch(services.generateQuery(columnType, value, neededData))
.then(res => res.json()) .then(res => res.json())
.then(res => this.props.moviesStore.setMovies(res.data.getMovieByColumnType)) .then(res => {
this.props.moviesStore.setHasMore(false);
this.props.moviesStore.setMovies(res.data.getMovieByColumnType);
})
} }
getMoviesBySearch(neededData: string, title: string, genre: string, order: boolean) { getMoviesBySearch(neededData: string, title: string, genre: string, order: boolean) {
services.queryFetch(services.generateSearchQuery(neededData, title, genre, order)) services.queryFetch(services.generateSearchQuery(neededData, title, genre, order))
.then(res => res.json()) .then(res => res.json())
.then(res => this.props.moviesStore.setMovies(res.data.getMoviesBySearch)) .then(res => {
this.props.moviesStore.setHasMore(false);
this.props.moviesStore.setMovies(res.data.getMoviesBySearch);
})
} }
} }
......
import React from 'react'; import React, {useEffect, useState} from 'react';
import PrintTable from "./PrintTable";
import InfiniteScroll from "react-infinite-scroller";
import { MoviesStore, MoviesStoreImplementation } from "./MoviesStore"; import { MoviesStore, MoviesStoreImplementation } from "./MoviesStore";
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import * as services from './services'; import * as services from './services';
// type MyProps = {};
type MyState = {
movies: any
};
interface MoviesProps { interface MoviesProps {
moviesStore: MoviesStoreImplementation moviesStore: MoviesStoreImplementation
} }
// interface movie {
// } function Movies(props: MoviesProps){
class Movies extends React.Component<MoviesProps, MyState> { useEffect(() => {
constructor(props: any) { if (MoviesStore.hasMore){
super(props); getAllMovies({lim: 13});
// this.state = {
// movies: []
// }
} }
}, []);
getAllMovies() { function generateAllMoviesQuery(lim: number){
services.queryFetch(services.getAllMoviesQuery) return `
.then(res => res.json()) query {
.then(res => this.props.moviesStore.setMovies(res.data.getAllMovies)) getAllMovies(lim: ${lim}) {
title,genre,year
}
}`
} }
getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) { function getAllMovies(params: any) {
services.queryFetch(services.generateQuery(columnType, value, neededData)) services.queryFetch(generateAllMoviesQuery(params.lim))
.then(res => res.json()) .then(res => res.json())
.then(res => this.props.moviesStore.setMovies(res)) // .then(res => setMovies(res.data.getAllMovies))
.then(res => {
props.moviesStore.setMovies(res.data.getAllMovies);
props.moviesStore.setHasMore(true);
})
} }
function getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) {
componentDidMount() { services.queryFetch(services.generateQuery(columnType, value, neededData))
this.getAllMovies(); .then(res => res.json())
// this.getMovieByColumnType(services.ColumnType.Genre, 'Drama', 'id title genre description'); // .then(res => setMovies(res.data.getMovieByColumnType))
.then(res => props.moviesStore.setMovies(res.data.getMovieByColumnType))
} }
render() {
return ( return (
<ul> <InfiniteScroll
{/* {this.state.movies.map((movie: any) => <li key={movie.title}>{JSON.stringify(movie)}</li>)} */} pageStart={0}
{/* {this.props.moviesStore.movies.map((movie: any) => <li key={movie.id}>{JSON.stringify(movie)}</li>)} */} loadMore={() => {
{JSON.stringify(MoviesStore.movies)} if (MoviesStore.hasMore){
</ul> getAllMovies({ lim: MoviesStore.movies.length + 13 })
);
} }
}}
hasMore={MoviesStore.hasMore}
useWindow={true}
loader={
<div key="loading" className="loader">
Loading ...
</div>
} }
>
<PrintTable data={MoviesStore.movies}/>
</InfiniteScroll>
);
}
export default inject('moviesStore')(observer(Movies)) export default inject('moviesStore')(observer(Movies))
import { action, makeObservable, observable } from "mobx"; import { action, makeObservable, observable } from "mobx";
interface Movie {
}
export class MoviesStoreImplementation { export class MoviesStoreImplementation {
movies: Movie[] = []; movies: Array<object> = [];
hasMore: boolean = true;
constructor() { constructor() {
makeObservable(this, { makeObservable(this, {
movies: observable, movies: observable,
setMovies: action setMovies: action,
hasMore: observable,
setHasMore: action
}); });
} }
setMovies(movies: any) { setMovies(movies: any) {
this.movies = movies; this.movies = movies;
} }
setHasMore(hasMore: boolean) {
this.hasMore = hasMore;
}
} }
export const MoviesStore = new MoviesStoreImplementation(); export const MoviesStore = new MoviesStoreImplementation();
\ No newline at end of file
function PrintTable(props: any) {
return (
<table>
<thead>
<tr>
<th>Title</th>
<th>Genre</th>
<th>Year released</th>
</tr>
</thead>
<tbody>{
props.data.map((row: any) => {
return <tr>
<td>{row.title}</td>
<td>{row.genre}</td>
<td>{row.year}</td>
</tr>;
})
}</tbody></table>
)
}
export default PrintTable;
...@@ -4,7 +4,6 @@ export function queryFetch(query: String) { ...@@ -4,7 +4,6 @@ export function queryFetch(query: String) {
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ body: JSON.stringify({
query: query, query: query,
// variables: variables
}) })
}) })
} }
...@@ -71,17 +70,3 @@ export function generateSearchQuery(neededData: string, title: string, genre: st ...@@ -71,17 +70,3 @@ export function generateSearchQuery(neededData: string, title: string, genre: st
console.log(query) console.log(query)
return query return query
} }
export const getAllMoviesQuery = `
query {
getAllMovies {
id,title,genre,rating_dice_throw,year,director_first_name,director_last_name,description,cover_image
}
}`
export const createMovieQuery = `
mutation {
createMovie(title: "testing", genre: "gaming", rating_dice_throw: 1, year: '2000', director_first_name: "torje", director_last_name: "the_gamer", description: "amazing", cover_image: "url123") {
id
}
}`
This diff is collapsed.
...@@ -5528,11 +5528,6 @@ ...@@ -5528,11 +5528,6 @@
"is-obj": "^2.0.0" "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": { "dotenv-expand": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
......
declare var require: any declare var require: any
var express = require('express'); var express = require('express');
var { graphqlHTTP } = require('express-graphql'); var { graphqlHTTP } = require('express-graphql');
var { GraphQLObjectType, GraphQLSchema, buildSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql'); var { GraphQLObjectType, GraphQLSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql');
import {connect} from "./database" import {connect} from "./database"
import * as cors from 'cors'; import * as cors from 'cors';
...@@ -27,9 +27,12 @@ const RootQuery = new GraphQLObjectType({ ...@@ -27,9 +27,12 @@ const RootQuery = new GraphQLObjectType({
fields: { fields: {
getAllMovies: { getAllMovies: {
type: new GraphQLList(MovieType), type: new GraphQLList(MovieType),
args: {
lim: {type: GraphQLInt}
},
async resolve(parent: any, args: any) { async resolve(parent: any, args: any) {
const connection = await connect(); const connection = await connect();
const response = await connection.query('SELECT * FROM movie'); const response = await connection.query('SELECT * FROM movie LIMIT '+args.lim);
return response[0]; return response[0];
} }
}, },
...@@ -75,17 +78,9 @@ const RootQuery = new GraphQLObjectType({ ...@@ -75,17 +78,9 @@ const RootQuery = new GraphQLObjectType({
async resolve(parent: any, args: any) { async resolve(parent: any, args: any) {
const connection = await connect(); const connection = await connect();
let query = ''; let query = '';
// if(typeof args.id!='undefined' && args.id){query = getQuery('id' , args.id)}
if(typeof args.title!='undefined' && typeof args.genre!='undefined'){ if(typeof args.title!='undefined' && typeof args.genre!='undefined'){
console.log("resolve") console.log("resolve")
query = getSearchQuery(args.title, args.genre, args.order)} query = getSearchQuery(args.title, args.genre, args.order)}
// else if(typeof args.genre!='undefined' && args.genre){query = getQuery('genre' , args.genre)}
// else if(typeof args.rating_dice_throw!='undefined' && args.rating_dice_throw){query = getQuery('rating_dice_throw' , args.rating_dice_throw)}
// else if(typeof args.year!='undefined' && args.year){query = getQuery('year' , args.year)}
// else if(typeof args.director_first_name!='undefined' && args.director_first_name){query = getQuery('director_first_name' , args.director_first_name)}
// 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 connection.query(query);
return response[0]; return response[0];
} }
...@@ -112,7 +107,7 @@ function getSearchQuery(title: string, genre: string, order: boolean): string { ...@@ -112,7 +107,7 @@ function getSearchQuery(title: string, genre: string, order: boolean): string {
query = query + ' genre LIKE "%' + genre + '%"' query = query + ' genre LIKE "%' + genre + '%"'
} }
if (order) { if (order) {
query = query + ' ORDER BY "year"' query = query + ' ORDER BY "year" DESC'
} }
console.log(query) console.log(query)
return query return query
...@@ -171,7 +166,7 @@ const Mutation = new GraphQLObjectType({ ...@@ -171,7 +166,7 @@ const Mutation = new GraphQLObjectType({
return response[0]; return response[0];
} }
}, },
updateRating: { // TODO test this updateRating: {
type: MovieType, type: MovieType,
args: { args: {
id: {type: GraphQLInt}, id: {type: GraphQLInt},
...@@ -216,8 +211,7 @@ app.use(cors()); ...@@ -216,8 +211,7 @@ app.use(cors());
app.use('/graphql', graphqlHTTP({ app.use('/graphql', graphqlHTTP({
schema: schema, schema: schema,
// rootValue: RootQuery, graphiql: true,
graphiql: true, // graphql gui
})); }));
app.listen(4000, () => console.log('Server running on port 4000')); app.listen(4000, () => console.log('Server running on port 4000'));
declare var require: any
var express = require('express');
var { graphqlHTTP } = require('express-graphql');
var { GraphQLObjectType, GraphQLSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql');
import {connect} from "./database"
const MovieType = new GraphQLObjectType({
name: "Movie",
fields: () => ({
id: { type: GraphQLString },
title: { type: GraphQLString },
genre: { type: GraphQLString },
rating_dice_throw: { type: GraphQLInt },
year: { type: GraphQLString },
director_first_name: { type: GraphQLString },
director_last_name: { type: GraphQLString },
description: { type: GraphQLString },
cover_image: { type: GraphQLString }
})
})
const RootQuery = new GraphQLObjectType({
name: "RootQueryType",
description: 'Root query',
fields: {
getAllMovies: {
type: new GraphQLList(MovieType),
args: {
lim: {type: GraphQLInt}
},
async resolve(parent: any, args: any) {
const connection = await connect();
const response = await connection.query('SELECT * FROM movie LIMIT '+args.lim);
return response[0];
}
},
getMovieByColumnType: {
type: new GraphQLList(MovieType),
args: {
id: { type: GraphQLInt },
title: { type: GraphQLString },
genre: { type: GraphQLString },
rating_dice_throw: { type: GraphQLInt },
year: { type: GraphQLString },
director_first_name: { type: GraphQLString },
director_last_name: { type: GraphQLString },
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)}
else if(typeof args.genre!='undefined' && args.genre){query = getQuery('genre' , args.genre)}
else if(typeof args.rating_dice_throw!='undefined' && args.rating_dice_throw){query = getQuery('rating_dice_throw' , args.rating_dice_throw)}
else if(typeof args.year!='undefined' && args.year){query = getQuery('year' , args.year)}
else if(typeof args.director_first_name!='undefined' && args.director_first_name){query = getQuery('director_first_name' , args.director_first_name)}
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);
return response[0];
}
},
getMoviesBySearch: {
type: new GraphQLList(MovieType),
args: {
id: {type: GraphQLInt},
title: { type: GraphQLString },
genre: { type: GraphQLString },
rating_dice_throw: { type: GraphQLInt },
year: { type: GraphQLInt },
description: { type: GraphQLString },
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);
return response[0];
}
}
}
})
function getQuery(key: string, value: string){
return 'SELECT * FROM movie WHERE ' + key + ' = "' + value + '"'
}
function getSearchQuery(title: string, genre: string, order: boolean): string {
let query = 'SELECT * FROM movie'
if (title != '') {
query = query + ' WHERE title LIKE "%' + title + '%"'
}
if (title != '' && genre != '') {
query = query + ' AND'
}
if (title == '' && genre != '') {
query = query + ' WHERE'
}
if (genre != '') {
query = query + ' genre LIKE "%' + genre + '%"'
}
if (order) {
query = query + ' ORDER BY year DESC'
}
console.log(query)
return query
}
const Mutation = new GraphQLObjectType({
name: "Mutation",
description: 'This is for creating a movie',
fields: {
createMovie: {
type: MovieType,
args: {
id: {type: GraphQLInt},
title: { type: GraphQLString },
genre: { type: GraphQLString },
rating_dice_throw: { type: GraphQLInt },
year: { type: GraphQLInt },
director_first_name: { type: GraphQLString },
director_last_name: { type: GraphQLString },
description: { type: GraphQLString },
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]);
return response[0];
}
},
deleteMovie: {
type: MovieType,
args: {
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]);
return response[0];
}
},
updateMovie: {
type: MovieType,
args: {
id: {type: GraphQLInt},
title: { type: GraphQLString },
genre: { type: GraphQLString },
rating_dice_throw: { type: GraphQLInt },
year: { type: GraphQLInt },
director_first_name: { type: GraphQLString },
director_last_name: { type: GraphQLString },
description: { type: GraphQLString },
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]);
return response[0];
}
},
updateRating: {
type: MovieType,
args: {
id: {type: GraphQLInt},
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]);
return response[0];
}
}
}
})
const schema = new GraphQLSchema({query: RootQuery, mutation: Mutation})
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
graphiql: true,
}));
app.listen(4000, () => console.log('Now browse to localhost:4000/graphql on local'));
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment