diff --git a/src/api.ts b/src/api.ts index d1242de..0d67b87 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,4 +1,8 @@ import { IList, IMediaCredits, IPersonCredits } from "./interfaces/IList"; +import type { + IRequestStatusResponse, + IRequestSubmitResponse +} from "./interfaces/IRequestResponse"; const { ELASTIC, ELASTIC_INDEX } = process.env; const API_HOSTNAME = window.location.origin; @@ -259,7 +263,7 @@ const addMagnet = (magnet: string, name: string, tmdbId: number | null) => { * @param {string} type Movie or show type * @returns {object} Success/Failure response */ -const request = (id, type) => { +const request = (id, type): Promise => { const url = new URL("/api/v2/request", API_HOSTNAME); const options = { @@ -282,18 +286,13 @@ const request = (id, type) => { * @param {string} type * @returns {object} Success/Failure response */ -const getRequestStatus = (id, type = undefined) => { +const getRequestStatus = (id, type = null): Promise => { const url = new URL("/api/v2/request", API_HOSTNAME); url.pathname = `${url.pathname}/${id.toString()}`; url.searchParams.append("type", type); return fetch(url.href) - .then(resp => { - const { status } = resp; - if (status === 200) return true; - - return false; - }) + .then(resp => resp.json()) .catch(err => Promise.reject(err)); }; diff --git a/src/components/popup/Movie.vue b/src/components/popup/Movie.vue index 02c0c2b..e4ebaf4 100644 --- a/src/components/popup/Movie.vue +++ b/src/components/popup/Movie.vue @@ -190,6 +190,10 @@ IMediaCredits, ICast } from "../../interfaces/IList"; + import type { + IRequestStatusResponse, + IRequestSubmitResponse + } from "../../interfaces/IRequestResponse"; import { MediaTypes } from "../../interfaces/IList"; import { humanMinutes } from "../../utils"; @@ -241,8 +245,15 @@ function setCast(_cast: ICast[]) { cast.value = _cast; } - function setRequested(status: boolean) { - requested.value = status; + function setRequested( + requestResponse: IRequestStatusResponse | IRequestSubmitResponse + ) { + if (requestResponse?.success) { + requested.value = requestResponse?.success; + return; + } + + requested.value = false; } function setBackdrop(): void { @@ -301,13 +312,13 @@ .then(() => getCredits(props.type)) .then(credits => setCast(credits?.cast || [])) .then(() => getRequestStatus(props.id, props.type)) - .then(requestStatus => setRequested(requestStatus || false)) + .then(requestResponse => setRequested(requestResponse)) .then(setBackdrop); } function sendRequest() { - request(props.id, props.type).then(resp => - setRequested(resp?.success || false) + request(props.id, props.type).then(requestResponse => + setRequested(requestResponse) ); } diff --git a/src/interfaces/IRequestResponse.ts b/src/interfaces/IRequestResponse.ts new file mode 100644 index 0000000..586aa2d --- /dev/null +++ b/src/interfaces/IRequestResponse.ts @@ -0,0 +1,19 @@ +export interface Result { + id: number; + title: string; + year: number; + type: string; + status: string; + requested_date: Date; +} + +export interface IRequestStatusResponse { + success: boolean; + message?: string; + result?: Result; +} + +export interface IRequestSubmitResponse { + success: boolean; + message: string; +}