diff --git a/backend/api/management/commands/seed_legacy_flavors.py b/backend/api/management/commands/seed_legacy_flavors.py index 62f700e..368435c 100644 --- a/backend/api/management/commands/seed_legacy_flavors.py +++ b/backend/api/management/commands/seed_legacy_flavors.py @@ -41,9 +41,13 @@ class Command(BaseCommand): iced_tea = Category.objects.get_or_create(name='Iced Tea', defaults={'slug': 'iced-tea'})[0] packs = Category.objects.get_or_create(name='Packs and other', defaults={'slug': 'packs-and-other'})[0] + # Try both common locations for the legacy folder legacy_dir = os.path.join(settings.BASE_DIR, 'legacy') if not os.path.exists(legacy_dir): - self.stdout.write(self.style.ERROR(f"Legacy directory not found at {legacy_dir}")) + legacy_dir = os.path.join(settings.BASE_DIR, '..', 'legacy') + + if not os.path.exists(legacy_dir): + self.stdout.write(self.style.ERROR(f"Legacy directory not found. Checked: {os.path.join(settings.BASE_DIR, 'legacy')} and {os.path.join(settings.BASE_DIR, '..', 'legacy')}")) return json_files = [f for f in os.listdir(legacy_dir) if f.endswith('.json')] diff --git a/backend/api/management/commands/sync_flavors.py b/backend/api/management/commands/sync_flavors.py index a1943fd..e142f37 100644 --- a/backend/api/management/commands/sync_flavors.py +++ b/backend/api/management/commands/sync_flavors.py @@ -21,17 +21,15 @@ class Command(BaseCommand): if not url: return None try: - # Simple caching: check if we already have a local image for this URL - # (In a real app, you might compare filenames or hashes) img_temp = NamedTemporaryFile(delete=True) req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) with urllib.request.urlopen(req) as response: img_temp.write(response.read()) img_temp.flush() + img_temp.seek(0) # IMPORTANT: go back to start - # Use extension from URL or default to .png ext = url.split('.')[-1].split('?')[0] - if len(ext) > 4: ext = 'png' + if len(ext) > 4 or len(ext) < 3: ext = 'png' filename = f"{flavor_name.replace(' ', '_').lower()}.{ext}" return File(img_temp, name=filename) except Exception as e: diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh index 14bd668..1cab4f6 100755 --- a/backend/entrypoint.sh +++ b/backend/entrypoint.sh @@ -11,6 +11,9 @@ python manage.py migrate echo "Collecting static files..." python manage.py collectstatic --no-input +# Ensure media directory exists +mkdir -p media/flavors + # Create superuser if it doesn't exist echo "Creating superuser..." python manage.py shell <', serve, {'document_root': settings.MEDIA_ROOT}), +] diff --git a/backend/media/flavors/erdbeere_8XobO0U.webp b/backend/media/flavors/erdbeere_8XobO0U.webp new file mode 100644 index 0000000..085d885 Binary files /dev/null and b/backend/media/flavors/erdbeere_8XobO0U.webp differ diff --git a/backend/media/flavors/erdbeere_GhjocPe.webp b/backend/media/flavors/erdbeere_GhjocPe.webp new file mode 100644 index 0000000..085d885 Binary files /dev/null and b/backend/media/flavors/erdbeere_GhjocPe.webp differ diff --git a/backend/media/flavors/erdbeere_kObBg9r.jpg b/backend/media/flavors/erdbeere_kObBg9r.jpg new file mode 100644 index 0000000..b3e36fd Binary files /dev/null and b/backend/media/flavors/erdbeere_kObBg9r.jpg differ diff --git a/backend/media/flavors/erdbeere_zX0ZBdD.jpg b/backend/media/flavors/erdbeere_zX0ZBdD.jpg new file mode 100644 index 0000000..b3e36fd Binary files /dev/null and b/backend/media/flavors/erdbeere_zX0ZBdD.jpg differ diff --git a/backend/media/flavors/legacy_dolphin_daiquiri_4GbzkZe.png b/backend/media/flavors/legacy_dolphin_daiquiri_4GbzkZe.png new file mode 100644 index 0000000..9adcf21 Binary files /dev/null and b/backend/media/flavors/legacy_dolphin_daiquiri_4GbzkZe.png differ diff --git a/backend/media/flavors/legacy_hitschies_saure_drachenzunge_blau_T89nCMu.png b/backend/media/flavors/legacy_hitschies_saure_drachenzunge_blau_T89nCMu.png new file mode 100644 index 0000000..83176ae Binary files /dev/null and b/backend/media/flavors/legacy_hitschies_saure_drachenzunge_blau_T89nCMu.png differ diff --git a/backend/media/flavors/legacy_hitschies_saure_krakenarme_hIH1gvO.png b/backend/media/flavors/legacy_hitschies_saure_krakenarme_hIH1gvO.png new file mode 100644 index 0000000..d71a1d8 Binary files /dev/null and b/backend/media/flavors/legacy_hitschies_saure_krakenarme_hIH1gvO.png differ diff --git a/backend/media/flavors/legacy_hitschies_saure_spinnenbeine_6PeSy3h.png b/backend/media/flavors/legacy_hitschies_saure_spinnenbeine_6PeSy3h.png new file mode 100644 index 0000000..336929c Binary files /dev/null and b/backend/media/flavors/legacy_hitschies_saure_spinnenbeine_6PeSy3h.png differ diff --git a/backend/media/flavors/starter_set_deluxe_C5vyjC6.jpg b/backend/media/flavors/starter_set_deluxe_C5vyjC6.jpg new file mode 100644 index 0000000..60d7977 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_C5vyjC6.jpg differ diff --git a/backend/media/flavors/starter_set_deluxe_WJotJ0C.png b/backend/media/flavors/starter_set_deluxe_WJotJ0C.png new file mode 100644 index 0000000..11ae4db Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_WJotJ0C.png differ diff --git a/backend/media/flavors/starter_set_deluxe_YoyYU4i.jpg b/backend/media/flavors/starter_set_deluxe_YoyYU4i.jpg new file mode 100644 index 0000000..d3e1fe5 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_YoyYU4i.jpg differ diff --git a/backend/media/flavors/starter_set_deluxe__thermo_shaker_DsI6FiS.png b/backend/media/flavors/starter_set_deluxe__thermo_shaker_DsI6FiS.png new file mode 100644 index 0000000..4b265bc Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe__thermo_shaker_DsI6FiS.png differ diff --git a/backend/media/flavors/starter_set_deluxe__thermo_shaker_Ulrbgxr.png b/backend/media/flavors/starter_set_deluxe__thermo_shaker_Ulrbgxr.png new file mode 100644 index 0000000..01408d8 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe__thermo_shaker_Ulrbgxr.png differ diff --git a/backend/media/flavors/starter_set_deluxe__thermo_shaker_n0UV8EI.png b/backend/media/flavors/starter_set_deluxe__thermo_shaker_n0UV8EI.png new file mode 100644 index 0000000..4b265bc Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe__thermo_shaker_n0UV8EI.png differ diff --git a/backend/media/flavors/starter_set_deluxe__thermo_shaker_ptKNJ05.png b/backend/media/flavors/starter_set_deluxe__thermo_shaker_ptKNJ05.png new file mode 100644 index 0000000..01408d8 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe__thermo_shaker_ptKNJ05.png differ diff --git a/backend/media/flavors/starter_set_deluxe_cPBqGUK.jpg b/backend/media/flavors/starter_set_deluxe_cPBqGUK.jpg new file mode 100644 index 0000000..60d7977 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_cPBqGUK.jpg differ diff --git a/backend/media/flavors/starter_set_deluxe_lQeztgB.jpg b/backend/media/flavors/starter_set_deluxe_lQeztgB.jpg new file mode 100644 index 0000000..d3e1fe5 Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_lQeztgB.jpg differ diff --git a/backend/media/flavors/starter_set_deluxe_qZw7fCF.png b/backend/media/flavors/starter_set_deluxe_qZw7fCF.png new file mode 100644 index 0000000..11ae4db Binary files /dev/null and b/backend/media/flavors/starter_set_deluxe_qZw7fCF.png differ diff --git a/backend/media/flavors/thermo_shaker_3w2Rw2M.png b/backend/media/flavors/thermo_shaker_3w2Rw2M.png new file mode 100644 index 0000000..5f63da4 Binary files /dev/null and b/backend/media/flavors/thermo_shaker_3w2Rw2M.png differ diff --git a/backend/media/flavors/thermo_shaker_HYgKqHf.jpg b/backend/media/flavors/thermo_shaker_HYgKqHf.jpg new file mode 100644 index 0000000..f21ef3f Binary files /dev/null and b/backend/media/flavors/thermo_shaker_HYgKqHf.jpg differ diff --git a/backend/media/flavors/thermo_shaker_aKnCPHy.jpg b/backend/media/flavors/thermo_shaker_aKnCPHy.jpg new file mode 100644 index 0000000..f21ef3f Binary files /dev/null and b/backend/media/flavors/thermo_shaker_aKnCPHy.jpg differ diff --git a/backend/media/flavors/thermo_shaker_dn1owHu.png b/backend/media/flavors/thermo_shaker_dn1owHu.png new file mode 100644 index 0000000..5f63da4 Binary files /dev/null and b/backend/media/flavors/thermo_shaker_dn1owHu.png differ diff --git a/backend/media/flavors/wassermelone_KgiCtva.jpg b/backend/media/flavors/wassermelone_KgiCtva.jpg new file mode 100644 index 0000000..bc337c8 Binary files /dev/null and b/backend/media/flavors/wassermelone_KgiCtva.jpg differ diff --git a/backend/media/flavors/wassermelone_U0EjDDn.jpg b/backend/media/flavors/wassermelone_U0EjDDn.jpg new file mode 100644 index 0000000..f4b7493 Binary files /dev/null and b/backend/media/flavors/wassermelone_U0EjDDn.jpg differ diff --git a/backend/media/flavors/wassermelone_bfgbZF5.jpg b/backend/media/flavors/wassermelone_bfgbZF5.jpg new file mode 100644 index 0000000..f4b7493 Binary files /dev/null and b/backend/media/flavors/wassermelone_bfgbZF5.jpg differ diff --git a/backend/media/flavors/wassermelone_j3zcd1w.jpg b/backend/media/flavors/wassermelone_j3zcd1w.jpg new file mode 100644 index 0000000..bc337c8 Binary files /dev/null and b/backend/media/flavors/wassermelone_j3zcd1w.jpg differ diff --git a/docker-compose.yml b/docker-compose.yml index cd75cf1..2feffc4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,11 @@ services: backend: build: context: ./backend - ports: - - "8000:8000" + container_name: holy-backend + restart: unless-stopped + networks: + - narl + - internal env_file: - ./.env volumes: @@ -13,19 +16,42 @@ services: - ./legacy:/app/legacy environment: - PYTHONUNBUFFERED=1 + labels: + - "traefik.enable=true" + - "traefik.docker.network=narl" + # Route /api, /admin and /media traffic to the backend + - "traefik.http.routers.holy-backend.rule=Host(`holy.narl.io`) && (PathPrefix(`/api`) || PathPrefix(`/admin`) || PathPrefix(`/media`))" + - "traefik.http.routers.holy-backend.entrypoints=websecure" + - "traefik.http.routers.holy-backend.tls.certresolver=https_resolver" + - "traefik.http.services.holy-backend.loadbalancer.server.port=8000" frontend: build: context: ./frontend - ports: - - "5173:5173" + container_name: holy-frontend + restart: unless-stopped + networks: + - narl env_file: - ./.env volumes: - ./frontend:/app - - /app/node_modules # Prevents host node_modules from overwriting container + - /app/node_modules depends_on: - backend + labels: + - "traefik.enable=true" + - "traefik.docker.network=narl" + - "traefik.http.routers.holy-frontend.rule=Host(`holy.narl.io`)" + - "traefik.http.routers.holy-frontend.entrypoints=websecure" + - "traefik.http.routers.holy-frontend.tls.certresolver=https_resolver" + - "traefik.http.services.holy-frontend.loadbalancer.server.port=5173" + +networks: + narl: + external: true + internal: + internal: true volumes: - db_data: # Persist the database + db_data: