From bb2ed890bd87d8e13885649214efeb8115c08ddd Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 08:42:48 +1100 Subject: [PATCH 1/7] fixed filtering by changing filtering type into a json array --- frontend/src/app/jobs/actions.ts | 59 +++++++++++-------- frontend/src/app/jobs/page.tsx | 5 +- .../src/context/filter/filter-provider.tsx | 1 + 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/frontend/src/app/jobs/actions.ts b/frontend/src/app/jobs/actions.ts index 50842e0..0901046 100644 --- a/frontend/src/app/jobs/actions.ts +++ b/frontend/src/app/jobs/actions.ts @@ -3,9 +3,11 @@ import { MongoClient, ObjectId } from "mongodb"; import { JobFilters } from "@/types/filters"; -import { Job } from "@/types/job"; +import { INDUSTRY_FIELDS, Job, JOB_TYPES, WORKING_RIGHTS } from "@/types/job"; +import {JobType, WorkingRight, IndustryField } from "@/types/job"; import serializeJob from "@/lib/utils"; + const PAGE_SIZE = 20; export interface MongoJob extends Omit { @@ -37,33 +39,43 @@ export async function getJobs( ); } + const client = new MongoClient(process.env.MONGODB_URI ?? ""); try { await client.connect(); const collection = client.db("default").collection("active_jobs"); - + console.log("filters: " + JSON.stringify(filters, null, 2)); + const array_jobs = JSON.parse(JSON.stringify(filters, null, 2)); + console.log("array: ", array_jobs); + console.log("JUST INDUSTRY FIELDSy: ", array_jobs["industryFields[]"]); + console.log("xxxxxxx: ", filters.industryFields) + console.log('search: ' + filters.search); + // Build the query object with proper typing const query = { outdated: false, - ...(filters.workingRights?.length && { - working_rights: { - $in: Array.isArray(filters.workingRights) - ? filters.workingRights - : [filters.workingRights], - }, - }), - ...(filters.jobTypes?.length && { - type: { - $in: Array.isArray(filters.jobTypes) - ? filters.jobTypes - : [filters.jobTypes], - }, - }), - ...(filters.industryFields?.length && { - industry_field: { - $in: Array.isArray(filters.industryFields) - ? filters.industryFields - : [filters.industryFields], +...(array_jobs["workingRights[]"] !== undefined && + array_jobs["workingRights[]"].length && { + working_rights: { + $in: Array.isArray(array_jobs["workingRights[]"]) + ? array_jobs["workingRights[]"] + : [array_jobs["workingRights[]"]], + }, + }), + ...(array_jobs["locations[]"] !== undefined && + array_jobs["locations[]"].length && { + locations: { + $in: Array.isArray(array_jobs["locations[]"]) + ? array_jobs["locations[]"] + : [array_jobs["locations[]"]], + }, + }), + ...(array_jobs["industryFields[]"] !== undefined && + array_jobs["industryFields[]"].length && { + industryField: { + $in: Array.isArray(array_jobs["industryFields[]"]) + ? array_jobs["industryFields[]"] + : [array_jobs["industryFields[]"]], }, }), ...(filters.search && { @@ -74,6 +86,7 @@ export async function getJobs( }), }; + console.log("MongoDB Query:", JSON.stringify(query, null, 2)); const page = filters.page || 1; const skip = (page - 1) * PAGE_SIZE; @@ -81,14 +94,14 @@ export async function getJobs( collection.find(query).skip(skip).limit(PAGE_SIZE).toArray(), collection.countDocuments(query), ]); - + console.log(jobs); return { jobs: (jobs as MongoJob[]).map(serializeJob), total, }; } catch (error) { console.error("Server Error:", { - error, + error, timestamp: new Date().toISOString(), filters, }); diff --git a/frontend/src/app/jobs/page.tsx b/frontend/src/app/jobs/page.tsx index 03c5247..0b7322b 100644 --- a/frontend/src/app/jobs/page.tsx +++ b/frontend/src/app/jobs/page.tsx @@ -13,12 +13,13 @@ import HeadingText from "@/components/layout/heading-text"; export default async function JobsPage({ searchParams, }: { - searchParams: Promise>; + searchParams: Partial; }) { // https://nextjs.org/docs/app/api-reference/file-conventions/page#searchparams-optional // searchParams is a promise that resolves to an object containing the search // parameters of the current URL. - const { jobs, total } = await getJobs(await searchParams); + console.log("Search Params:", JSON.stringify(searchParams, null, 2)); + const { jobs, total } = await getJobs(searchParams); return (
diff --git a/frontend/src/context/filter/filter-provider.tsx b/frontend/src/context/filter/filter-provider.tsx index b5014ff..b0335f8 100644 --- a/frontend/src/context/filter/filter-provider.tsx +++ b/frontend/src/context/filter/filter-provider.tsx @@ -36,6 +36,7 @@ export function FilterProvider({ children }: { children: ReactNode }) { setFilters((curr) => ({ ...curr, ...newFilters })); setSelectedJob(null); const params = CreateQueryString(newFilters); + console.log(params); router.push(`/jobs?${params}`); }; From f80f44ed0b4f05f0f9ee22fd85dacc97fe497d07 Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 19:11:30 +1100 Subject: [PATCH 2/7] Completed the filtering, so that it filters industry as well --- frontend/src/app/jobs/actions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/jobs/actions.ts b/frontend/src/app/jobs/actions.ts index 0901046..3002566 100644 --- a/frontend/src/app/jobs/actions.ts +++ b/frontend/src/app/jobs/actions.ts @@ -72,7 +72,7 @@ export async function getJobs( }), ...(array_jobs["industryFields[]"] !== undefined && array_jobs["industryFields[]"].length && { - industryField: { + industry_field: { $in: Array.isArray(array_jobs["industryFields[]"]) ? array_jobs["industryFields[]"] : [array_jobs["industryFields[]"]], From b30613fb47eab1c714865d4e985617d32911131c Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 19:22:39 +1100 Subject: [PATCH 3/7] fixed unused imports for lint checker --- frontend/src/app/jobs/actions.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/jobs/actions.ts b/frontend/src/app/jobs/actions.ts index 3002566..1fed013 100644 --- a/frontend/src/app/jobs/actions.ts +++ b/frontend/src/app/jobs/actions.ts @@ -3,8 +3,8 @@ import { MongoClient, ObjectId } from "mongodb"; import { JobFilters } from "@/types/filters"; -import { INDUSTRY_FIELDS, Job, JOB_TYPES, WORKING_RIGHTS } from "@/types/job"; -import {JobType, WorkingRight, IndustryField } from "@/types/job"; +import { Job} from "@/types/job"; + import serializeJob from "@/lib/utils"; @@ -45,12 +45,7 @@ export async function getJobs( try { await client.connect(); const collection = client.db("default").collection("active_jobs"); - console.log("filters: " + JSON.stringify(filters, null, 2)); const array_jobs = JSON.parse(JSON.stringify(filters, null, 2)); - console.log("array: ", array_jobs); - console.log("JUST INDUSTRY FIELDSy: ", array_jobs["industryFields[]"]); - console.log("xxxxxxx: ", filters.industryFields) - console.log('search: ' + filters.search); // Build the query object with proper typing const query = { outdated: false, @@ -86,7 +81,6 @@ export async function getJobs( }), }; - console.log("MongoDB Query:", JSON.stringify(query, null, 2)); const page = filters.page || 1; const skip = (page - 1) * PAGE_SIZE; @@ -94,7 +88,6 @@ export async function getJobs( collection.find(query).skip(skip).limit(PAGE_SIZE).toArray(), collection.countDocuments(query), ]); - console.log(jobs); return { jobs: (jobs as MongoJob[]).map(serializeJob), total, From 5d6ff9c78d0446cdf738189489afd9434b186bff Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 19:25:15 +1100 Subject: [PATCH 4/7] made code prettier --- frontend/src/app/jobs/actions.ts | 54 +++++++++++++++----------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/frontend/src/app/jobs/actions.ts b/frontend/src/app/jobs/actions.ts index 1fed013..b42c56d 100644 --- a/frontend/src/app/jobs/actions.ts +++ b/frontend/src/app/jobs/actions.ts @@ -3,11 +3,10 @@ import { MongoClient, ObjectId } from "mongodb"; import { JobFilters } from "@/types/filters"; -import { Job} from "@/types/job"; +import { Job } from "@/types/job"; import serializeJob from "@/lib/utils"; - const PAGE_SIZE = 20; export interface MongoJob extends Omit { @@ -39,7 +38,6 @@ export async function getJobs( ); } - const client = new MongoClient(process.env.MONGODB_URI ?? ""); try { @@ -49,30 +47,30 @@ export async function getJobs( // Build the query object with proper typing const query = { outdated: false, -...(array_jobs["workingRights[]"] !== undefined && - array_jobs["workingRights[]"].length && { - working_rights: { - $in: Array.isArray(array_jobs["workingRights[]"]) - ? array_jobs["workingRights[]"] - : [array_jobs["workingRights[]"]], - }, - }), - ...(array_jobs["locations[]"] !== undefined && - array_jobs["locations[]"].length && { - locations: { - $in: Array.isArray(array_jobs["locations[]"]) - ? array_jobs["locations[]"] - : [array_jobs["locations[]"]], - }, - }), - ...(array_jobs["industryFields[]"] !== undefined && - array_jobs["industryFields[]"].length && { - industry_field: { - $in: Array.isArray(array_jobs["industryFields[]"]) - ? array_jobs["industryFields[]"] - : [array_jobs["industryFields[]"]], - }, - }), + ...(array_jobs["workingRights[]"] !== undefined && + array_jobs["workingRights[]"].length && { + working_rights: { + $in: Array.isArray(array_jobs["workingRights[]"]) + ? array_jobs["workingRights[]"] + : [array_jobs["workingRights[]"]], + }, + }), + ...(array_jobs["locations[]"] !== undefined && + array_jobs["locations[]"].length && { + locations: { + $in: Array.isArray(array_jobs["locations[]"]) + ? array_jobs["locations[]"] + : [array_jobs["locations[]"]], + }, + }), + ...(array_jobs["industryFields[]"] !== undefined && + array_jobs["industryFields[]"].length && { + industry_field: { + $in: Array.isArray(array_jobs["industryFields[]"]) + ? array_jobs["industryFields[]"] + : [array_jobs["industryFields[]"]], + }, + }), ...(filters.search && { $or: [ { title: { $regex: filters.search, $options: "i" } }, @@ -94,7 +92,7 @@ export async function getJobs( }; } catch (error) { console.error("Server Error:", { - error, + error, timestamp: new Date().toISOString(), filters, }); From dcb947a78e9b8ee4d9b96d666b3598477e36c175 Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 19:32:54 +1100 Subject: [PATCH 5/7] fixed compile errors --- frontend/src/app/jobs/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/jobs/page.tsx b/frontend/src/app/jobs/page.tsx index 0b7322b..da136f7 100644 --- a/frontend/src/app/jobs/page.tsx +++ b/frontend/src/app/jobs/page.tsx @@ -13,13 +13,13 @@ import HeadingText from "@/components/layout/heading-text"; export default async function JobsPage({ searchParams, }: { - searchParams: Partial; + searchParams: Promise>; }) { // https://nextjs.org/docs/app/api-reference/file-conventions/page#searchparams-optional // searchParams is a promise that resolves to an object containing the search // parameters of the current URL. - console.log("Search Params:", JSON.stringify(searchParams, null, 2)); - const { jobs, total } = await getJobs(searchParams); + + const { jobs, total } = await getJobs(await searchParams); return (
From 1c4aa7654c4ad832148a6522ec43a6b884767e9c Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Fri, 31 Jan 2025 23:11:02 +1100 Subject: [PATCH 6/7] made pages prettier --- frontend/src/app/jobs/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/jobs/page.tsx b/frontend/src/app/jobs/page.tsx index da136f7..a971df7 100644 --- a/frontend/src/app/jobs/page.tsx +++ b/frontend/src/app/jobs/page.tsx @@ -18,7 +18,7 @@ export default async function JobsPage({ // https://nextjs.org/docs/app/api-reference/file-conventions/page#searchparams-optional // searchParams is a promise that resolves to an object containing the search // parameters of the current URL. - + const { jobs, total } = await getJobs(await searchParams); return ( From e7444073471bdc96a4440f8f9265aeb33142dc6c Mon Sep 17 00:00:00 2001 From: AdityaZDesai Date: Sat, 1 Feb 2025 01:27:00 +1100 Subject: [PATCH 7/7] removed cnsole.log statement --- frontend/src/context/filter/filter-provider.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/context/filter/filter-provider.tsx b/frontend/src/context/filter/filter-provider.tsx index b0335f8..b5014ff 100644 --- a/frontend/src/context/filter/filter-provider.tsx +++ b/frontend/src/context/filter/filter-provider.tsx @@ -36,7 +36,6 @@ export function FilterProvider({ children }: { children: ReactNode }) { setFilters((curr) => ({ ...curr, ...newFilters })); setSelectedJob(null); const params = CreateQueryString(newFilters); - console.log(params); router.push(`/jobs?${params}`); };