diff --git a/backend/server/adventures/migrations/0010_adventure_created_at_collection_created_at.py b/backend/server/adventures/migrations/0010_adventure_created_at_collection_created_at.py
new file mode 100644
index 0000000..949ad10
--- /dev/null
+++ b/backend/server/adventures/migrations/0010_adventure_created_at_collection_created_at.py
@@ -0,0 +1,26 @@
+# Generated by Django 5.0.6 on 2024-07-18 19:27
+
+import django.utils.timezone
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('adventures', '0009_alter_adventure_image'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='adventure',
+ name='created_at',
+ field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='collection',
+ name='created_at',
+ field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+ preserve_default=False,
+ ),
+ ]
diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py
index a7f41bf..14a1da8 100644
--- a/backend/server/adventures/models.py
+++ b/backend/server/adventures/models.py
@@ -35,6 +35,7 @@ class Adventure(models.Model):
longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True)
latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True)
collection = models.ForeignKey('Collection', on_delete=models.CASCADE, blank=True, null=True)
+ created_at = models.DateTimeField(auto_now_add=True)
def clean(self):
if self.collection:
@@ -53,6 +54,7 @@ class Collection(models.Model):
name = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
is_public = models.BooleanField(default=False)
+ created_at = models.DateTimeField(auto_now_add=True)
# if connected adventures are private and collection is public, raise an error
def clean(self):
diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py
index 5ad6697..917fd53 100644
--- a/backend/server/adventures/views.py
+++ b/backend/server/adventures/views.py
@@ -31,11 +31,11 @@ class AdventureViewSet(viewsets.ModelViewSet):
pagination_class = StandardResultsSetPagination
def apply_sorting(self, queryset):
- order_by = self.request.query_params.get('order_by', 'name')
+ order_by = self.request.query_params.get('order_by', 'created_at')
order_direction = self.request.query_params.get('order_direction', 'asc')
include_collections = self.request.query_params.get('include_collections', 'true')
- valid_order_by = ['name', 'type', 'date', 'rating']
+ valid_order_by = ['name', 'type', 'date', 'rating', 'created_at']
if order_by not in valid_order_by:
order_by = 'name'
@@ -52,6 +52,13 @@ class AdventureViewSet(viewsets.ModelViewSet):
if order_direction == 'desc':
ordering = f'-{ordering}'
+ # reverse ordering for created_at field
+ if order_by == 'created_at':
+ if order_direction == 'asc':
+ ordering = '-created_at'
+ else:
+ ordering = 'created_at'
+
print(f"Ordering by: {ordering}") # For debugging
if include_collections == 'false':
diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts
index 5b7709f..978f0f7 100644
--- a/frontend/src/lib/types.ts
+++ b/frontend/src/lib/types.ts
@@ -25,6 +25,7 @@ export type Adventure = {
latitude: number | null;
longitude: number | null;
is_public: boolean;
+ created_at?: string;
};
export type Country = {
@@ -61,6 +62,7 @@ export type Collection = {
description: string;
is_public: boolean;
adventures: Adventure[];
+ created_at?: string;
};
export type OpenStreetMapPlace = {
diff --git a/frontend/src/routes/adventures/+page.svelte b/frontend/src/routes/adventures/+page.svelte
index ef6a11d..4eb087e 100644
--- a/frontend/src/routes/adventures/+page.svelte
+++ b/frontend/src/routes/adventures/+page.svelte
@@ -300,6 +300,15 @@
/>
Order By
+ + import AdventureCard from '$lib/components/AdventureCard.svelte'; import NotFound from '$lib/components/NotFound.svelte'; - import type { Adventure } from '$lib/types'; + import type { Adventure, OpenStreetMapPlace } from '$lib/types'; + import { onMount } from 'svelte'; import type { PageData } from './$types'; + import { page } from '$app/stores'; export let data: PageData; @@ -10,6 +12,29 @@ adventures = adventures.filter((adventure) => adventure.id !== event.detail); } + let osmResults: OpenStreetMapPlace[] = []; + + let query: string | null = ''; + + onMount(() => { + const urlParams = new URLSearchParams(window.location.search); + query = urlParams.get('query'); + + fetchData(); + }); + + async function fetchData() { + let res = await fetch(`https://nominatim.openstreetmap.org/search?q=${query}&format=jsonv2`); + const data = await res.json(); + osmResults = data; + } + + onMount(async () => { + let res = await fetch(`https://nominatim.openstreetmap.org/search?q=${query}&format=jsonv2`); + const data = await res.json(); + osmResults = data; + }); + console.log(data); let adventures: Adventure[] = []; if (data.props) { @@ -17,12 +42,24 @@ } -{#if adventures.length === 0} +{#if adventures.length === 0 && osmResults.length === 0}{result.type}
+{result.lat}, {result.lon}
+