diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index d208bbd..e36302c 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -15,7 +15,7 @@ from django.shortcuts import get_object_or_404 from rest_framework import status class StandardResultsSetPagination(PageNumberPagination): - page_size = 10 + page_size = 25 page_size_query_param = 'page_size' max_page_size = 1000 diff --git a/frontend/src/routes/adventures/+page.server.ts b/frontend/src/routes/adventures/+page.server.ts index 4f3794e..1b0edcf 100644 --- a/frontend/src/routes/adventures/+page.server.ts +++ b/frontend/src/routes/adventures/+page.server.ts @@ -13,12 +13,33 @@ export const load = (async (event) => { if (!event.locals.user) { return redirect(302, '/login'); } else { - let next = null; - let previous = null; let count = 0; let adventures: Adventure[] = []; + + const visited = event.url.searchParams.get('visited'); + const planned = event.url.searchParams.get('planned'); + + let typeString: string = ''; + + if (visited == 'on') { + typeString += 'visited'; + } + if (planned == 'on') { + if (typeString) { + typeString += ','; + } + typeString += 'planned'; + } else if (!visited && !planned) { + typeString = 'visited,planned'; + } + + const include_collections = event.url.searchParams.get('include_collections') || 'false'; + const order_by = event.url.searchParams.get('order_by') || 'updated_at'; + const order_direction = event.url.searchParams.get('order_direction') || 'asc'; + const page = event.url.searchParams.get('page') || '1'; + let initialFetch = await fetch( - `${serverEndpoint}/api/adventures/filtered?types=visited,planned&include_collections=false`, + `${serverEndpoint}/api/adventures/filtered?types=${typeString}&order_by=${order_by}&order_direction=${order_direction}&include_collections=${include_collections}&page=${page}`, { headers: { Cookie: `${event.cookies.get('auth')}` @@ -31,8 +52,7 @@ export const load = (async (event) => { } else { let res = await initialFetch.json(); let visited = res.results as Adventure[]; - next = res.next; - previous = res.previous; + count = res.count; adventures = [...adventures, ...visited]; } @@ -40,8 +60,6 @@ export const load = (async (event) => { return { props: { adventures, - next, - previous, count } }; @@ -384,203 +402,5 @@ export const actions: Actions = { let image_url = adventure.image; let link_url = adventure.link; return { image_url, link_url }; - }, - get: async (event) => { - if (!event.locals.user) { - } - - const formData = await event.request.formData(); - const visited = formData.get('visited'); - const planned = formData.get('planned'); - - let include_collections = formData.get('include_collections') as string; - - if (include_collections) { - include_collections = 'true'; - } else { - include_collections = 'false'; - } - - const order_direction = formData.get('order_direction') as string; - const order_by = formData.get('order_by') as string; - - console.log(order_direction, order_by); - - let adventures: Adventure[] = []; - - if (!event.locals.user) { - return { - status: 401, - body: { message: 'Unauthorized' } - }; - } - - let filterString = ''; - if (visited) { - filterString += 'visited'; - } - if (planned) { - if (filterString) { - filterString += ','; - } - filterString += 'planned'; - } - if (!filterString) { - filterString = ''; - } - - let next = null; - let previous = null; - let count = 0; - - console.log(filterString); - - let visitedFetch = await fetch( - `${serverEndpoint}/api/adventures/filtered?types=${filterString}&order_by=${order_by}&order_direction=${order_direction}&include_collections=${include_collections}`, - { - headers: { - Cookie: `${event.cookies.get('auth')}` - } - } - ); - if (!visitedFetch.ok) { - console.error('Failed to fetch visited adventures'); - return redirect(302, '/login'); - } else { - let res = await visitedFetch.json(); - let visited = res.results as Adventure[]; - next = res.next; - previous = res.previous; - count = res.count; - adventures = [...adventures, ...visited]; - console.log(next, previous, count); - } - - return { - adventures, - next, - previous, - count - }; - }, - changePage: async (event) => { - const formData = await event.request.formData(); - const next = formData.get('next') as string; - const previous = formData.get('previous') as string; - const page = formData.get('page') as string; - - if (!event.locals.user) { - return { - status: 401, - body: { message: 'Unauthorized' } - }; - } - - if (!page) { - return { - status: 400, - body: { error: 'Missing required fields' } - }; - } - - // Start with the provided URL or default to the filtered adventures endpoint - let url: string = next || previous || '/api/adventures/filtered'; - - // Extract the path starting from '/api/adventures' - const apiIndex = url.indexOf('/api/adventures'); - if (apiIndex !== -1) { - url = url.slice(apiIndex); - } else { - url = '/api/adventures/filtered'; - } - - // Replace or add the page number in the URL - if (url.includes('page=')) { - url = url.replace(/page=\d+/, `page=${page}`); - } else { - // If 'page=' is not in the URL, add it - url += url.includes('?') ? '&' : '?'; - url += `page=${page}`; - } - - const fullUrl = `${serverEndpoint}${url}`; - console.log(fullUrl); - console.log(serverEndpoint); - - try { - const response = await fetch(fullUrl, { - headers: { - 'Content-Type': 'application/json', - Cookie: `${event.cookies.get('auth')}` - } - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.json(); - let adventures = data.results as Adventure[]; - let next = data.next; - let previous = data.previous; - let count = data.count; - - return { - status: 200, - body: { - adventures, - next, - previous, - count, - page - } - }; - } catch (error) { - console.error('Error fetching data:', error); - return { - status: 500, - body: { error: 'Failed to fetch data' } - }; - } - }, - all: async (event) => { - if (!event.locals.user) { - return { - status: 401, - body: { message: 'Unauthorized' } - }; - } - - const formData = await event.request.formData(); - - let include_collections = formData.get('include_collections') as string; - - if (include_collections !== 'true' && include_collections !== 'false') { - include_collections = 'false'; - } - - let adventures: Adventure[] = []; - - let visitedFetch = await fetch( - `${serverEndpoint}/api/adventures/all/?include_collections=${include_collections}`, - { - headers: { - Cookie: `${event.cookies.get('auth')}`, - 'Content-Type': 'application/json' - } - } - ); - if (!visitedFetch.ok) { - console.error('Failed to fetch all adventures'); - return redirect(302, '/login'); - } else { - console.log('Fetched all adventures'); - let res = await visitedFetch.json(); - console.log(res); - adventures = res as Adventure[]; - } - - return { - adventures - }; } }; diff --git a/frontend/src/routes/adventures/+page.svelte b/frontend/src/routes/adventures/+page.svelte index 3ab518b..5bd6a99 100644 --- a/frontend/src/routes/adventures/+page.svelte +++ b/frontend/src/routes/adventures/+page.svelte @@ -1,5 +1,7 @@