From 8f6687b6edd4b7a4b35ef727af48c54a197ed54d Mon Sep 17 00:00:00 2001 From: olavhdi <32062632+olavhdi@users.noreply.github.com> Date: Thu, 18 Feb 2021 10:21:12 +0100 Subject: [PATCH 1/5] updated gitignore for pycharm --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index bdd4074d..6b7798b3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ backend/secfit/.vscode/ backend/secfit/*/migrations/__pycache__/ backend/secfit/*/__pycache__/ backend/secfit/db.sqlite3 +.idea/ +Pipfile* + -- GitLab From 55bd9291bb26dbb3e49f9e143411e73cd691b137 Mon Sep 17 00:00:00 2001 From: olavhdi <32062632+olavhdi@users.noreply.github.com> Date: Thu, 18 Feb 2021 15:50:30 +0100 Subject: [PATCH 2/5] database table for facilities and facility images --- backend/secfit/facilities/admin.py | 9 +++ backend/secfit/facilities/apps.py | 13 ++++ .../facilities/migrations/0001_initial.py | 39 ++++++++++ .../secfit/facilities/migrations/__init__.py | 0 backend/secfit/facilities/models.py | 65 ++++++++++++++++ backend/secfit/facilities/views.py | 71 ++++++++++++++++++ backend/secfit/requirements.txt | Bin 1192 -> 1218 bytes backend/secfit/secfit/settings.py | 1 + 8 files changed, 198 insertions(+) create mode 100644 backend/secfit/facilities/admin.py create mode 100644 backend/secfit/facilities/apps.py create mode 100644 backend/secfit/facilities/migrations/0001_initial.py create mode 100644 backend/secfit/facilities/migrations/__init__.py create mode 100644 backend/secfit/facilities/models.py create mode 100644 backend/secfit/facilities/views.py diff --git a/backend/secfit/facilities/admin.py b/backend/secfit/facilities/admin.py new file mode 100644 index 00000000..9b8c168b --- /dev/null +++ b/backend/secfit/facilities/admin.py @@ -0,0 +1,9 @@ +"""Module for registering facilities from facility app to admin page so that they appear +""" +from django.contrib import admin + +# Register your models here. +from .models import Facility, FacilityImage + +admin.site.register(Facility) +admin.site.register(FacilityImage) diff --git a/backend/secfit/facilities/apps.py b/backend/secfit/facilities/apps.py new file mode 100644 index 00000000..8acf7b1d --- /dev/null +++ b/backend/secfit/facilities/apps.py @@ -0,0 +1,13 @@ +"""AppConfig for facilities app +""" +from django.apps import AppConfig + + +class FacilitiesConfig(AppConfig): + """AppConfig for workouts app + + Attributes: + name (str): The name of the application + """ + + name = "facilities" \ No newline at end of file diff --git a/backend/secfit/facilities/migrations/0001_initial.py b/backend/secfit/facilities/migrations/0001_initial.py new file mode 100644 index 00000000..fa692a40 --- /dev/null +++ b/backend/secfit/facilities/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 3.1 on 2021-02-18 13:58 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import facilities.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Facility', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('date', models.DateTimeField()), + ('description', models.TextField()), + ('latitude', models.DecimalField(decimal_places=5, max_digits=7, validators=[django.core.validators.MaxValueValidator(90), django.core.validators.MinValueValidator(-90)])), + ('longitude', models.DecimalField(decimal_places=5, max_digits=8, validators=[django.core.validators.MaxValueValidator(180), django.core.validators.MinValueValidator(-180)])), + ], + options={ + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='FacilityImage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file', models.ImageField(upload_to=facilities.models.workout_directory_path)), + ('facility', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='facilities.facility')), + ], + ), + ] diff --git a/backend/secfit/facilities/migrations/__init__.py b/backend/secfit/facilities/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/secfit/facilities/models.py b/backend/secfit/facilities/models.py new file mode 100644 index 00000000..e591e7ac --- /dev/null +++ b/backend/secfit/facilities/models.py @@ -0,0 +1,65 @@ +"""Contains the models for the facilities Django application. Admins create facilities, +which contain descriptions, images and location. +""" +import os + +from django.core.validators import MaxValueValidator, MinValueValidator +from django.db import models + + +class Facility(models.Model): + """Django model for a facility that admins can add. + + A facility has several attributes, and is not associated + with other parts of the website (as stated in the requirements by our peer group) + + Attributes: + name: Name of the facility + date: Date the facility was added + description: Description of the facility + latitude: Latitude of the facility + longitude: Longitude of the facility + """ + + name = models.CharField(max_length=100) + date = models.DateTimeField() + description = models.TextField() + + latitude = models.DecimalField( + decimal_places=5, max_digits=7, validators=[MaxValueValidator(90), MinValueValidator(-90)]) + + longitude = models.DecimalField( + decimal_places=5, max_digits=8, validators=[MaxValueValidator(180), MinValueValidator(-180)]) + + class Meta: + ordering = ["-date"] + + def __str__(self): + return self.name + + +# Create your models here. +def workout_directory_path(instance, filename): + """Return path for which facility files should be uploaded on the web server + + Args: + instance (FacilityImage): FacilityImage instance + filename (str): Name of the file + + Returns: + str: Path where facility file is stored + """ + return f"facilities/{instance.facility.id}/{filename}" + + +class FacilityImage(models.Model): + """Django model for image associated with a facility. + + Attributes: + facility: The facility for which this file has been uploaded + file: The actual file that's being uploaded + """ + + facility = models.ForeignKey(Facility, on_delete=models.CASCADE, related_name="files") + file = models.ImageField(upload_to=workout_directory_path) + diff --git a/backend/secfit/facilities/views.py b/backend/secfit/facilities/views.py new file mode 100644 index 00000000..b889088f --- /dev/null +++ b/backend/secfit/facilities/views.py @@ -0,0 +1,71 @@ +"""Contains views for the workouts application. These are mostly class-based views. +""" +from rest_framework import generics, mixins +from rest_framework import permissions +from rest_framework.decorators import api_view +from rest_framework.reverse import reverse +from facilities.models import Facility, FacilityImage +from rest_framework.response import Response + + +@api_view(["GET"]) +def api_root(request, format=None): + return Response( + { + "users": reverse("user-list", request=request, format=format), + "facilities": reverse("facility-list", request=request, format=format), + "facility-files": reverse("facility-file-list", request=request, format=format), + } + ) + + +class FacilityList( + mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView +): + """Class defining the web response for the creation of a Facility, or + a list of Facilities. + + HTTP methods: GET, POST + """ + + queryset = Facility.objects.all() + permission_classes = [permissions.IsAuthenticated] + ordering_fields = ["name", "date"] + + def get(self, request, *args, **kwargs): + return self.list(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + return self.create(request, *args, **kwargs) + + +class FacilityDetail( + mixins.RetrieveModelMixin, + generics.GenericAPIView, +): + """Class defining the web response for the details of an individual Facility. + + HTTP methods: GET + """ + + queryset = Facility.objects.all() + permission_classes = [permissions.IsAuthenticated] + + def get(self, request, *args, **kwargs): + return self.retrieve(request, *args, **kwargs) + + +class FacilityImageDetail( + mixins.RetrieveModelMixin, + generics.GenericAPIView, +): + """Class defining the web response for the creation of a FacilityImage, or a list of FacilityImages. + + HTTP methods: GET + """ + + queryset = FacilityImage.objects.all() + permission_classes = [permissions.IsAuthenticated] + + def get(self, request, *args, **kwargs): + return self.retrieve(request, *args, **kwargs) diff --git a/backend/secfit/requirements.txt b/backend/secfit/requirements.txt index 9feb375bde1e8fb7befe6c102dd29beeee7c6940..aa9c4c91c421043439b74f82ef7f18416f81eeea 100644 GIT binary patch delta 34 lcmZ3%d5Ckv3KppXhD?SWAk1edXRrlA3kE#~Lm)O_005o_2KfL0 delta 7 OcmX@axq@@U3KjqiTLRet diff --git a/backend/secfit/secfit/settings.py b/backend/secfit/secfit/settings.py index 92336536..54622f95 100644 --- a/backend/secfit/secfit/settings.py +++ b/backend/secfit/secfit/settings.py @@ -58,6 +58,7 @@ INSTALLED_APPS = [ "workouts.apps.WorkoutsConfig", "users.apps.UsersConfig", "comments.apps.CommentsConfig", + "facilities.apps.FacilitiesConfig", "corsheaders", ] -- GitLab From 04b5f0ca859e3881e857249a80430484807f5452 Mon Sep 17 00:00:00 2001 From: olavhdi <32062632+olavhdi@users.noreply.github.com> Date: Thu, 25 Feb 2021 13:06:00 +0100 Subject: [PATCH 3/5] db polishing with access rights --- .../facilities/migrations/0001_initial.py | 4 +-- backend/secfit/facilities/models.py | 6 ++-- backend/secfit/facilities/urls.py | 13 ++++++++ backend/secfit/facilities/views.py | 30 +++++++++++++------ backend/secfit/secfit/urls.py | 1 + 5 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 backend/secfit/facilities/urls.py diff --git a/backend/secfit/facilities/migrations/0001_initial.py b/backend/secfit/facilities/migrations/0001_initial.py index fa692a40..b71fc974 100644 --- a/backend/secfit/facilities/migrations/0001_initial.py +++ b/backend/secfit/facilities/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.1 on 2021-02-18 13:58 +# Generated by Django 3.1 on 2021-02-25 11:56 import django.core.validators from django.db import migrations, models @@ -32,7 +32,7 @@ class Migration(migrations.Migration): name='FacilityImage', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('file', models.ImageField(upload_to=facilities.models.workout_directory_path)), + ('file', models.ImageField(upload_to=facilities.models.facility_directory_path)), ('facility', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='facilities.facility')), ], ), diff --git a/backend/secfit/facilities/models.py b/backend/secfit/facilities/models.py index e591e7ac..dfc3e0e0 100644 --- a/backend/secfit/facilities/models.py +++ b/backend/secfit/facilities/models.py @@ -39,7 +39,7 @@ class Facility(models.Model): # Create your models here. -def workout_directory_path(instance, filename): +def facility_directory_path(instance, filename): """Return path for which facility files should be uploaded on the web server Args: @@ -60,6 +60,6 @@ class FacilityImage(models.Model): file: The actual file that's being uploaded """ - facility = models.ForeignKey(Facility, on_delete=models.CASCADE, related_name="files") - file = models.ImageField(upload_to=workout_directory_path) + facility = models.ForeignKey(Facility, on_delete=models.CASCADE, related_name="files", blank=False) + file = models.ImageField(upload_to=facility_directory_path) diff --git a/backend/secfit/facilities/urls.py b/backend/secfit/facilities/urls.py new file mode 100644 index 00000000..e58f2c43 --- /dev/null +++ b/backend/secfit/facilities/urls.py @@ -0,0 +1,13 @@ +from django.urls import path, include +from facilities import views +from rest_framework.urlpatterns import format_suffix_patterns + +urlpatterns = [ + path("", views.api_root), + path("api/facilities/", views.FacilityList.as_view(), name="facility-list"), + path("api/facilities//", views.FacilitySingle.as_view(), name="facility-detail"), + path("api/facilities//", views.FacilitySingle.as_view(), name="facility-detail"), + path( + "api/facilities//", views.FacilityImageList.as_view(), name="facility-image-list" + ), +] diff --git a/backend/secfit/facilities/views.py b/backend/secfit/facilities/views.py index b889088f..714398a6 100644 --- a/backend/secfit/facilities/views.py +++ b/backend/secfit/facilities/views.py @@ -19,13 +19,27 @@ def api_root(request, format=None): ) +class FacilityGeneration( + mixins.CreateModelMixin, generics.GenericAPIView +): + """Class defining the web response for creation of a facility + + HTTP methods: POST + """ + + queryset = Facility.objects.all() + permission_classes = [permissions.IsAdminUser] + + def post(self, request, *args, **kwargs): + return self.post(request, *args, **kwargs) + + class FacilityList( mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView ): - """Class defining the web response for the creation of a Facility, or - a list of Facilities. + """Class defining the web response for retrieval of multiple facilities - HTTP methods: GET, POST + HTTP methods: GET """ queryset = Facility.objects.all() @@ -35,11 +49,8 @@ class FacilityList( def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) - def post(self, request, *args, **kwargs): - return self.create(request, *args, **kwargs) - -class FacilityDetail( +class FacilitySingle( mixins.RetrieveModelMixin, generics.GenericAPIView, ): @@ -55,7 +66,8 @@ class FacilityDetail( return self.retrieve(request, *args, **kwargs) -class FacilityImageDetail( +class FacilityImageList( + mixins.ListModelMixin, mixins.RetrieveModelMixin, generics.GenericAPIView, ): @@ -68,4 +80,4 @@ class FacilityImageDetail( permission_classes = [permissions.IsAuthenticated] def get(self, request, *args, **kwargs): - return self.retrieve(request, *args, **kwargs) + return self.list(request, *args, **kwargs) diff --git a/backend/secfit/secfit/urls.py b/backend/secfit/secfit/urls.py index 3146886e..900cd7ac 100644 --- a/backend/secfit/secfit/urls.py +++ b/backend/secfit/secfit/urls.py @@ -21,6 +21,7 @@ from django.conf.urls.static import static urlpatterns = [ path("admin/", admin.site.urls), path("", include("workouts.urls")), + path("", include("facilities.urls")), ] urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) -- GitLab From 14ce43e34ba8339913b98f702d0395796dc5c0da Mon Sep 17 00:00:00 2001 From: olavhdi <32062632+olavhdi@users.noreply.github.com> Date: Thu, 25 Feb 2021 13:40:37 +0100 Subject: [PATCH 4/5] restricting description length --- backend/secfit/facilities/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/secfit/facilities/models.py b/backend/secfit/facilities/models.py index dfc3e0e0..7ecd48fb 100644 --- a/backend/secfit/facilities/models.py +++ b/backend/secfit/facilities/models.py @@ -21,9 +21,9 @@ class Facility(models.Model): longitude: Longitude of the facility """ - name = models.CharField(max_length=100) + name = models.CharField(max_length=50, unique=True) date = models.DateTimeField() - description = models.TextField() + description = models.CharField(max_length=400) latitude = models.DecimalField( decimal_places=5, max_digits=7, validators=[MaxValueValidator(90), MinValueValidator(-90)]) -- GitLab From a8ef0f0373cb9b58e78e8df67106ac9ac40d08b2 Mon Sep 17 00:00:00 2001 From: olavhdi <32062632+olavhdi@users.noreply.github.com> Date: Thu, 25 Feb 2021 15:12:55 +0100 Subject: [PATCH 5/5] single table for a facility, now validates imagesize, wordcount, and max 5 images --- backend/secfit/facilities/admin.py | 3 +- .../facilities/migrations/0001_initial.py | 21 +++---- .../migrations/0002_auto_20210225_1508.py | 45 ++++++++++++++ backend/secfit/facilities/models.py | 59 +++++++++---------- backend/secfit/facilities/urls.py | 3 - backend/secfit/facilities/validators.py | 12 ++++ backend/secfit/facilities/views.py | 22 +------ 7 files changed, 97 insertions(+), 68 deletions(-) create mode 100644 backend/secfit/facilities/migrations/0002_auto_20210225_1508.py create mode 100644 backend/secfit/facilities/validators.py diff --git a/backend/secfit/facilities/admin.py b/backend/secfit/facilities/admin.py index 9b8c168b..ee21d307 100644 --- a/backend/secfit/facilities/admin.py +++ b/backend/secfit/facilities/admin.py @@ -3,7 +3,6 @@ from django.contrib import admin # Register your models here. -from .models import Facility, FacilityImage +from .models import Facility admin.site.register(Facility) -admin.site.register(FacilityImage) diff --git a/backend/secfit/facilities/migrations/0001_initial.py b/backend/secfit/facilities/migrations/0001_initial.py index b71fc974..926ced34 100644 --- a/backend/secfit/facilities/migrations/0001_initial.py +++ b/backend/secfit/facilities/migrations/0001_initial.py @@ -1,9 +1,9 @@ -# Generated by Django 3.1 on 2021-02-25 11:56 +# Generated by Django 3.1 on 2021-02-25 13:57 import django.core.validators from django.db import migrations, models -import django.db.models.deletion import facilities.models +import facilities.validators class Migration(migrations.Migration): @@ -18,22 +18,19 @@ class Migration(migrations.Migration): name='Facility', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), + ('name', models.CharField(max_length=50, unique=True)), ('date', models.DateTimeField()), - ('description', models.TextField()), + ('description', models.CharField(max_length=400)), ('latitude', models.DecimalField(decimal_places=5, max_digits=7, validators=[django.core.validators.MaxValueValidator(90), django.core.validators.MinValueValidator(-90)])), ('longitude', models.DecimalField(decimal_places=5, max_digits=8, validators=[django.core.validators.MaxValueValidator(180), django.core.validators.MinValueValidator(-180)])), + ('image1', models.ImageField(upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size])), + ('image2', models.ImageField(upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size])), + ('image3', models.ImageField(upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size])), + ('image4', models.ImageField(upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size])), + ('image5', models.ImageField(upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size])), ], options={ 'ordering': ['-date'], }, ), - migrations.CreateModel( - name='FacilityImage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('file', models.ImageField(upload_to=facilities.models.facility_directory_path)), - ('facility', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='facilities.facility')), - ], - ), ] diff --git a/backend/secfit/facilities/migrations/0002_auto_20210225_1508.py b/backend/secfit/facilities/migrations/0002_auto_20210225_1508.py new file mode 100644 index 00000000..60901b2c --- /dev/null +++ b/backend/secfit/facilities/migrations/0002_auto_20210225_1508.py @@ -0,0 +1,45 @@ +# Generated by Django 3.1 on 2021-02-25 14:08 + +from django.db import migrations, models +import facilities.models +import facilities.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('facilities', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='facility', + name='date', + field=models.DateField(), + ), + migrations.AlterField( + model_name='facility', + name='description', + field=models.TextField(validators=[facilities.validators.max_words]), + ), + migrations.AlterField( + model_name='facility', + name='image2', + field=models.ImageField(blank=True, upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size]), + ), + migrations.AlterField( + model_name='facility', + name='image3', + field=models.ImageField(blank=True, upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size]), + ), + migrations.AlterField( + model_name='facility', + name='image4', + field=models.ImageField(blank=True, upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size]), + ), + migrations.AlterField( + model_name='facility', + name='image5', + field=models.ImageField(blank=True, upload_to=facilities.models.facility_directory_path, validators=[facilities.validators.image_size]), + ), + ] diff --git a/backend/secfit/facilities/models.py b/backend/secfit/facilities/models.py index 7ecd48fb..fc58d6c1 100644 --- a/backend/secfit/facilities/models.py +++ b/backend/secfit/facilities/models.py @@ -2,11 +2,23 @@ which contain descriptions, images and location. """ import os - from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models +def facility_directory_path(instance, filename): + """Return path for which facility files should be uploaded on the web server + + Args: + instance (FacilityImage): FacilityImage instance + filename (str): Name of the file + + Returns: + str: Path where facility file is stored + """ + return f"facilities/{instance.name}/{filename}" + + class Facility(models.Model): """Django model for a facility that admins can add. @@ -19,11 +31,17 @@ class Facility(models.Model): description: Description of the facility latitude: Latitude of the facility longitude: Longitude of the facility + image1: Image of the facility + image2: Image of the facility + image3: Image of the facility + image4: Image of the facility + image5: Image of the facility """ + from .validators import image_size, max_words name = models.CharField(max_length=50, unique=True) - date = models.DateTimeField() - description = models.CharField(max_length=400) + date = models.DateField() + description = models.TextField(validators=[max_words]) latitude = models.DecimalField( decimal_places=5, max_digits=7, validators=[MaxValueValidator(90), MinValueValidator(-90)]) @@ -31,35 +49,14 @@ class Facility(models.Model): longitude = models.DecimalField( decimal_places=5, max_digits=8, validators=[MaxValueValidator(180), MinValueValidator(-180)]) + image1 = models.ImageField(validators=[image_size], upload_to=facility_directory_path) + image2 = models.ImageField(validators=[image_size], upload_to=facility_directory_path, blank=True) + image3 = models.ImageField(validators=[image_size], upload_to=facility_directory_path, blank=True) + image4 = models.ImageField(validators=[image_size], upload_to=facility_directory_path, blank=True) + image5 = models.ImageField(validators=[image_size], upload_to=facility_directory_path, blank=True) + class Meta: ordering = ["-date"] def __str__(self): - return self.name - - -# Create your models here. -def facility_directory_path(instance, filename): - """Return path for which facility files should be uploaded on the web server - - Args: - instance (FacilityImage): FacilityImage instance - filename (str): Name of the file - - Returns: - str: Path where facility file is stored - """ - return f"facilities/{instance.facility.id}/{filename}" - - -class FacilityImage(models.Model): - """Django model for image associated with a facility. - - Attributes: - facility: The facility for which this file has been uploaded - file: The actual file that's being uploaded - """ - - facility = models.ForeignKey(Facility, on_delete=models.CASCADE, related_name="files", blank=False) - file = models.ImageField(upload_to=facility_directory_path) - + return self.name \ No newline at end of file diff --git a/backend/secfit/facilities/urls.py b/backend/secfit/facilities/urls.py index e58f2c43..0948dfaa 100644 --- a/backend/secfit/facilities/urls.py +++ b/backend/secfit/facilities/urls.py @@ -7,7 +7,4 @@ urlpatterns = [ path("api/facilities/", views.FacilityList.as_view(), name="facility-list"), path("api/facilities//", views.FacilitySingle.as_view(), name="facility-detail"), path("api/facilities//", views.FacilitySingle.as_view(), name="facility-detail"), - path( - "api/facilities//", views.FacilityImageList.as_view(), name="facility-image-list" - ), ] diff --git a/backend/secfit/facilities/validators.py b/backend/secfit/facilities/validators.py new file mode 100644 index 00000000..17250bfc --- /dev/null +++ b/backend/secfit/facilities/validators.py @@ -0,0 +1,12 @@ +from django.core.exceptions import ValidationError + + +def image_size(image): + if image.file.size > 3 * 1024 * 1024: + raise ValidationError('Image size needs to be less than 3MB') + + +# Restricts the amount of words to 500 +def max_words(string): + if len(string.split(" ")) > 500: + raise ValidationError('Description can contain a maximum of 500 words') diff --git a/backend/secfit/facilities/views.py b/backend/secfit/facilities/views.py index 714398a6..1faea73e 100644 --- a/backend/secfit/facilities/views.py +++ b/backend/secfit/facilities/views.py @@ -4,7 +4,7 @@ from rest_framework import generics, mixins from rest_framework import permissions from rest_framework.decorators import api_view from rest_framework.reverse import reverse -from facilities.models import Facility, FacilityImage +from facilities.models import Facility from rest_framework.response import Response @@ -14,7 +14,6 @@ def api_root(request, format=None): { "users": reverse("user-list", request=request, format=format), "facilities": reverse("facility-list", request=request, format=format), - "facility-files": reverse("facility-file-list", request=request, format=format), } ) @@ -63,21 +62,4 @@ class FacilitySingle( permission_classes = [permissions.IsAuthenticated] def get(self, request, *args, **kwargs): - return self.retrieve(request, *args, **kwargs) - - -class FacilityImageList( - mixins.ListModelMixin, - mixins.RetrieveModelMixin, - generics.GenericAPIView, -): - """Class defining the web response for the creation of a FacilityImage, or a list of FacilityImages. - - HTTP methods: GET - """ - - queryset = FacilityImage.objects.all() - permission_classes = [permissions.IsAuthenticated] - - def get(self, request, *args, **kwargs): - return self.list(request, *args, **kwargs) + return self.retrieve(request, *args, **kwargs) \ No newline at end of file -- GitLab