From eec082e73a52f0099c1b01dfae9ac04663f5a9ee Mon Sep 17 00:00:00 2001 From: Aaron William Po Date: Sun, 23 Apr 2023 20:31:09 -0400 Subject: [PATCH] Add date established to brewery page --- src/components/BeerIndex/BeerCard.tsx | 2 +- src/components/BreweryIndex/BreweryCard.tsx | 27 ++-- src/pages/beers/index.tsx | 9 +- src/pages/breweries/index.tsx | 148 ++++++++++-------- .../migrations/20230423235322_/migration.sql | 2 + src/prisma/schema.prisma | 3 +- .../seed/create/createNewBreweryPosts.ts | 3 + src/services/BeerPost/getAllBeerPosts.ts | 1 + .../BreweryPost/getAllBreweryPosts.ts | 3 + .../BreweryPost/getBreweryPostById.ts | 2 + .../types/BreweryPostQueryResult.ts | 2 + 11 files changed, 119 insertions(+), 83 deletions(-) create mode 100644 src/prisma/migrations/20230423235322_/migration.sql diff --git a/src/components/BeerIndex/BeerCard.tsx b/src/components/BeerIndex/BeerCard.tsx index 26b1a73..43ccb46 100644 --- a/src/components/BeerIndex/BeerCard.tsx +++ b/src/components/BeerIndex/BeerCard.tsx @@ -46,7 +46,7 @@ const BeerCard: FC<{ post: z.infer }> = ({ post }) =
- liked by {likeCount} users + liked by {likeCount} users {user && }
diff --git a/src/components/BreweryIndex/BreweryCard.tsx b/src/components/BreweryIndex/BreweryCard.tsx index b7e97c1..be2d789 100644 --- a/src/components/BreweryIndex/BreweryCard.tsx +++ b/src/components/BreweryIndex/BreweryCard.tsx @@ -2,7 +2,7 @@ import UserContext from '@/contexts/userContext'; import useGetBreweryPostLikeCount from '@/hooks/useGetBreweryPostLikeCount'; import BreweryPostQueryResult from '@/services/BreweryPost/types/BreweryPostQueryResult'; import { FC, useContext } from 'react'; -import { Link } from 'react-daisyui'; +import Link from 'next/link'; import { z } from 'zod'; import Image from 'next/image'; import BreweryPostLikeButton from './BreweryPostLikeButton'; @@ -24,17 +24,26 @@ const BreweryCard: FC<{ brewery: z.infer }> = ({ /> )} -
+
-

- {brewery.name} +

+ + {brewery.name} +

-

{brewery.location}

+

+ located in {brewery.location} +

+

+ est. {brewery.dateEstablished.getFullYear()} +

