aboutsummaryrefslogtreecommitdiff
path: root/web_interface/drinks
diff options
context:
space:
mode:
authoruser@node5.net <user@node5.net>2025-12-07 01:30:50 +0100
committeruser@node5.net <user@node5.net>2025-12-07 12:55:14 +0100
commit8c683008ea4937524e7bc3d3298bff31e7009785 (patch)
tree9495eb4f56375286ae9f19ffc61afc200aa1a366 /web_interface/drinks
parent65eacbe27205594ce4991e2d1ccf452c2925b906 (diff)
Add new drinks app with data models
Diffstat (limited to 'web_interface/drinks')
-rw-r--r--web_interface/drinks/__init__.py0
-rw-r--r--web_interface/drinks/admin.py3
-rw-r--r--web_interface/drinks/apps.py5
-rw-r--r--web_interface/drinks/migrations/__init__.py0
-rw-r--r--web_interface/drinks/models.py100
-rw-r--r--web_interface/drinks/tests.py3
-rw-r--r--web_interface/drinks/urls.py7
-rw-r--r--web_interface/drinks/views.py7
8 files changed, 125 insertions, 0 deletions
diff --git a/web_interface/drinks/__init__.py b/web_interface/drinks/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web_interface/drinks/__init__.py
diff --git a/web_interface/drinks/admin.py b/web_interface/drinks/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/web_interface/drinks/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/web_interface/drinks/apps.py b/web_interface/drinks/apps.py
new file mode 100644
index 0000000..3be1a01
--- /dev/null
+++ b/web_interface/drinks/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class DrinksConfig(AppConfig):
+ name = 'drinks'
diff --git a/web_interface/drinks/migrations/__init__.py b/web_interface/drinks/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web_interface/drinks/migrations/__init__.py
diff --git a/web_interface/drinks/models.py b/web_interface/drinks/models.py
new file mode 100644
index 0000000..f1889bd
--- /dev/null
+++ b/web_interface/drinks/models.py
@@ -0,0 +1,100 @@
+from django.db import models
+from colorfield.fields import ColorField
+
+
+class Drink(models.Model):
+ name = models.CharField(
+ verbose_name="Name",
+ help_text="Name of the drink, for displaying in overview",
+ )
+
+ description = models.TextField(
+ verbose_name="Description",
+ help_text="Free text field that will be shown to the users",
+ )
+
+ picture = models.ImageField(
+ verbose_name="Picture",
+ help_text="A picture for the overview",
+ )
+
+ author = models.ForeignKey(
+ verbose_name="Author",
+ help_text="Author of the drink",
+ to=Author,
+ on_delete=models.CASCADE
+ )
+
+
+class Author(models.Model):
+ first_name = models.CharField(
+ verbose_name="First name",
+ help_text="First name of the author of a drink",
+ )
+
+ last_name = models.CharField(
+ verbose_name="Last name",
+ help_text="Last name of the author of a drink",
+ )
+
+ @property
+ def initials(self) -> str:
+ return f"{self.first_name[0].upper()}.{self.last_name[0].upper()}."
+
+
+class Bottle(models.Model):
+ name = models.CharField(
+ verbose_name="Bottle",
+ help_text="Name of the type bottle. e.g. Coca Cola, *Specific Whiskey*",
+ )
+
+ description = models.TextField(
+ verbose_name="Description",
+ help_text="Free text field that will be shown to the users",
+ )
+
+ picture = models.ImageField(
+ verbose_name="Picture",
+ help_text="A picture for the overview",
+ )
+
+ color = ColorField(
+ verbose_name="Color",
+ help_text="Color of the drink, used in the UI",
+ )
+
+class Unit(models.Model):
+ abbreviation = models.CharField(
+ verbose_name="Bottle",
+ help_text="E.g: ml.",
+ )
+
+ name = models.CharField(
+ verbose_name="Bottle",
+ help_text="E.g: ml.",
+ )
+
+ pump_time = models.FloatField(
+ verbose_name="Pump time",
+ help_text="Amount of time to run the pump for to dispence 1 of these units",
+ )
+
+ valve_time = models.FloatField(
+ verbose_name="Pump time",
+ help_text="Amount of time to run the pump for to dispence 1 of these units",
+ )
+
+
+class Ingredient(models.Model):
+ bottle = models.ForeignKey(
+ verbose_name="Bottle",
+ help_text="This ingredient's bottle",
+ to=Bottle,
+ on_delete=models.CASCADE
+ )
+
+ amount = models.IntegerField(
+ verbose_name="Amount",
+ help_text=="In conjunction with unit it is an absolute amount",
+ )
+
diff --git a/web_interface/drinks/tests.py b/web_interface/drinks/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/web_interface/drinks/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/web_interface/drinks/urls.py b/web_interface/drinks/urls.py
new file mode 100644
index 0000000..5119061
--- /dev/null
+++ b/web_interface/drinks/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from . import views
+
+urlpatterns = [
+ path("", views.index, name="index"),
+]
diff --git a/web_interface/drinks/views.py b/web_interface/drinks/views.py
new file mode 100644
index 0000000..8c5ef2b
--- /dev/null
+++ b/web_interface/drinks/views.py
@@ -0,0 +1,7 @@
+from django.shortcuts import render
+from django.http import HttpResponse
+
+# Create your views here.
+
+def index(request):
+ return HttpResponse("🍺🍸🍻")