From c94a4379c7a3c23ccbfbaf0562f159c73999aec8 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Sat, 27 Jul 2024 14:26:15 -0400 Subject: [PATCH] collection days --- ...llection_end_date_collection_start_date.py | 23 +++++++++++++ backend/server/adventures/models.py | 2 ++ backend/server/adventures/serializers.py | 2 +- .../src/lib/components/CollectionCard.svelte | 14 ++++++++ .../src/lib/components/EditCollection.svelte | 23 +++++++++++++ .../src/lib/components/NewCollection.svelte | 32 ++++++++++++++++--- frontend/src/lib/types.ts | 2 ++ .../src/routes/collections/+page.server.ts | 8 +++++ 8 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 backend/server/adventures/migrations/0012_collection_end_date_collection_start_date.py diff --git a/backend/server/adventures/migrations/0012_collection_end_date_collection_start_date.py b/backend/server/adventures/migrations/0012_collection_end_date_collection_start_date.py new file mode 100644 index 0000000..744d83a --- /dev/null +++ b/backend/server/adventures/migrations/0012_collection_end_date_collection_start_date.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.7 on 2024-07-27 18:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('adventures', '0011_adventure_updated_at'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='end_date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='start_date', + field=models.DateField(blank=True, null=True), + ), + ] diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py index 854ce4e..9cc642b 100644 --- a/backend/server/adventures/models.py +++ b/backend/server/adventures/models.py @@ -56,6 +56,8 @@ class Collection(models.Model): description = models.TextField(blank=True, null=True) is_public = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) + start_date = models.DateField(blank=True, null=True) + end_date = models.DateField(blank=True, null=True) # if connected adventures are private and collection is public, raise an error def clean(self): diff --git a/backend/server/adventures/serializers.py b/backend/server/adventures/serializers.py index 40f24bd..84c38a2 100644 --- a/backend/server/adventures/serializers.py +++ b/backend/server/adventures/serializers.py @@ -29,7 +29,7 @@ class CollectionSerializer(serializers.ModelSerializer): class Meta: model = Collection # fields are all plus the adventures field - fields = ['id', 'description', 'user_id', 'name', 'is_public', 'adventures'] + fields = ['id', 'description', 'user_id', 'name', 'is_public', 'adventures', 'created_at', 'start_date', 'end_date'] \ No newline at end of file diff --git a/frontend/src/lib/components/CollectionCard.svelte b/frontend/src/lib/components/CollectionCard.svelte index cd6d314..bb25110 100644 --- a/frontend/src/lib/components/CollectionCard.svelte +++ b/frontend/src/lib/components/CollectionCard.svelte @@ -47,6 +47,20 @@

{collection.name}

{collection.adventures.length} Adventures

+ {#if collection.start_date && collection.end_date} +

+ Dates: {new Date(collection.start_date).toLocaleDateString()} - {new Date( + collection.end_date + ).toLocaleDateString()} +

+ +

+ Duration: {Math.floor( + (new Date(collection.end_date).getTime() - new Date(collection.start_date).getTime()) / + (1000 * 60 * 60 * 24) + )}{' '} + days +

{/if}
{#if type != 'link'}
+
+
+ +
+
+
+ +

- -
- - +
+
+ +
+
+
+ +
+
+ + +
diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index d0dbdf5..08db959 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -64,6 +64,8 @@ export type Collection = { is_public: boolean; adventures: Adventure[]; created_at?: string; + start_date?: string; + end_date?: string; }; export type OpenStreetMapPlace = { diff --git a/frontend/src/routes/collections/+page.server.ts b/frontend/src/routes/collections/+page.server.ts index 4f3fdfb..655f80c 100644 --- a/frontend/src/routes/collections/+page.server.ts +++ b/frontend/src/routes/collections/+page.server.ts @@ -51,6 +51,8 @@ export const actions: Actions = { const name = formData.get('name') as string; const description = formData.get('description') as string | null; + const start_date = formData.get('start_date') as string | null; + const end_date = formData.get('end_date') as string | null; if (!name) { return { @@ -62,6 +64,8 @@ export const actions: Actions = { const formDataToSend = new FormData(); formDataToSend.append('name', name); formDataToSend.append('description', description || ''); + formDataToSend.append('start_date', start_date || ''); + formDataToSend.append('end_date', end_date || ''); let auth = event.cookies.get('auth'); if (!auth) { @@ -136,6 +140,8 @@ export const actions: Actions = { const name = formData.get('name') as string; const description = formData.get('description') as string | null; let is_public = formData.get('is_public') as string | null | boolean; + const start_date = formData.get('start_date') as string | null; + const end_date = formData.get('end_date') as string | null; if (is_public) { is_public = true; @@ -154,6 +160,8 @@ export const actions: Actions = { formDataToSend.append('name', name); formDataToSend.append('description', description || ''); formDataToSend.append('is_public', is_public.toString()); + formDataToSend.append('start_date', start_date || ''); + formDataToSend.append('end_date', end_date || ''); let auth = event.cookies.get('auth');