+
+
+ liked by {likeCount} users + {user && ( + + )}
- liked by {likeCount} users - {user && ( - - )}
); diff --git a/src/pages/beers/index.tsx b/src/pages/beers/index.tsx index f73db99..df6b2dd 100644 --- a/src/pages/beers/index.tsx +++ b/src/pages/beers/index.tsx @@ -34,14 +34,17 @@ const BeerPage: NextPage = () => { return ( <> - Beer - + Beers | The Biergarten App +
-

The Biergarten Index

+

The Biergarten App

Beers

{!!user && ( diff --git a/src/pages/breweries/index.tsx b/src/pages/breweries/index.tsx index 2fbd3a1..056af9f 100644 --- a/src/pages/breweries/index.tsx +++ b/src/pages/breweries/index.tsx @@ -5,6 +5,7 @@ import UserContext from '@/contexts/userContext'; import useBreweryPosts from '@/hooks/useBreweryPosts'; import BreweryPostQueryResult from '@/services/BreweryPost/types/BreweryPostQueryResult'; import { NextPage } from 'next'; +import Head from 'next/head'; import { useContext, MutableRefObject, useRef } from 'react'; import { Link } from 'react-daisyui'; import { FaPlus, FaArrowUp } from 'react-icons/fa'; @@ -34,81 +35,90 @@ const BreweryPage: NextPage = () => { const pageRef: MutableRefObject = useRef(null); return ( -
-
-
-
-

The Biergarten Index

-

Breweries

+ <> + + Breweries + + +
+
+
+
+

The Biergarten App

+

Breweries

+
+ {!!user && ( +
+ + + +
+ )} +
+
+ {!!breweryPosts.length && !isLoading && ( + <> + {breweryPosts.map((breweryPost) => { + return ( +
+ +
+ ); + })} + + )} + {(isLoading || isLoadingMore) && ( + <> + {Array.from({ length: PAGE_SIZE }, (_, i) => ( + + ))} + + )}
- {!!user && ( -
- - - + + {(isLoading || isLoadingMore) && ( +
+
)} -
-
- {!!breweryPosts.length && !isLoading && ( - <> - {breweryPosts.map((breweryPost) => { - return ( -
- -
- ); - })} - - )} - {(isLoading || isLoadingMore) && ( - <> - {Array.from({ length: PAGE_SIZE }, (_, i) => ( - - ))} - + {isAtEnd && !isLoading && ( +
+
+ +
+
)}
- - {(isLoading || isLoadingMore) && ( -
- -
- )} - {isAtEnd && !isLoading && ( -
-
- -
-
- )}
-
+ ); }; diff --git a/src/prisma/migrations/20230423235322_/migration.sql b/src/prisma/migrations/20230423235322_/migration.sql new file mode 100644 index 0000000..f62f7b0 --- /dev/null +++ b/src/prisma/migrations/20230423235322_/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "BreweryPost" ADD COLUMN "dateEstablished" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/src/prisma/schema.prisma b/src/prisma/schema.prisma index 96eb136..46c4959 100644 --- a/src/prisma/schema.prisma +++ b/src/prisma/schema.prisma @@ -105,7 +105,8 @@ model BreweryPost { postedById String breweryComments BreweryComment[] breweryImages BreweryImage[] - BreweryPostLike BreweryPostLike[] + breweryPostLike BreweryPostLike[] + dateEstablished DateTime @default(now()) @db.Timestamptz(3) } model BreweryComment { diff --git a/src/prisma/seed/create/createNewBreweryPosts.ts b/src/prisma/seed/create/createNewBreweryPosts.ts index 7eac097..6dcda6f 100644 --- a/src/prisma/seed/create/createNewBreweryPosts.ts +++ b/src/prisma/seed/create/createNewBreweryPosts.ts @@ -24,6 +24,8 @@ const createNewBreweryPosts = async ({ const description = faker.lorem.lines(5); const user = users[Math.floor(Math.random() * users.length)]; const createdAt = faker.date.past(1); + const dateEstablished = faker.date.past(40); + breweryPromises.push( prisma.breweryPost.create({ data: { @@ -32,6 +34,7 @@ const createNewBreweryPosts = async ({ description, postedBy: { connect: { id: user.id } }, createdAt, + dateEstablished, }, }), ); diff --git a/src/services/BeerPost/getAllBeerPosts.ts b/src/services/BeerPost/getAllBeerPosts.ts index 9610cd0..8b1ca2e 100644 --- a/src/services/BeerPost/getAllBeerPosts.ts +++ b/src/services/BeerPost/getAllBeerPosts.ts @@ -23,6 +23,7 @@ const getAllBeerPosts = async (pageNum: number, pageSize: number) => { }, take: pageSize, skip, + orderBy: { createdAt: 'desc' }, }, ); diff --git a/src/services/BreweryPost/getAllBreweryPosts.ts b/src/services/BreweryPost/getAllBreweryPosts.ts index 6c9ee2c..078c39c 100644 --- a/src/services/BreweryPost/getAllBreweryPosts.ts +++ b/src/services/BreweryPost/getAllBreweryPosts.ts @@ -18,7 +18,10 @@ const getAllBreweryPosts = async (pageNum?: number, pageSize?: number) => { name: true, postedBy: { select: { username: true, id: true } }, breweryImages: { select: { path: true, caption: true, id: true, alt: true } }, + createdAt: true, + dateEstablished: true, }, + orderBy: { createdAt: 'desc' }, }); return breweryPosts; diff --git a/src/services/BreweryPost/getBreweryPostById.ts b/src/services/BreweryPost/getBreweryPostById.ts index bcb57e0..9688b0f 100644 --- a/src/services/BreweryPost/getBreweryPostById.ts +++ b/src/services/BreweryPost/getBreweryPostById.ts @@ -13,6 +13,8 @@ const getBreweryPostById = async (id: string) => { name: true, breweryImages: { select: { path: true, caption: true, id: true, alt: true } }, postedBy: { select: { username: true, id: true } }, + createdAt: true, + dateEstablished: true, }, where: { id }, }); diff --git a/src/services/BreweryPost/types/BreweryPostQueryResult.ts b/src/services/BreweryPost/types/BreweryPostQueryResult.ts index 59f3ba6..e6962c5 100644 --- a/src/services/BreweryPost/types/BreweryPostQueryResult.ts +++ b/src/services/BreweryPost/types/BreweryPostQueryResult.ts @@ -8,6 +8,8 @@ const BreweryPostQueryResult = z.object({ breweryImages: z.array( z.object({ path: z.string(), caption: z.string(), id: z.string(), alt: z.string() }), ), + createdAt: z.coerce.date(), + dateEstablished: z.coerce.date(), }); export default BreweryPostQueryResult;