From c6633a17cb927fe9f1a68039b931115d6666403d Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Fri, 19 Jul 2024 09:05:47 -0400 Subject: [PATCH] created_at and updated_at fields --- .../migrations/0011_adventure_updated_at.py | 18 +++++++++ backend/server/adventures/models.py | 1 + backend/server/adventures/views.py | 12 +++--- .../src/lib/components/EditAdventure.svelte | 7 +++- .../src/lib/components/ImageFetcher.svelte | 9 +++-- .../src/lib/components/NewAdventure.svelte | 12 +++++- .../lib/components/PointSelectionModal.svelte | 12 ++++-- frontend/src/lib/types.ts | 3 +- frontend/src/routes/adventures/+page.svelte | 6 +-- frontend/src/routes/collections/+page.svelte | 38 ++++++++++--------- frontend/src/routes/search/+page.svelte | 2 +- 11 files changed, 81 insertions(+), 39 deletions(-) create mode 100644 backend/server/adventures/migrations/0011_adventure_updated_at.py diff --git a/backend/server/adventures/migrations/0011_adventure_updated_at.py b/backend/server/adventures/migrations/0011_adventure_updated_at.py new file mode 100644 index 0000000..d04e34a --- /dev/null +++ b/backend/server/adventures/migrations/0011_adventure_updated_at.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.6 on 2024-07-19 12:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('adventures', '0010_adventure_created_at_collection_created_at'), + ] + + operations = [ + migrations.AddField( + model_name='adventure', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py index 14a1da8..3ff173a 100644 --- a/backend/server/adventures/models.py +++ b/backend/server/adventures/models.py @@ -36,6 +36,7 @@ class Adventure(models.Model): 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) + updated_at = models.DateTimeField(auto_now=True) def clean(self): if self.collection: diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index 917fd53..b9fcb30 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', 'created_at') + order_by = self.request.query_params.get('order_by', 'updated_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', 'created_at'] + valid_order_by = ['name', 'type', 'date', 'rating', 'updated_at'] if order_by not in valid_order_by: order_by = 'name' @@ -52,12 +52,12 @@ class AdventureViewSet(viewsets.ModelViewSet): if order_direction == 'desc': ordering = f'-{ordering}' - # reverse ordering for created_at field - if order_by == 'created_at': + # reverse ordering for updated_at field + if order_by == 'updated_at': if order_direction == 'asc': - ordering = '-created_at' + ordering = '-updated_at' else: - ordering = 'created_at' + ordering = 'updated_at' print(f"Ordering by: {ordering}") # For debugging diff --git a/frontend/src/lib/components/EditAdventure.svelte b/frontend/src/lib/components/EditAdventure.svelte index b3fe39e..fb476dc 100644 --- a/frontend/src/lib/components/EditAdventure.svelte +++ b/frontend/src/lib/components/EditAdventure.svelte @@ -124,11 +124,16 @@ latitude={adventureToEdit.latitude} on:close={() => (isPointModalOpen = false)} on:submit={setLongLat} + query={adventureToEdit.name} /> {/if} {#if isImageFetcherOpen} - (isImageFetcherOpen = false)} /> + (isImageFetcherOpen = false)} + /> {/if} diff --git a/frontend/src/lib/components/ImageFetcher.svelte b/frontend/src/lib/components/ImageFetcher.svelte index 79221a4..8d4e52f 100644 --- a/frontend/src/lib/components/ImageFetcher.svelte +++ b/frontend/src/lib/components/ImageFetcher.svelte @@ -6,7 +6,8 @@ let modal: HTMLDialogElement; let url: string = ''; - let query: string = ''; + + export let name: string | null = null; let error = ''; @@ -30,13 +31,13 @@ } async function fetchWikiImage() { - let res = await fetch(`/api/generate/img/?name=${query}`); + let res = await fetch(`/api/generate/img/?name=${name}`); let data = await res.json(); if (data.source) { let imageUrl = data.source; let res = await fetch(imageUrl); let blob = await res.blob(); - let file = new File([blob], `${query}.jpg`, { type: 'image/jpeg' }); + let file = new File([blob], `${name}.jpg`, { type: 'image/jpeg' }); close(); dispatch('image', { file }); } else { @@ -75,7 +76,7 @@ diff --git a/frontend/src/lib/components/NewAdventure.svelte b/frontend/src/lib/components/NewAdventure.svelte index 65216d5..55c21b3 100644 --- a/frontend/src/lib/components/NewAdventure.svelte +++ b/frontend/src/lib/components/NewAdventure.svelte @@ -132,11 +132,19 @@ {#if isPointModalOpen} - (isPointModalOpen = false)} on:submit={setLongLat} /> + (isPointModalOpen = false)} + on:submit={setLongLat} + /> {/if} {#if isImageFetcherOpen} - (isImageFetcherOpen = false)} /> + (isImageFetcherOpen = false)} + /> {/if} diff --git a/frontend/src/lib/components/PointSelectionModal.svelte b/frontend/src/lib/components/PointSelectionModal.svelte index e9e89d2..eb44a9e 100644 --- a/frontend/src/lib/components/PointSelectionModal.svelte +++ b/frontend/src/lib/components/PointSelectionModal.svelte @@ -10,7 +10,11 @@ let markers: Point[] = []; - let query: string = ''; + export let query: string | null = null; + + if (query) { + geocode(); + } export let longitude: number | null = null; export let latitude: number | null = null; @@ -43,8 +47,10 @@ let places: OpenStreetMapPlace[] = []; - async function geocode(e: Event) { - e.preventDefault(); + async function geocode(e: Event | null) { + if (e) { + e.preventDefault(); + } if (!query) { alert('Please enter a location'); return; diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 978f0f7..d0dbdf5 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -25,7 +25,8 @@ export type Adventure = { latitude: number | null; longitude: number | null; is_public: boolean; - created_at?: string; + created_at?: string | null; + updated_at?: string | null; }; export type Country = { diff --git a/frontend/src/routes/adventures/+page.svelte b/frontend/src/routes/adventures/+page.svelte index 353b4a7..d5d598e 100644 --- a/frontend/src/routes/adventures/+page.svelte +++ b/frontend/src/routes/adventures/+page.svelte @@ -271,9 +271,9 @@ class="join-item btn btn-neutral" type="radio" name="order_by" - id="created_at" - value="created_at" - aria-label="Created" + id="updated_at" + value="updated_at" + aria-label="Updated" checked />

Sort

-

Order Direction

- - - - +

Order Direction

+
+ + +

Online Results
{#each osmResults as result} -
+

{result.display_name}

{result.type}

{result.lat}, {result.lon}