From da8d5806bceb68e5d4023938d2d29dcd99672e5a Mon Sep 17 00:00:00 2001 From: Aaron William Po Date: Sun, 3 Dec 2023 22:19:27 -0500 Subject: [PATCH] Extract beer post, beer image, and beer like controller logic --- src/controllers/beerImages/index.ts | 34 +++++ src/controllers/beerImages/types/index.ts | 9 ++ src/controllers/beerPostLikes/index.ts | 77 +++++++++++ src/controllers/beerPosts/index.ts | 143 ++++++++++++++++++++ src/controllers/beerPosts/types/index.ts | 25 ++++ src/pages/api/beers/[id]/images/index.ts | 40 +----- src/pages/api/beers/[id]/index.ts | 74 ++-------- src/pages/api/beers/[id]/like/index.ts | 59 +------- src/pages/api/beers/[id]/like/is-liked.ts | 18 +-- src/pages/api/beers/[id]/recommendations.ts | 45 +----- src/pages/api/beers/create.ts | 33 +---- src/pages/api/beers/index.ts | 33 +---- 12 files changed, 317 insertions(+), 273 deletions(-) create mode 100644 src/controllers/beerImages/index.ts create mode 100644 src/controllers/beerImages/types/index.ts create mode 100644 src/controllers/beerPostLikes/index.ts create mode 100644 src/controllers/beerPosts/index.ts create mode 100644 src/controllers/beerPosts/types/index.ts diff --git a/src/controllers/beerImages/index.ts b/src/controllers/beerImages/index.ts new file mode 100644 index 0000000..13835b3 --- /dev/null +++ b/src/controllers/beerImages/index.ts @@ -0,0 +1,34 @@ +import ServerError from '@/config/util/ServerError'; +import addBeerImageToDB from '@/services/BeerImage/addBeerImageToDB'; +import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; +import { NextApiResponse } from 'next'; +import { z } from 'zod'; +import { UploadBeerPostImagesRequest } from './types'; + +// eslint-disable-next-line import/prefer-default-export +export const processBeerImageData = async ( + req: UploadBeerPostImagesRequest, + res: NextApiResponse>, +) => { + const { files, user, body } = req; + + if (!files || !files.length) { + throw new ServerError('No images uploaded', 400); + } + + const beerImages = await addBeerImageToDB({ + alt: body.alt, + caption: body.caption, + beerPostId: req.query.id, + userId: user!.id, + files, + }); + + res.status(200).json({ + success: true, + message: `Successfully uploaded ${beerImages.length} image${ + beerImages.length > 1 ? 's' : '' + }`, + statusCode: 200, + }); +}; diff --git a/src/controllers/beerImages/types/index.ts b/src/controllers/beerImages/types/index.ts new file mode 100644 index 0000000..bf8e8dd --- /dev/null +++ b/src/controllers/beerImages/types/index.ts @@ -0,0 +1,9 @@ +import { UserExtendedNextApiRequest } from '@/config/auth/types'; +import ImageMetadataValidationSchema from '@/services/schema/ImageSchema/ImageMetadataValidationSchema'; +import { z } from 'zod'; + +export interface UploadBeerPostImagesRequest extends UserExtendedNextApiRequest { + files?: Express.Multer.File[]; + query: { id: string }; + body: z.infer; +} diff --git a/src/controllers/beerPostLikes/index.ts b/src/controllers/beerPostLikes/index.ts new file mode 100644 index 0000000..ab32af2 --- /dev/null +++ b/src/controllers/beerPostLikes/index.ts @@ -0,0 +1,77 @@ +import { UserExtendedNextApiRequest } from "@/config/auth/types"; +import ServerError from "@/config/util/ServerError"; +import getBeerPostById from "@/services/BeerPost/getBeerPostById"; +import createBeerPostLike from "@/services/BeerPostLike/createBeerPostLike"; +import findBeerPostLikeById from "@/services/BeerPostLike/findBeerPostLikeById"; +import getBeerPostLikeCount from "@/services/BeerPostLike/getBeerPostLikeCount"; +import removeBeerPostLikeById from "@/services/BeerPostLike/removeBeerPostLikeById"; +import APIResponseValidationSchema from "@/validation/APIResponseValidationSchema"; +import { NextApiResponse, NextApiRequest } from "next"; +import { z } from "zod"; + +export const sendLikeRequest = async ( + req: UserExtendedNextApiRequest, + res: NextApiResponse>, +) => { + const user = req.user!; + const id = req.query.id as string; + + const beer = await getBeerPostById(id); + if (!beer) { + throw new ServerError('Could not find a beer post with that id', 404); + } + + const alreadyLiked = await findBeerPostLikeById({ + beerPostId: beer.id, + likedById: user.id, + }); + + const jsonResponse = { + success: true as const, + message: '', + statusCode: 200 as const, + }; + + if (alreadyLiked) { + await removeBeerPostLikeById({ beerLikeId: alreadyLiked.id }); + jsonResponse.message = 'Successfully unliked beer post'; + } else { + await createBeerPostLike({ id, user }); + jsonResponse.message = 'Successfully liked beer post'; + } + + res.status(200).json(jsonResponse); +}; + +export const getLikeCount = async ( + req: NextApiRequest, + res: NextApiResponse>, +) => { + const id = req.query.id as string; + + const likeCount = await getBeerPostLikeCount({ beerPostId: id }); + + res.status(200).json({ + success: true, + message: 'Successfully retrieved like count.', + statusCode: 200, + payload: { likeCount }, + }); +}; + +export const checkIfLiked = async ( + req: UserExtendedNextApiRequest, + res: NextApiResponse>, +) => { + const user = req.user!; + const beerPostId = req.query.id as string; + + const alreadyLiked = await findBeerPostLikeById({ beerPostId, likedById: user.id }); + + res.status(200).json({ + success: true, + message: alreadyLiked ? 'Beer post is liked.' : 'Beer post is not liked.', + statusCode: 200, + payload: { isLiked: !!alreadyLiked }, + }); +}; diff --git a/src/controllers/beerPosts/index.ts b/src/controllers/beerPosts/index.ts new file mode 100644 index 0000000..fc1f866 --- /dev/null +++ b/src/controllers/beerPosts/index.ts @@ -0,0 +1,143 @@ +import ServerError from '@/config/util/ServerError'; +import deleteBeerPostById from '@/services/BeerPost/deleteBeerPostById'; +import editBeerPostById from '@/services/BeerPost/editBeerPostById'; +import getBeerPostById from '@/services/BeerPost/getBeerPostById'; +import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; +import { NextApiResponse } from 'next'; +import { NextHandler } from 'next-connect'; +import { z } from 'zod'; +import getBeerRecommendations from '@/services/BeerPost/getBeerRecommendations'; +import getAllBeerPosts from '@/services/BeerPost/getAllBeerPosts'; +import DBClient from '@/prisma/DBClient'; +import createNewBeerPost from '@/services/BeerPost/createNewBeerPost'; +import { + BeerPostRequest, + CreateBeerPostRequest, + EditBeerPostRequest, + GetAllBeerPostsRequest, + GetBeerRecommendationsRequest, +} from './types'; + +export const checkIfBeerPostOwner = async ( + req: BeerPostRequestType, + res: NextApiResponse, + next: NextHandler, +) => { + const { user, query } = req; + const { id } = query; + + const beerPost = await getBeerPostById(id); + + if (!beerPost) { + throw new ServerError('Beer post not found', 404); + } + + if (beerPost.postedBy.id !== user!.id) { + throw new ServerError('You cannot edit that beer post.', 403); + } + + return next(); +}; + +export const editBeerPost = async ( + req: EditBeerPostRequest, + res: NextApiResponse>, +) => { + await editBeerPostById({ id: req.query.id, data: req.body }); + + res.status(200).json({ + message: 'Beer post updated successfully', + success: true, + statusCode: 200, + }); +}; + +export const deleteBeerPost = async (req: BeerPostRequest, res: NextApiResponse) => { + const { id } = req.query; + + const deleted = await deleteBeerPostById({ beerPostId: id }); + if (!deleted) { + throw new ServerError('Beer post not found', 404); + } + + res.status(200).json({ + message: 'Beer post deleted successfully', + success: true, + statusCode: 200, + }); +}; + +export const getBeerPostRecommendations = async ( + req: GetBeerRecommendationsRequest, + res: NextApiResponse>, +) => { + const { id } = req.query; + + const beerPost = await getBeerPostById(id); + + if (!beerPost) { + throw new ServerError('Beer post not found', 404); + } + + const pageNum = parseInt(req.query.page_num as string, 10); + const pageSize = parseInt(req.query.page_size as string, 10); + + const { count, beerRecommendations } = await getBeerRecommendations({ + beerPost, + pageNum, + pageSize, + }); + + res.setHeader('X-Total-Count', count); + res.status(200).json({ + success: true, + message: 'Recommendations fetched successfully', + statusCode: 200, + payload: beerRecommendations, + }); +}; + +export const getBeerPosts = async ( + req: GetAllBeerPostsRequest, + res: NextApiResponse>, +) => { + const pageNum = parseInt(req.query.page_num, 10); + const pageSize = parseInt(req.query.page_size, 10); + + const beerPosts = await getAllBeerPosts({ pageNum, pageSize }); + + const beerPostCount = await DBClient.instance.beerPost.count(); + + res.setHeader('X-Total-Count', beerPostCount); + + res.status(200).json({ + message: 'Beer posts retrieved successfully', + statusCode: 200, + payload: beerPosts, + success: true, + }); +}; + +export const createBeerPost = async ( + req: CreateBeerPostRequest, + res: NextApiResponse>, +) => { + const { name, description, styleId: typeId, abv, ibu, breweryId } = req.body; + + const newBeerPost = await createNewBeerPost({ + name, + description, + abv, + ibu, + styleId: typeId, + breweryId, + userId: req.user!.id, + }); + + res.status(201).json({ + message: 'Beer post created successfully', + statusCode: 201, + payload: newBeerPost, + success: true, + }); +}; diff --git a/src/controllers/beerPosts/types/index.ts b/src/controllers/beerPosts/types/index.ts new file mode 100644 index 0000000..a7b32aa --- /dev/null +++ b/src/controllers/beerPosts/types/index.ts @@ -0,0 +1,25 @@ +import { UserExtendedNextApiRequest } from '@/config/auth/types'; +import CreateBeerPostValidationSchema from '@/services/BeerPost/schema/CreateBeerPostValidationSchema'; +import EditBeerPostValidationSchema from '@/services/BeerPost/schema/EditBeerPostValidationSchema'; +import { NextApiRequest } from 'next'; +import { z } from 'zod'; + +export interface BeerPostRequest extends UserExtendedNextApiRequest { + query: { id: string }; +} + +export interface EditBeerPostRequest extends BeerPostRequest { + body: z.infer; +} + +export interface GetAllBeerPostsRequest extends NextApiRequest { + query: { page_num: string; page_size: string }; +} + +export interface GetBeerRecommendationsRequest extends BeerPostRequest { + query: { id: string; page_num: string; page_size: string }; +} + +export interface CreateBeerPostRequest extends UserExtendedNextApiRequest { + body: z.infer; +} diff --git a/src/pages/api/beers/[id]/images/index.ts b/src/pages/api/beers/[id]/images/index.ts index 69a245f..743e041 100644 --- a/src/pages/api/beers/[id]/images/index.ts +++ b/src/pages/api/beers/[id]/images/index.ts @@ -1,50 +1,16 @@ import NextConnectOptions from '@/config/nextConnect/NextConnectOptions'; import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; -import { UserExtendedNextApiRequest } from '@/config/auth/types'; import { createRouter } from 'next-connect'; import getCurrentUser from '@/config/nextConnect/middleware/getCurrentUser'; import { NextApiResponse } from 'next'; import { z } from 'zod'; -import ServerError from '@/config/util/ServerError'; import validateRequest from '@/config/nextConnect/middleware/validateRequest'; -import addBeerImageToDB from '@/services/BeerImage/addBeerImageToDB'; import ImageMetadataValidationSchema from '@/services/schema/ImageSchema/ImageMetadataValidationSchema'; import { uploadMiddlewareMultiple } from '@/config/multer/uploadMiddleware'; - -interface UploadBeerPostImagesRequest extends UserExtendedNextApiRequest { - files?: Express.Multer.File[]; - query: { id: string }; - body: z.infer; -} - -const processImageData = async ( - req: UploadBeerPostImagesRequest, - res: NextApiResponse>, -) => { - const { files, user, body } = req; - - if (!files || !files.length) { - throw new ServerError('No images uploaded', 400); - } - - const beerImages = await addBeerImageToDB({ - alt: body.alt, - caption: body.caption, - beerPostId: req.query.id, - userId: user!.id, - files, - }); - - res.status(200).json({ - success: true, - message: `Successfully uploaded ${beerImages.length} image${ - beerImages.length > 1 ? 's' : '' - }`, - statusCode: 200, - }); -}; +import { UploadBeerPostImagesRequest } from '@/controllers/beerImages/types'; +import { processBeerImageData } from '@/controllers/beerImages'; const router = createRouter< UploadBeerPostImagesRequest, @@ -56,7 +22,7 @@ router.post( // @ts-expect-error uploadMiddlewareMultiple, validateRequest({ bodySchema: ImageMetadataValidationSchema }), - processImageData, + processBeerImageData, ); const handler = router.handler(NextConnectOptions); diff --git a/src/pages/api/beers/[id]/index.ts b/src/pages/api/beers/[id]/index.ts index a393407..43ae6b9 100644 --- a/src/pages/api/beers/[id]/index.ts +++ b/src/pages/api/beers/[id]/index.ts @@ -1,73 +1,21 @@ -import getCurrentUser from '@/config/nextConnect/middleware/getCurrentUser'; -import getBeerPostById from '@/services/BeerPost/getBeerPostById'; -import { UserExtendedNextApiRequest } from '@/config/auth/types'; -import editBeerPostById from '@/services/BeerPost/editBeerPostById'; -import EditBeerPostValidationSchema from '@/services/BeerPost/schema/EditBeerPostValidationSchema'; -import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; import { NextApiResponse } from 'next'; -import { createRouter, NextHandler } from 'next-connect'; +import { createRouter } from 'next-connect'; import { z } from 'zod'; -import ServerError from '@/config/util/ServerError'; + +import getCurrentUser from '@/config/nextConnect/middleware/getCurrentUser'; import validateRequest from '@/config/nextConnect/middleware/validateRequest'; import NextConnectOptions from '@/config/nextConnect/NextConnectOptions'; -import deleteBeerPostById from '@/services/BeerPost/deleteBeerPostById'; -interface BeerPostRequest extends UserExtendedNextApiRequest { - query: { id: string }; -} +import { EditBeerPostRequest } from '@/controllers/beerPosts/types'; +import { + checkIfBeerPostOwner, + editBeerPost, + deleteBeerPost, +} from '@/controllers/beerPosts'; -interface EditBeerPostRequest extends BeerPostRequest { - body: z.infer; -} +import EditBeerPostValidationSchema from '@/services/BeerPost/schema/EditBeerPostValidationSchema'; -const checkIfBeerPostOwner = async ( - req: BeerPostRequestType, - res: NextApiResponse, - next: NextHandler, -) => { - const { user, query } = req; - const { id } = query; - - const beerPost = await getBeerPostById(id); - - if (!beerPost) { - throw new ServerError('Beer post not found', 404); - } - - if (beerPost.postedBy.id !== user!.id) { - throw new ServerError('You cannot edit that beer post.', 403); - } - - return next(); -}; - -const editBeerPost = async ( - req: EditBeerPostRequest, - res: NextApiResponse>, -) => { - await editBeerPostById({ id: req.query.id, data: req.body }); - - res.status(200).json({ - message: 'Beer post updated successfully', - success: true, - statusCode: 200, - }); -}; - -const deleteBeerPost = async (req: BeerPostRequest, res: NextApiResponse) => { - const { id } = req.query; - - const deleted = await deleteBeerPostById({ beerPostId: id }); - if (!deleted) { - throw new ServerError('Beer post not found', 404); - } - - res.status(200).json({ - message: 'Beer post deleted successfully', - success: true, - statusCode: 200, - }); -}; +import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; const router = createRouter< EditBeerPostRequest, diff --git a/src/pages/api/beers/[id]/like/index.ts b/src/pages/api/beers/[id]/like/index.ts index b85dc25..1a6ff46 100644 --- a/src/pages/api/beers/[id]/like/index.ts +++ b/src/pages/api/beers/[id]/like/index.ts @@ -1,67 +1,12 @@ import validateRequest from '@/config/nextConnect/middleware/validateRequest'; import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; -import getBeerPostById from '@/services/BeerPost/getBeerPostById'; import { UserExtendedNextApiRequest } from '@/config/auth/types'; import { createRouter } from 'next-connect'; import { z } from 'zod'; -import { NextApiRequest, NextApiResponse } from 'next'; -import ServerError from '@/config/util/ServerError'; -import createBeerPostLike from '@/services/BeerPostLike/createBeerPostLike'; -import removeBeerPostLikeById from '@/services/BeerPostLike/removeBeerPostLikeById'; -import findBeerPostLikeById from '@/services/BeerPostLike/findBeerPostLikeById'; +import { NextApiResponse } from 'next'; import getCurrentUser from '@/config/nextConnect/middleware/getCurrentUser'; import NextConnectOptions from '@/config/nextConnect/NextConnectOptions'; -import getBeerPostLikeCount from '@/services/BeerPostLike/getBeerPostLikeCount'; - -const sendLikeRequest = async ( - req: UserExtendedNextApiRequest, - res: NextApiResponse>, -) => { - const user = req.user!; - const id = req.query.id as string; - - const beer = await getBeerPostById(id); - if (!beer) { - throw new ServerError('Could not find a beer post with that id', 404); - } - - const alreadyLiked = await findBeerPostLikeById({ - beerPostId: beer.id, - likedById: user.id, - }); - - const jsonResponse = { - success: true as const, - message: '', - statusCode: 200 as const, - }; - - if (alreadyLiked) { - await removeBeerPostLikeById({ beerLikeId: alreadyLiked.id }); - jsonResponse.message = 'Successfully unliked beer post'; - } else { - await createBeerPostLike({ id, user }); - jsonResponse.message = 'Successfully liked beer post'; - } - - res.status(200).json(jsonResponse); -}; - -const getLikeCount = async ( - req: NextApiRequest, - res: NextApiResponse>, -) => { - const id = req.query.id as string; - - const likeCount = await getBeerPostLikeCount({ beerPostId: id }); - - res.status(200).json({ - success: true, - message: 'Successfully retrieved like count.', - statusCode: 200, - payload: { likeCount }, - }); -}; +import { sendLikeRequest, getLikeCount } from '@/controllers/beerPostLikes'; const router = createRouter< UserExtendedNextApiRequest, diff --git a/src/pages/api/beers/[id]/like/is-liked.ts b/src/pages/api/beers/[id]/like/is-liked.ts index 811cd9e..95bdfd1 100644 --- a/src/pages/api/beers/[id]/like/is-liked.ts +++ b/src/pages/api/beers/[id]/like/is-liked.ts @@ -6,24 +6,8 @@ import APIResponseValidationSchema from '@/validation/APIResponseValidationSchem import { NextApiResponse } from 'next'; import { createRouter } from 'next-connect'; import { z } from 'zod'; -import findBeerPostLikeById from '@/services/BeerPostLike/findBeerPostLikeById'; -const checkIfLiked = async ( - req: UserExtendedNextApiRequest, - res: NextApiResponse>, -) => { - const user = req.user!; - const beerPostId = req.query.id as string; - - const alreadyLiked = await findBeerPostLikeById({ beerPostId, likedById: user.id }); - - res.status(200).json({ - success: true, - message: alreadyLiked ? 'Beer post is liked.' : 'Beer post is not liked.', - statusCode: 200, - payload: { isLiked: !!alreadyLiked }, - }); -}; +import { checkIfLiked } from '@/controllers/beerPostLikes'; const router = createRouter< UserExtendedNextApiRequest, diff --git a/src/pages/api/beers/[id]/recommendations.ts b/src/pages/api/beers/[id]/recommendations.ts index bdcef88..0ea869b 100644 --- a/src/pages/api/beers/[id]/recommendations.ts +++ b/src/pages/api/beers/[id]/recommendations.ts @@ -1,52 +1,17 @@ import NextConnectOptions from '@/config/nextConnect/NextConnectOptions'; import validateRequest from '@/config/nextConnect/middleware/validateRequest'; -import ServerError from '@/config/util/ServerError'; -import getBeerPostById from '@/services/BeerPost/getBeerPostById'; -import getBeerRecommendations from '@/services/BeerPost/getBeerRecommendations'; +import { getBeerPostRecommendations } from '@/controllers/beerPosts'; +import { GetBeerRecommendationsRequest } from '@/controllers/beerPosts/types'; import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; -import { NextApiRequest, NextApiResponse } from 'next'; +import { NextApiResponse } from 'next'; import { createRouter } from 'next-connect'; import { z } from 'zod'; -interface BeerPostRequest extends NextApiRequest { - query: { id: string; page_num: string; page_size: string }; -} - const router = createRouter< - BeerPostRequest, + GetBeerRecommendationsRequest, NextApiResponse> >(); -const getBeerRecommendationsRequest = async ( - req: BeerPostRequest, - res: NextApiResponse>, -) => { - const { id } = req.query; - - const beerPost = await getBeerPostById(id); - - if (!beerPost) { - throw new ServerError('Beer post not found', 404); - } - - const pageNum = parseInt(req.query.page_num as string, 10); - const pageSize = parseInt(req.query.page_size as string, 10); - - const { count, beerRecommendations } = await getBeerRecommendations({ - beerPost, - pageNum, - pageSize, - }); - - res.setHeader('X-Total-Count', count); - res.status(200).json({ - success: true, - message: 'Recommendations fetched successfully', - statusCode: 200, - payload: beerRecommendations, - }); -}; - router.get( validateRequest({ querySchema: z.object({ @@ -55,7 +20,7 @@ router.get( page_size: z.string().regex(/^[0-9]+$/), }), }), - getBeerRecommendationsRequest, + getBeerPostRecommendations, ); const handler = router.handler(NextConnectOptions); diff --git a/src/pages/api/beers/create.ts b/src/pages/api/beers/create.ts index bd9ea15..bb9a0ce 100644 --- a/src/pages/api/beers/create.ts +++ b/src/pages/api/beers/create.ts @@ -1,41 +1,14 @@ -import { UserExtendedNextApiRequest } from '@/config/auth/types'; import validateRequest from '@/config/nextConnect/middleware/validateRequest'; import { createRouter } from 'next-connect'; -import createNewBeerPost from '@/services/BeerPost/createNewBeerPost'; + import CreateBeerPostValidationSchema from '@/services/BeerPost/schema/CreateBeerPostValidationSchema'; import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; import { NextApiResponse } from 'next'; import { z } from 'zod'; import NextConnectOptions from '@/config/nextConnect/NextConnectOptions'; import getCurrentUser from '@/config/nextConnect/middleware/getCurrentUser'; - -interface CreateBeerPostRequest extends UserExtendedNextApiRequest { - body: z.infer; -} - -const createBeerPost = async ( - req: CreateBeerPostRequest, - res: NextApiResponse>, -) => { - const { name, description, styleId: typeId, abv, ibu, breweryId } = req.body; - - const newBeerPost = await createNewBeerPost({ - name, - description, - abv, - ibu, - styleId: typeId, - breweryId, - userId: req.user!.id, - }); - - res.status(201).json({ - message: 'Beer post created successfully', - statusCode: 201, - payload: newBeerPost, - success: true, - }); -}; +import { createBeerPost } from '@/controllers/beerPosts'; +import { CreateBeerPostRequest } from '@/controllers/beerPosts/types'; const router = createRouter< CreateBeerPostRequest, diff --git a/src/pages/api/beers/index.ts b/src/pages/api/beers/index.ts index 6a5aa0a..da14773 100644 --- a/src/pages/api/beers/index.ts +++ b/src/pages/api/beers/index.ts @@ -1,40 +1,15 @@ import validateRequest from '@/config/nextConnect/middleware/validateRequest'; -import DBClient from '@/prisma/DBClient'; -import getAllBeerPosts from '@/services/BeerPost/getAllBeerPosts'; +import { getBeerPosts } from '@/controllers/beerPosts'; +import { GetAllBeerPostsRequest } from '@/controllers/beerPosts/types'; import PaginatedQueryResponseSchema from '@/services/schema/PaginatedQueryResponseSchema'; import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema'; -import { NextApiRequest, NextApiResponse } from 'next'; +import { NextApiResponse } from 'next'; import { createRouter } from 'next-connect'; import { z } from 'zod'; -interface GetBeerPostsRequest extends NextApiRequest { - query: z.infer; -} - -const getBeerPosts = async ( - req: GetBeerPostsRequest, - res: NextApiResponse>, -) => { - const pageNum = parseInt(req.query.page_num, 10); - const pageSize = parseInt(req.query.page_size, 10); - - const beerPosts = await getAllBeerPosts({ pageNum, pageSize }); - - const beerPostCount = await DBClient.instance.beerPost.count(); - - res.setHeader('X-Total-Count', beerPostCount); - - res.status(200).json({ - message: 'Beer posts retrieved successfully', - statusCode: 200, - payload: beerPosts, - success: true, - }); -}; - const router = createRouter< - GetBeerPostsRequest, + GetAllBeerPostsRequest, NextApiResponse> >();