From 5bbef1866b987545802f058c07631e6be419c9b2 Mon Sep 17 00:00:00 2001
From: Patryk Omiotek <patryk.omiotek@gmail.com>
Date: Thu, 1 Feb 2024 20:11:44 +0100
Subject: [PATCH] feat: offer page

---
 .../(public)/job-offers/[publicId]/page.tsx   | 39 +++++++++++++++++++
 .../src/app/(public)/job-offers/page.tsx      |  9 ++++-
 apps/jobboard/src/services/offers.ts          |  5 +++
 3 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx

diff --git a/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx b/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx
new file mode 100644
index 0000000..87305b1
--- /dev/null
+++ b/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx
@@ -0,0 +1,39 @@
+import { Metadata } from 'next';
+
+import { Header } from '@jobboard/common-ui';
+
+import Link from 'next/link';
+import { fetchOffer } from '../../../../services/offers';
+import { notFound } from 'next/navigation';
+
+// export const metadata: Metadata = {
+//   title: 'Job Offers',
+// };
+
+type Params = {
+  params: {
+    publicId: string;
+  };
+};
+
+export default async function JobOfferPage({ params }: Params) {
+  console.log(params.publicId);
+  const offer = await fetchOffer(params.publicId);
+  console.log(offer);
+
+  if (!offer) {
+    notFound();
+  }
+
+  return (
+    <div>
+      <Header>Job Offer</Header>
+      <Link href="/job-offers">Back to list</Link>
+      <div key={offer.public_id} className="my-4">
+        <h2 className="font-bold text-2xl">{offer.title}</h2>
+        <p>{offer.description}</p>
+        <p>Salary: {offer.salary} PLN</p>
+      </div>
+    </div>
+  );
+}
diff --git a/apps/jobboard/src/app/(public)/job-offers/page.tsx b/apps/jobboard/src/app/(public)/job-offers/page.tsx
index c8ad0dc..abc3cf3 100644
--- a/apps/jobboard/src/app/(public)/job-offers/page.tsx
+++ b/apps/jobboard/src/app/(public)/job-offers/page.tsx
@@ -18,7 +18,14 @@ export default async function JobOffersPage() {
       <Link href="/job-offers/create">Create offer</Link>
       {jobOffers.map((offer) => (
         <div key={offer.public_id} className="my-4">
-          <h2 className="font-bold text-2xl">{offer.title}</h2>
+          <h2 className="font-bold text-2xl">
+            <Link
+              href={`/job-offers/${offer.public_id}`}
+              className="text-blue-600"
+            >
+              {offer.title}
+            </Link>
+          </h2>
           <p>{offer.description}</p>
           <p>Salary: {offer.salary} PLN</p>
         </div>
diff --git a/apps/jobboard/src/services/offers.ts b/apps/jobboard/src/services/offers.ts
index e1365e0..1ecdefe 100644
--- a/apps/jobboard/src/services/offers.ts
+++ b/apps/jobboard/src/services/offers.ts
@@ -1,3 +1,4 @@
+import { JobOffer } from '@prisma/client';
 import db from '@jobboard/prisma-client';
 
 export const fetchJobOffers = async () => {
@@ -10,3 +11,7 @@ export const fetchJobOffers = async () => {
     },
   });
 };
+
+export const fetchOffer = async (publicId: JobOffer['public_id']) => {
+  return db.jobOffer.findUnique({ where: { public_id: publicId } });
+};