|
|
@ -1,10 +1,11 @@ |
|
|
|
import Application from "@server/Application"; |
|
|
|
import MovieSearch from "@server/services/MovieSearch"; |
|
|
|
import RequestMovieRequest from "../requests/RequestMovieRequest"; |
|
|
|
import RequestImdbMovieRequest from "../requests/RequestImdbMovieRequest"; |
|
|
|
import { auth } from "../middleware/auth"; |
|
|
|
import RouteRegisterFactory from "./RouteRegisterFactory"; |
|
|
|
import handle from "../requests"; |
|
|
|
import { MovieTicket, User } from "@server/database/entities"; |
|
|
|
import { MovieInfo, MovieTicket } from "@server/database/entities"; |
|
|
|
import RequestTmdbMovieRequest from "../requests/RequestTmdbMovieRequest"; |
|
|
|
|
|
|
|
/** |
|
|
|
* Register API routes |
|
|
@ -37,36 +38,80 @@ export default function register(factory: RouteRegisterFactory, app: Application |
|
|
|
reply.send({ status: "success", data: results}); |
|
|
|
}); |
|
|
|
|
|
|
|
/** |
|
|
|
* Request a movie to download |
|
|
|
*/ |
|
|
|
factory.get("/movie/request/:imdb_id", handle([RequestMovieRequest], async (request, reply) => { |
|
|
|
// Verify that the ID has not yet been requested
|
|
|
|
let imdbId = (<any>request.params)["imdb_id"]; |
|
|
|
if (undefined !== await MovieTicket.findOne({imdbId})) { |
|
|
|
reply.status(409); |
|
|
|
reply.send({ status: "Conflict" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Verify that the IMDb ID exists
|
|
|
|
if (!await app.service<MovieSearch>("Movie Search").verifyImdbId(imdbId)) { |
|
|
|
reply.status(404); |
|
|
|
reply.send({ satus: "Not found" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Grab the user
|
|
|
|
let user = await User.findOne({id: request.middlewareParams.auth.id}); |
|
|
|
if (user === undefined) { |
|
|
|
reply.status(401); |
|
|
|
reply.send({ status: "Unauthorized" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Create the movie request ticket
|
|
|
|
let ticket = new MovieTicket(); |
|
|
|
ticket.imdbId = imdbId; |
|
|
|
ticket.user = user; |
|
|
|
await ticket.save(); |
|
|
|
return reply.send({ status: "success" }); |
|
|
|
})); |
|
|
|
// Movie Request ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
factory.prefix("/movie/request", [], (factory, app) => { |
|
|
|
/** |
|
|
|
* Request a movie to download |
|
|
|
*/ |
|
|
|
factory.get("/create/tmdb/:tmdb_id", handle([RequestTmdbMovieRequest], async (request, reply) => { |
|
|
|
// Verify that the ID has not yet been requested
|
|
|
|
let tmdbId = (<any>request.params)["tmdb_id"]; |
|
|
|
if (0 != await MovieInfo.count({tmdbId})) { |
|
|
|
reply.status(409); |
|
|
|
reply.send({ status: "Conflict" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Verify that the IMDb ID exists
|
|
|
|
let movieDetails = await app.service<MovieSearch>("Movie Search").details(tmdbId); |
|
|
|
if (!movieDetails) { // @TODO This isn't correct I don't think
|
|
|
|
reply.status(404); |
|
|
|
reply.send({ satus: "Not found" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Create the movie request ticket
|
|
|
|
let user = request.middlewareParams.auth.user; |
|
|
|
let ticket = await MovieTicket.requestTmdb(user, tmdbId, movieDetails); |
|
|
|
return reply.send({ status: "success", data: { ticket_id: ticket.id }}); |
|
|
|
})); |
|
|
|
|
|
|
|
/** |
|
|
|
* Request a movie to download |
|
|
|
*/ |
|
|
|
factory.get("/create/imdb/:imdb_id", handle([RequestImdbMovieRequest], async (request, reply) => { |
|
|
|
// Verify that the ID has not yet been requested
|
|
|
|
let imdbId = (<any>request.params)["imdb_id"]; |
|
|
|
let title = (<any>request.query)["title"] || null; |
|
|
|
if (0 != await MovieTicket.count({imdbId})) { |
|
|
|
reply.status(409); |
|
|
|
reply.send({ status: "Conflict" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Verify that the IMDb ID exists
|
|
|
|
if (!await app.service<MovieSearch>("Movie Search").verifyImdbId(imdbId)) { |
|
|
|
reply.status(404); |
|
|
|
reply.send({ satus: "Not found" }); |
|
|
|
return; |
|
|
|
} |
|
|
|
// Create the movie request ticket
|
|
|
|
let user = request.middlewareParams.auth.user; |
|
|
|
let ticket = await MovieTicket.requestImdb(user, imdbId, title); |
|
|
|
return reply.send({ status: "success", data: { ticket_id: ticket.id }}); |
|
|
|
})); |
|
|
|
|
|
|
|
/** |
|
|
|
* Remove/cancel a request |
|
|
|
*/ |
|
|
|
// factory.get("/cancel/:ticket_id", async (request, reply) => {
|
|
|
|
// // Verify that the ticket exists
|
|
|
|
// let ticketId = parseInt((<any>request.params)["ticket_id"]);
|
|
|
|
// if (ticketId === NaN) {
|
|
|
|
// reply.status(400);
|
|
|
|
// reply.send({ status: "Bad request" });
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
// let user = request.middlewareParams.auth.user;
|
|
|
|
// let ticket = await MovieTicket.findOne({ id: ticketId, user});
|
|
|
|
// if (ticket === ) {
|
|
|
|
// reply.status(404);
|
|
|
|
// reply.send({ status: "Not found" });
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
// // Create the movie request ticket
|
|
|
|
// let user =
|
|
|
|
// let ticket = await MovieTicket.requestTmdb(user, tmdbId, movieDetails);
|
|
|
|
// return reply.send({ status: "success", data: { ticket_id: ticket.id }});
|
|
|
|
// });
|
|
|
|
}); |
|
|
|
}); |
|
|
|
} |