From c723d2836debdd4b97023e965a7faaaa1311d612 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Thu, 18 Jul 2024 11:07:24 -0400 Subject: [PATCH 1/2] webp --- .../migrations/0009_alter_adventure_image.py | 19 +++++++++++++++++++ backend/server/adventures/models.py | 3 ++- backend/server/requirements.txt | 3 ++- .../0002_alter_customuser_profile_pic.py | 19 +++++++++++++++++++ backend/server/users/models.py | 3 ++- 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 backend/server/adventures/migrations/0009_alter_adventure_image.py create mode 100644 backend/server/users/migrations/0002_alter_customuser_profile_pic.py diff --git a/backend/server/adventures/migrations/0009_alter_adventure_image.py b/backend/server/adventures/migrations/0009_alter_adventure_image.py new file mode 100644 index 0000000..7c204e9 --- /dev/null +++ b/backend/server/adventures/migrations/0009_alter_adventure_image.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.6 on 2024-07-18 15:06 + +import django_resized.forms +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('adventures', '0008_collection_description'), + ] + + operations = [ + migrations.AlterField( + model_name='adventure', + name='image', + field=django_resized.forms.ResizedImageField(blank=True, crop=None, force_format='WEBP', keep_meta=True, null=True, quality=75, scale=None, size=[1920, 1080], upload_to='images/'), + ), + ] diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py index 5066ad3..b74c4ef 100644 --- a/backend/server/adventures/models.py +++ b/backend/server/adventures/models.py @@ -3,6 +3,7 @@ from django.db import models from django.contrib.auth import get_user_model from django.contrib.postgres.fields import ArrayField from django.forms import ValidationError +from django_resized import ResizedImageField ADVENTURE_TYPES = [ ('visited', 'Visited'), @@ -28,7 +29,7 @@ class Adventure(models.Model): description = models.TextField(blank=True, null=True) rating = models.FloatField(blank=True, null=True) link = models.URLField(blank=True, null=True) - image = models.ImageField(null=True, blank=True, upload_to='images/') + image = ResizedImageField(force_format="WEBP", quality=75, null=True, blank=True, upload_to='images/') date = models.DateField(blank=True, null=True) is_public = models.BooleanField(default=False) longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True) diff --git a/backend/server/requirements.txt b/backend/server/requirements.txt index f29a1db..164078a 100644 --- a/backend/server/requirements.txt +++ b/backend/server/requirements.txt @@ -9,4 +9,5 @@ coreapi==2.3.3 python-dotenv psycopg2-binary Pillow -whitenoise \ No newline at end of file +whitenoise +django-resized \ No newline at end of file diff --git a/backend/server/users/migrations/0002_alter_customuser_profile_pic.py b/backend/server/users/migrations/0002_alter_customuser_profile_pic.py new file mode 100644 index 0000000..7d525c7 --- /dev/null +++ b/backend/server/users/migrations/0002_alter_customuser_profile_pic.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.6 on 2024-07-18 15:06 + +import django_resized.forms +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='customuser', + name='profile_pic', + field=django_resized.forms.ResizedImageField(blank=True, crop=None, force_format='WEBP', keep_meta=True, null=True, quality=75, scale=None, size=[1920, 1080], upload_to='profile-pics/'), + ), + ] diff --git a/backend/server/users/models.py b/backend/server/users/models.py index 33d5e66..a2b4705 100644 --- a/backend/server/users/models.py +++ b/backend/server/users/models.py @@ -1,8 +1,9 @@ from django.contrib.auth.models import AbstractUser from django.db import models +from django_resized import ResizedImageField class CustomUser(AbstractUser): - profile_pic = models.ImageField(null=True, blank=True, upload_to='profile-pics/') + profile_pic = ResizedImageField(force_format="WEBP", quality=75, null=True, blank=True, upload_to='profile-pics/') def __str__(self): return self.username \ No newline at end of file From 5e70130000a0b89c27662ecbede810abb35aeae9 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Thu, 18 Jul 2024 11:26:14 -0400 Subject: [PATCH 2/2] feat: Convert activity input to lowercase for consistency --- backend/server/adventures/models.py | 1 + backend/server/adventures/serializers.py | 5 ++ .../lib/components/ActivityComplete.svelte | 2 +- frontend/src/lib/components/Navbar.svelte | 54 +++++++++++++------ 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py index b74c4ef..a7f41bf 100644 --- a/backend/server/adventures/models.py +++ b/backend/server/adventures/models.py @@ -42,6 +42,7 @@ class Adventure(models.Model): raise ValidationError('Adventures associated with a public collection must be public. Collection: ' + self.trip.name + ' Adventure: ' + self.name) if self.user_id != self.collection.user_id: raise ValidationError('Adventures must be associated with collections owned by the same user. Collection owner: ' + self.collection.user_id.username + ' Adventure owner: ' + self.user_id.username) + def __str__(self): return self.name diff --git a/backend/server/adventures/serializers.py b/backend/server/adventures/serializers.py index 7bc20e2..40f24bd 100644 --- a/backend/server/adventures/serializers.py +++ b/backend/server/adventures/serializers.py @@ -18,6 +18,11 @@ class AdventureSerializer(serializers.ModelSerializer): representation['image'] = f"{public_url}/media/{instance.image.name}" return representation + def validate_activity_types(self, value): + if value: + return [activity.lower() for activity in value] + return value + class CollectionSerializer(serializers.ModelSerializer): adventures = AdventureSerializer(many=True, read_only=True, source='adventure_set') diff --git a/frontend/src/lib/components/ActivityComplete.svelte b/frontend/src/lib/components/ActivityComplete.svelte index ac04ea6..6d76abf 100644 --- a/frontend/src/lib/components/ActivityComplete.svelte +++ b/frontend/src/lib/components/ActivityComplete.svelte @@ -20,7 +20,7 @@ function addActivity() { if (inputVal && activities) { - const trimmedInput = inputVal.trim(); + const trimmedInput = inputVal.trim().toLocaleLowerCase(); if (trimmedInput && !activities.includes(trimmedInput)) { activities = [...activities, trimmedInput]; inputVal = ''; diff --git a/frontend/src/lib/components/Navbar.svelte b/frontend/src/lib/components/Navbar.svelte index b54c292..aa0f64d 100644 --- a/frontend/src/lib/components/Navbar.svelte +++ b/frontend/src/lib/components/Navbar.svelte @@ -83,6 +83,25 @@
  • +
    + + +
    {/if} {#if !data.user} @@ -115,24 +134,25 @@
  • - + + {/if} {#if !data.user}