diff --git a/Dockerfile b/Dockerfile index 909d120..6d265e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,12 @@ FROM alpine:3.6 -RUN apk upgrade --update -RUN apk add --update python3 -RUN apk add --update py3-pillow -RUN pip3 install django==1.11.7 django-jinja django-rest-framework django-analytical -ADD ["ofu_app", "/app"] +ADD ["ofu_app/requirements.txt", "/requirements.txt"] +RUN apk upgrade --update && \ + apk add --update python3 py3-pillow py3-lxml py3-psycopg2 && \ + pip3 install -r /requirements.txt && rm /requirements.txt WORKDIR /app EXPOSE 80 -CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"] +VOLUME ["/app/data"] +VOLUME ["/app/media"] +ENTRYPOINT ["python3", "manage.py"] +ADD ["ofu_app", "/app"] +CMD ["runserver", "0.0.0.0:80"] diff --git a/docker-compose.yml b/docker-compose.yml index e10f7ff..a9e2b96 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,14 @@ services: basta_server_web: image: docker.wiai.de/basta/server:0.1 build: . - ports: - - "8080:80" -# basta_server_db: -# image: postgres:alpine - + volumes: + - ./data/data:/data + - ./data/media:/media + env_file: + - docker.env + basta_server_db: + image: postgres:10-alpine + volumes: + - ./data/pgdata/:/var/lib/postgresql/data/ + env_file: + - docker.env diff --git a/ofu_app/apps/donar/admin.py b/ofu_app/apps/donar/admin.py index 9d714c3..81bfd83 100644 --- a/ofu_app/apps/donar/admin.py +++ b/ofu_app/apps/donar/admin.py @@ -1,7 +1,8 @@ from django.contrib import admin from apps.donar.models import Room, Lecture, Lecture_Terms, VGN_Coords + # Register your models here. admin.site.register(Room) admin.site.register(Lecture) admin.site.register(Lecture_Terms) -admin.site.register(VGN_Coords) \ No newline at end of file +admin.site.register(VGN_Coords) diff --git a/ofu_app/apps/donar/models.py b/ofu_app/apps/donar/models.py index 9b94e33..6450cc5 100644 --- a/ofu_app/apps/donar/models.py +++ b/ofu_app/apps/donar/models.py @@ -1,21 +1,33 @@ from django.db import models from django.utils import timezone -MAX_LENGTH = 60 +MAX_ROOM_KEY_LENGTH = 256 +MAX_ROOM_NAME_LENGTH = 256 +MAX_ROOM_ADDRESS_LENGTH = 256 +MAX_ROOM_SIZE_LENGTH = 64 +MAX_ROOM_DESCRIPTION_LENGTH = 512 + +MAX_COORDS_NAME_LENGTH = 256 +MAX_COORDS_LENGTH = 256 + +MAX_LECTURE_IDS_LENGTH = 256 +MAX_LECTURE_SHORT_LENGTH = 128 +MAX_LECTURE_NAME_LENGTH = 256 +MAX_LECTURE_TYPE_LENGTH = 64 # Create your models here. class Room(models.Model): id = models.AutoField(primary_key=True) - key = models.CharField(max_length=MAX_LENGTH, default="") - address = models.CharField(max_length=MAX_LENGTH, default="") - building_key = models.CharField(max_length=MAX_LENGTH, default="") - floor = models.CharField(max_length=MAX_LENGTH, default="") - name = models.CharField(max_length=MAX_LENGTH, default="") - orgname = models.CharField(max_length=MAX_LENGTH, default="") - short = models.CharField(unique=True, max_length=MAX_LENGTH) - size = models.CharField(max_length=MAX_LENGTH, default="") - description = models.CharField(max_length=200, default="") + key = models.CharField(max_length=MAX_ROOM_KEY_LENGTH, default="") + address = models.CharField(max_length=MAX_ROOM_ADDRESS_LENGTH, default="") + building_key = models.CharField(max_length=MAX_ROOM_KEY_LENGTH, default="") + floor = models.CharField(max_length=MAX_ROOM_KEY_LENGTH, default="") + name = models.CharField(max_length=MAX_ROOM_NAME_LENGTH, default="") + orgname = models.CharField(max_length=MAX_ROOM_KEY_LENGTH, default="") + short = models.CharField(unique=True, max_length=MAX_ROOM_KEY_LENGTH) + size = models.CharField(max_length=MAX_ROOM_SIZE_LENGTH, default="") + description = models.CharField(max_length=MAX_ROOM_DESCRIPTION_LENGTH, default="") def __str__(self): return "%s - size: %s" % (self.short, str(self.size)) @@ -23,10 +35,10 @@ class Room(models.Model): class VGN_Coords(models.Model): id = models.AutoField(primary_key=True) - name = models.CharField(max_length=MAX_LENGTH, unique=True) - coords = models.CharField(max_length=MAX_LENGTH, unique=True) - longitude = models.CharField(max_length=MAX_LENGTH, unique=True) - latitude = models.CharField(max_length=MAX_LENGTH, unique=True) + name = models.CharField(max_length=MAX_COORDS_NAME_LENGTH, unique=True) + coords = models.CharField(max_length=MAX_COORDS_LENGTH, unique=True) + longitude = models.CharField(max_length=MAX_COORDS_LENGTH, unique=True) + latitude = models.CharField(max_length=MAX_COORDS_LENGTH, unique=True) def __str__(self): return "%s" % self.name @@ -34,12 +46,12 @@ class VGN_Coords(models.Model): class Lecture(models.Model): id = models.AutoField(primary_key=True) - univis_ref = models.CharField(max_length=MAX_LENGTH, unique=True) - univis_id = models.CharField(max_length=MAX_LENGTH, unique=True) - name = models.CharField(max_length=MAX_LENGTH) - short = models.CharField(max_length=MAX_LENGTH) - type = models.CharField(max_length=MAX_LENGTH) - lecturer_id = models.CharField(max_length=MAX_LENGTH) + univis_ref = models.CharField(max_length=MAX_LECTURE_IDS_LENGTH, unique=True) + univis_id = models.CharField(max_length=MAX_LECTURE_IDS_LENGTH, unique=True) + name = models.CharField(max_length=MAX_LECTURE_NAME_LENGTH) + short = models.CharField(max_length=MAX_LECTURE_SHORT_LENGTH) + type = models.CharField(max_length=MAX_LECTURE_TYPE_LENGTH) + lecturer_id = models.CharField(max_length=MAX_LECTURE_IDS_LENGTH) term = models.ManyToManyField('Lecture_Terms', blank=False) def __str__(self): diff --git a/ofu_app/apps/events/models.py b/ofu_app/apps/events/models.py index cceb1d0..7bbf5e0 100644 --- a/ofu_app/apps/events/models.py +++ b/ofu_app/apps/events/models.py @@ -2,20 +2,28 @@ from __future__ import unicode_literals from django.utils import timezone from django.db import models -MAX_LENGTH = 60 +MAX_EVENT_ID_LENGTH = 64 +MAX_EVENT_TITLE_LENGTH = 256 +MAX_EVENT_CATEGORY_LENGTH = 64 +MAX_EVENT_LINK_LENGTH = 512 +MAX_EVENT_PRESENTER_LENGTH = 256 +MAX_EVENT_ORGNAME_LENGTH = 256 + +MAX_LOCATION_KEY_LENGTH = 128 +MAX_LOCATION_NAME_LENGTH = 256 # Create your models here. class Event(models.Model): id = models.AutoField(primary_key=True) - title = models.CharField(blank=False, max_length=MAX_LENGTH) - category = models.CharField(blank=False, max_length=MAX_LENGTH) - link = models.CharField(blank=True, max_length=MAX_LENGTH) + title = models.CharField(blank=False, max_length=MAX_EVENT_TITLE_LENGTH) + category = models.CharField(blank=False, max_length=MAX_EVENT_CATEGORY_LENGTH) + link = models.CharField(blank=True, max_length=MAX_EVENT_LINK_LENGTH) locations = models.ManyToManyField('Location', blank=False) date = models.DateField(blank=False, default=timezone.now) time = models.TimeField(blank=False, default=timezone.now) - presenter = models.CharField(blank=True, max_length=MAX_LENGTH) - orgname = models.CharField(blank=True, max_length=MAX_LENGTH) + presenter = models.CharField(blank=True, max_length=MAX_EVENT_PRESENTER_LENGTH) + orgname = models.CharField(blank=True, max_length=MAX_EVENT_ORGNAME_LENGTH) def __str__(self): return "Date: %s, Titel: %s" % (self.date.strftime("%Y.%m.%d"), self.title) @@ -26,8 +34,8 @@ class Event(models.Model): class Location(models.Model): id = models.AutoField(primary_key=True) - key = models.CharField(blank=True, max_length=MAX_LENGTH) - name = models.CharField(blank=False, unique=True, max_length=MAX_LENGTH) + key = models.CharField(blank=True, max_length=MAX_LOCATION_KEY_LENGTH) + name = models.CharField(blank=False, unique=True, max_length=MAX_LOCATION_NAME_LENGTH) def __str__(self): return str(self.name) diff --git a/ofu_app/apps/food/admin.py b/ofu_app/apps/food/admin.py index 160c214..f36ae24 100644 --- a/ofu_app/apps/food/admin.py +++ b/ofu_app/apps/food/admin.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.contrib import admin -from apps.food.models import SingleFood, Menu, HappyHour, UserRating, UserFoodImage +from apps.food.models import SingleFood, Menu, HappyHour, UserRating, UserFoodImage, FoodImage class SingleFoodInline(admin.TabularInline): @@ -25,3 +25,4 @@ admin.site.register(HappyHour) admin.site.register(UserRating) admin.site.register(UserFoodImage) admin.site.register(Menu, MenuAdmin) +admin.site.register(FoodImage) diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index c393014..89e2916 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -12,6 +12,12 @@ from django.db import models from django.utils import timezone MAX_LENGTH = 256 +MAX_FOOD_NAME = 256 +MAX_FOOD_LOCATION_LENGTH = 256 +MAX_FOOD_PRICE_LENGTH = 10 +MAX_FOOD_ALLERGENNAME_LENGTH = 256 +MAX_HAPPY_HOUR_LOCATION_LENGTH = 256 +MAX_HAPPY_HOUR_DESCRIPTION_LENGTH = 1024 # Create your models here. @@ -25,7 +31,7 @@ class Menu(models.Model): (ERBA, 'Erba'), (MARKUSPLATZ, 'Markusplatz'), (FEKI, 'Feldkirchenstrasse'), (AUSTRASSE, 'Austrasse')) id = models.AutoField(primary_key=True) date = models.DateField(default=timezone.now) - location = models.CharField(max_length=MAX_LENGTH, choices=LOCATION_CHOICES) + location = models.CharField(max_length=MAX_FOOD_LOCATION_LENGTH, choices=LOCATION_CHOICES) menu = models.ManyToManyField("SingleFood", related_name="foods") class Meta: @@ -37,10 +43,10 @@ class Menu(models.Model): class SingleFood(models.Model): id = models.AutoField(primary_key=True) - name = models.CharField(unique=True, max_length=MAX_LENGTH) - price_student = models.CharField(max_length=10, blank=True, null=True) - price_employee = models.CharField(max_length=10, blank=True, null=True) - price_guest = models.CharField(max_length=10, blank=True, null=True) + name = models.CharField(unique=True, max_length=MAX_FOOD_NAME) + price_student = models.CharField(max_length=MAX_FOOD_PRICE_LENGTH, blank=True, null=True) + price_employee = models.CharField(max_length=MAX_FOOD_PRICE_LENGTH, blank=True, null=True) + price_guest = models.CharField(max_length=MAX_FOOD_PRICE_LENGTH, blank=True, null=True) image = models.ForeignKey('FoodImage', on_delete=models.PROTECT, blank=True, null=True) rating = models.FloatField(default=0) allergens = models.ManyToManyField("Allergene", blank=True) @@ -51,7 +57,7 @@ class SingleFood(models.Model): class Allergene(models.Model): id = models.AutoField(primary_key=True) - name = models.CharField(unique=True, max_length=MAX_LENGTH) + name = models.CharField(unique=True, max_length=MAX_FOOD_ALLERGENNAME_LENGTH) def __str__(self): return self.name @@ -62,8 +68,8 @@ class HappyHour(models.Model): date = models.DateField(default=timezone.now) starttime = models.TimeField(default=timezone.now) endtime = models.TimeField(default=timezone.now) - location = models.CharField(max_length=MAX_LENGTH) - description = models.CharField(max_length=MAX_LENGTH) + location = models.CharField(max_length=MAX_HAPPY_HOUR_LOCATION_LENGTH) + description = models.CharField(max_length=MAX_HAPPY_HOUR_DESCRIPTION_LENGTH) class Meta: # TODO: unique description instead of date