WIP graphql to get requests, torrents and working on requests with torrents by username.
This commit is contained in:
		| @@ -22,6 +22,9 @@ | |||||||
|     "body-parser": "~1.18.2", |     "body-parser": "~1.18.2", | ||||||
|     "cross-env": "~5.1.4", |     "cross-env": "~5.1.4", | ||||||
|     "express": "~4.16.0", |     "express": "~4.16.0", | ||||||
|  |     "express-graphql": "^0.9.0", | ||||||
|  |     "express-reload": "^1.2.0", | ||||||
|  |     "graphql": "^14.5.8", | ||||||
|     "jsonwebtoken": "^8.2.0", |     "jsonwebtoken": "^8.2.0", | ||||||
|     "km-moviedb": "^0.2.12", |     "km-moviedb": "^0.2.12", | ||||||
|     "node-cache": "^4.1.1", |     "node-cache": "^4.1.1", | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| const express = require('express'); | const express = require('express'); | ||||||
|  | // const reload = require('express-reload'); | ||||||
| const Raven = require('raven'); | const Raven = require('raven'); | ||||||
| const bodyParser = require('body-parser'); | const bodyParser = require('body-parser'); | ||||||
| const tokenToUser = require('./middleware/tokenToUser'); | const tokenToUser = require('./middleware/tokenToUser'); | ||||||
| @@ -48,6 +49,32 @@ app.use(function onError(err, req, res, next) { | |||||||
|    res.end(res.sentry + '\n'); |    res.end(res.sentry + '\n'); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * GraphQL | ||||||
|  |  */ | ||||||
|  | var graphqlHTTP = require('express-graphql'); | ||||||
|  | var { buildSchema } = require('graphql'); | ||||||
|  |  | ||||||
|  | // var schema = buildSchema(` | ||||||
|  | //   type Query { | ||||||
|  | //     hello: String | ||||||
|  | //   }`); | ||||||
|  | const schema = require('./graphql/requests.js'); | ||||||
|  |  | ||||||
|  | const roots = { hello: () => 'Hello world!' }; | ||||||
|  |  | ||||||
|  | app.use('/graphql', graphqlHTTP({ | ||||||
|  |   schema: schema.schema, | ||||||
|  |   graphiql: process.env.NODE_ENV === 'development' | ||||||
|  | })) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * User |  * User | ||||||
|  */ |  */ | ||||||
|   | |||||||
							
								
								
									
										217
									
								
								seasoned_api/src/webserver/graphql/requests.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								seasoned_api/src/webserver/graphql/requests.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | |||||||
|  | const graphql = require("graphql"); | ||||||
|  | const establishedDatabase = require('src/database/database'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const TorrentType = new graphql.GraphQLObjectType({ | ||||||
|  |   name: "Torrent", | ||||||
|  |   fields: { | ||||||
|  |     magnet: { type: graphql.GraphQLString }, | ||||||
|  |     torrent_name: { type: graphql.GraphQLString}, | ||||||
|  |     tmdb_id: { type: graphql.GraphQLString }, | ||||||
|  |     date_added: { type: graphql.GraphQLString } | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const RequestType = new graphql.GraphQLObjectType({ | ||||||
|  |   name: "Request", | ||||||
|  |   fields: { | ||||||
|  |     id: { type: graphql.GraphQLID }, | ||||||
|  |     title: { type: graphql.GraphQLString }, | ||||||
|  |     year: { type: graphql.GraphQLInt}, | ||||||
|  |     poster_path: { type: graphql.GraphQLString }, | ||||||
|  |     background_path: { type: graphql.GraphQLString }, | ||||||
|  |     requested_by: { type: graphql.GraphQLString }, | ||||||
|  |     ip: { type: graphql.GraphQLString }, | ||||||
|  |     date: { type: graphql.GraphQLString }, | ||||||
|  |     status: { type: graphql.GraphQLString }, | ||||||
|  |     user_agent: { type: graphql.GraphQLString }, | ||||||
|  |     type: { type: graphql.GraphQLString }, | ||||||
|  |     Torrent: { | ||||||
|  |       required: true, | ||||||
|  |       type: TorrentType, | ||||||
|  |       resolve(parentValue, args) { | ||||||
|  |         return establishedDatabase.get('select * from requested_torrent where tmdb_id = (?);', [parentValue.id]) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // create a graphql query to select all and by id | ||||||
|  | var queryType = new graphql.GraphQLObjectType({ | ||||||
|  |     name: 'Query', | ||||||
|  |     fields: { | ||||||
|  |         //first query to select all | ||||||
|  |         Requests: { | ||||||
|  |             type: graphql.GraphQLList(RequestType), | ||||||
|  |             resolve: (root, args, context, info) => { | ||||||
|  |                 return establishedDatabase.all("SELECT * FROM requests;") | ||||||
|  |                   .catch(error => console.error("something went wrong fetching 'all' query. Error:", error)) | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         DownloadingRequests: { | ||||||
|  |           type: graphql.GraphQLList(RequestType), | ||||||
|  |           resolve: (root, args, context, info) => { | ||||||
|  |             return establishedDatabase.all("SELECT * FROM requests;") | ||||||
|  |               .then(data => data.filter(request => { if (request.id === '83666') { console.log('request', request, root);}; return request })) | ||||||
|  |               .catch(error => console.error("something went wrong fetching 'all' query. Error:", error)) | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         DownloadingRequestByName: { | ||||||
|  |           type: RequestType, | ||||||
|  |           args:{ | ||||||
|  |             name:{ | ||||||
|  |               type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  |             }                | ||||||
|  |           }, | ||||||
|  |           resolve: (root, { name }, context, info) => { | ||||||
|  |             return establishedDatabase.all("SELECT * FROM requests where requested_by = (?);", [name]) | ||||||
|  |               .catch(error => console.error("something went wrong fetching 'all' query. Error:", error)) | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         //second query to select by id | ||||||
|  |         Request:{ | ||||||
|  |             type: RequestType, | ||||||
|  |             args:{ | ||||||
|  |                 id:{ | ||||||
|  |                     type: new graphql.GraphQLNonNull(graphql.GraphQLID) | ||||||
|  |                 }                | ||||||
|  |             }, | ||||||
|  |             resolve: (root, {id}, context, info) => { | ||||||
|  |               return establishedDatabase.get("SELECT * FROM requests WHERE id = (?);",[id]) | ||||||
|  |                 .catch(error => console.error(`something went wrong fetching by id: '${ id }'. Error: ${ error }`)) | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         Torrents: { | ||||||
|  |           type: graphql.GraphQLList(TorrentType), | ||||||
|  |           resolve: (root, {id}, context, info) => { | ||||||
|  |             console.log('parent', parent) | ||||||
|  |             return establishedDatabase.all("SELECT * FROM requested_torrent") | ||||||
|  |               .catch(error => console.error(`something went wrong fetching all torrents. Error: ${ error }`)) | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         Torrent: { | ||||||
|  |           type: TorrentType, | ||||||
|  |           args: { | ||||||
|  |             id: { | ||||||
|  |               type: new graphql.GraphQLNonNull(graphql.GraphQLID) | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           resolve: (parent, {id}, context, info) => { | ||||||
|  |             console.log('searcing from parent', parent) | ||||||
|  |             return establishedDatabase.get("SELECT * FROM requested_torrent WHERE tmdb_id = (?);", [id]) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }); | ||||||
|  | //mutation type is a type of object to modify data (INSERT,DELETE,UPDATE) | ||||||
|  | // var mutationType = new graphql.GraphQLObjectType({ | ||||||
|  | //     name: 'Mutation', | ||||||
|  | //     fields: { | ||||||
|  | //       //mutation for creacte | ||||||
|  | //       createPost: { | ||||||
|  | //         //type of object to return after create in SQLite | ||||||
|  | //         type: PostType, | ||||||
|  | //         //argument of mutation creactePost to get from request | ||||||
|  | //         args: { | ||||||
|  | //           title: { | ||||||
|  | //             type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //           }, | ||||||
|  | //           description:{ | ||||||
|  | //               type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //           }, | ||||||
|  | //           createDate:{ | ||||||
|  | //               type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //           }, | ||||||
|  | //           author:{ | ||||||
|  | //               type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //           } | ||||||
|  | //         }, | ||||||
|  | //         resolve: (root, {title, description, createDate, author}) => { | ||||||
|  | //             return new Promise((resolve, reject) => { | ||||||
|  | //                 //raw SQLite to insert a new post in post table | ||||||
|  | //                 database.run('INSERT INTO Posts (title, description, createDate, author) VALUES (?,?,?,?);', [title, description, createDate, author], (err) => { | ||||||
|  | //                     if(err) { | ||||||
|  | //                         reject(null); | ||||||
|  | //                     } | ||||||
|  | //                     database.get("SELECT last_insert_rowid() as id", (err, row) => { | ||||||
|  |                          | ||||||
|  | //                         resolve({ | ||||||
|  | //                             id: row["id"], | ||||||
|  | //                             title: title, | ||||||
|  | //                             description: description, | ||||||
|  | //                             createDate:createDate, | ||||||
|  | //                             author: author | ||||||
|  | //                         }); | ||||||
|  | //                     }); | ||||||
|  | //                 }); | ||||||
|  | //             }) | ||||||
|  | //         } | ||||||
|  | //       }, | ||||||
|  | //       //mutation for update | ||||||
|  | //       updatePost: { | ||||||
|  | //         //type of object to return afater update in SQLite | ||||||
|  | //         type: graphql.GraphQLString, | ||||||
|  | //         //argument of mutation creactePost to get from request | ||||||
|  | //         args:{ | ||||||
|  | //             id:{ | ||||||
|  | //                 type: new graphql.GraphQLNonNull(graphql.GraphQLID) | ||||||
|  | //             }, | ||||||
|  | //             title: { | ||||||
|  | //                 type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //             }, | ||||||
|  | //             description:{ | ||||||
|  | //                   type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //             }, | ||||||
|  | //             createDate:{ | ||||||
|  | //                   type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //             }, | ||||||
|  | //             author:{ | ||||||
|  | //                   type: new graphql.GraphQLNonNull(graphql.GraphQLString) | ||||||
|  | //             }              | ||||||
|  | //         }, | ||||||
|  | //         resolve: (root, {id, title, description, createDate, author}) => { | ||||||
|  | //             return new Promise((resolve, reject) => { | ||||||
|  | //                 //raw SQLite to update a post in post table | ||||||
|  | //                 database.run('UPDATE Posts SET title = (?), description = (?), createDate = (?), author = (?) WHERE id = (?);', [title, description, createDate, author, id], (err) => { | ||||||
|  | //                     if(err) { | ||||||
|  | //                         reject(err); | ||||||
|  | //                     } | ||||||
|  | //                     resolve(`Post #${id} updated`); | ||||||
|  | //                 }); | ||||||
|  | //             }) | ||||||
|  | //         } | ||||||
|  | //       }, | ||||||
|  | //       //mutation for update | ||||||
|  | //       deletePost: { | ||||||
|  | //          //type of object resturn after delete in SQLite | ||||||
|  | //         type: graphql.GraphQLString, | ||||||
|  | //         args:{ | ||||||
|  | //             id:{ | ||||||
|  | //                 type: new graphql.GraphQLNonNull(graphql.GraphQLID) | ||||||
|  | //             }                | ||||||
|  | //         }, | ||||||
|  | //         resolve: (root, {id}) => { | ||||||
|  | //             return new Promise((resolve, reject) => { | ||||||
|  | //                 //raw query to delete from post table by id | ||||||
|  | //                 database.run('DELETE from Posts WHERE id =(?);', [id], (err) => { | ||||||
|  | //                     if(err) { | ||||||
|  | //                         reject(err); | ||||||
|  | //                     } | ||||||
|  | //                     resolve(`Post #${id} deleted`);                     | ||||||
|  | //                 }); | ||||||
|  | //             }) | ||||||
|  | //         } | ||||||
|  | //       } | ||||||
|  | //     } | ||||||
|  | // }); | ||||||
|  |  | ||||||
|  | //define schema with post object, queries, and mustation  | ||||||
|  | const schema = new graphql.GraphQLSchema({ | ||||||
|  |     query: queryType, | ||||||
|  |     // mutation: mutationType  | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | //export schema to use on index.js | ||||||
|  | module.exports = { | ||||||
|  |     schema | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user