From 2535edcc7fd6ec66fd45ad754c03929f1fe94871 Mon Sep 17 00:00:00 2001 From: TheCatLady <52870424+TheCatLady@users.noreply.github.com> Date: Sun, 16 Jan 2022 00:13:35 -0800 Subject: [PATCH] feat(api): add additional request counts (#2426) --- overseerr-api.yml | 15 ++++++++------- server/routes/request.ts | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/overseerr-api.yml b/overseerr-api.yml index 8ad5afa46..429b31e77 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -4422,21 +4422,22 @@ paths: schema: type: object properties: + total: + type: number + movie: + type: number + tv: + type: number pending: type: number - example: 0 approved: type: number - example: 10 + declined: + type: number processing: type: number - example: 4 available: type: number - example: 6 - required: - - pending - - approved /request/{requestId}: get: summary: Get MediaRequest diff --git a/server/routes/request.ts b/server/routes/request.ts index 2e79ff4a4..38af4057c 100644 --- a/server/routes/request.ts +++ b/server/routes/request.ts @@ -444,6 +444,20 @@ requestRoutes.get('/count', async (_req, res, next) => { .createQueryBuilder('request') .leftJoinAndSelect('request.media', 'media'); + const totalCount = await query.getCount(); + + const movieCount = await query + .where('request.type = :requestType', { + requestType: MediaType.MOVIE, + }) + .getCount(); + + const tvCount = await query + .where('request.type = :requestType', { + requestType: MediaType.TV, + }) + .getCount(); + const pendingCount = await query .where('request.status = :requestStatus', { requestStatus: MediaRequestStatus.PENDING, @@ -456,12 +470,18 @@ requestRoutes.get('/count', async (_req, res, next) => { }) .getCount(); + const declinedCount = await query + .where('request.status = :requestStatus', { + requestStatus: MediaRequestStatus.DECLINED, + }) + .getCount(); + const processingCount = await query .where('request.status = :requestStatus', { requestStatus: MediaRequestStatus.APPROVED, }) .andWhere( - '(request.is4k = false AND media.status != :availableStatus) OR (request.is4k = true AND media.status4k != :availableStatus)', + '((request.is4k = false AND media.status != :availableStatus) OR (request.is4k = true AND media.status4k != :availableStatus))', { availableStatus: MediaStatus.AVAILABLE, } @@ -473,7 +493,7 @@ requestRoutes.get('/count', async (_req, res, next) => { requestStatus: MediaRequestStatus.APPROVED, }) .andWhere( - '(request.is4k = false AND media.status = :availableStatus) OR (request.is4k = true AND media.status4k = :availableStatus)', + '((request.is4k = false AND media.status = :availableStatus) OR (request.is4k = true AND media.status4k = :availableStatus))', { availableStatus: MediaStatus.AVAILABLE, } @@ -481,13 +501,21 @@ requestRoutes.get('/count', async (_req, res, next) => { .getCount(); return res.status(200).json({ + total: totalCount, + movie: movieCount, + tv: tvCount, pending: pendingCount, approved: approvedCount, + declined: declinedCount, processing: processingCount, available: availableCount, }); } catch (e) { - next({ status: 500, message: e.message }); + logger.error('Something went wrong retrieving request counts', { + label: 'API', + errorMessage: e.message, + }); + next({ status: 500, message: 'Unable to retrieve request counts.' }); } });