import { GetServerSideProps, NextPage } from 'next'; import getAllBeerPosts from '@/services/BeerPost/getAllBeerPosts'; import { useRouter } from 'next/router'; import DBClient from '@/prisma/DBClient'; import Layout from '@/components/ui/Layout'; import BeerIndexPaginationBar from '@/components/BeerIndex/BeerIndexPaginationBar'; import BeerCard from '@/components/BeerIndex/BeerCard'; import beerPostQueryResult from '@/services/BeerPost/schema/BeerPostQueryResult'; import Head from 'next/head'; import { z } from 'zod'; import Link from 'next/link'; import UserContext from '@/contexts/userContext'; import { useContext } from 'react'; interface BeerPageProps { initialBeerPosts: z.infer[]; pageCount: number; } const BeerPage: NextPage = ({ initialBeerPosts, pageCount }) => { const router = useRouter(); const { query } = router; const { user } = useContext(UserContext); const pageNum = parseInt(query.page_num as string, 10) || 1; return ( Beer

The Biergarten Index

Page {pageNum} of {pageCount}

{!!user && (
Create a new beer post
)}
{initialBeerPosts.map((post) => { return ; })}
); }; export const getServerSideProps: GetServerSideProps = async (context) => { const { query } = context; const pageNumber = parseInt(query.page_num as string, 10) || 1; const pageSize = 12; const numberOfPosts = await DBClient.instance.beerPost.count(); const pageCount = numberOfPosts ? Math.ceil(numberOfPosts / pageSize) : 0; const beerPosts = await getAllBeerPosts(pageNumber, pageSize); return { props: { initialBeerPosts: JSON.parse(JSON.stringify(beerPosts)), pageCount }, }; }; export default BeerPage;