From 8c683008ea4937524e7bc3d3298bff31e7009785 Mon Sep 17 00:00:00 2001 From: "user@node5.net" Date: Sun, 7 Dec 2025 01:30:50 +0100 Subject: Add new drinks app with data models --- web_interface/drinks/__init__.py | 0 web_interface/drinks/admin.py | 3 + web_interface/drinks/apps.py | 5 ++ web_interface/drinks/migrations/__init__.py | 0 web_interface/drinks/models.py | 100 ++++++++++++++++++++++++++++ web_interface/drinks/tests.py | 3 + web_interface/drinks/urls.py | 7 ++ web_interface/drinks/views.py | 7 ++ 8 files changed, 125 insertions(+) create mode 100644 web_interface/drinks/__init__.py create mode 100644 web_interface/drinks/admin.py create mode 100644 web_interface/drinks/apps.py create mode 100644 web_interface/drinks/migrations/__init__.py create mode 100644 web_interface/drinks/models.py create mode 100644 web_interface/drinks/tests.py create mode 100644 web_interface/drinks/urls.py create mode 100644 web_interface/drinks/views.py (limited to 'web_interface/drinks') diff --git a/web_interface/drinks/__init__.py b/web_interface/drinks/__init__.py new file mode 100644 index 0000000..e69de29 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 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("🍺🍸🍻") -- cgit v1.3.1