Skip to content

BaranGreg/Food-Manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍽️ Menadżer Żywności

Aplikacja webowa PWA do zarządzania produktami spożywczymi w domu. Zbudowana w architekturze Clean Architecture z ASP.NET Core (.NET 10), Blazor WebAssembly i SQLite.

Funkcje

  • 📦 Magazyn – dodawanie i śledzenie stanu produktów z datami ważności
  • 📷 Skaner kodów kreskowych – kamera + ZXing, automatyczne pobieranie danych z Open Food Facts
  • ⚠️ Alerty – powiadomienia o produktach wygasających i niskim stanie
  • 🛒 Lista zakupów – ręczne dodawanie i automatyczne generowanie z niskiego stanu
  • 🌙 Tryb ciemny – Material Design UI (MudBlazor) zoptymalizowane pod tablety/telefony
  • 📱 PWA – instalowalna aplikacja z obsługą offline

Stos technologiczny

Warstwa Technologia
Backend ASP.NET Core 10, MediatR 14, FluentValidation
Baza danych SQLite + EF Core 10
Frontend Blazor WASM 10, MudBlazor 9
Barcode ZXing @zxing/browser
Dane zewn. Open Food Facts API
Testy xUnit, Moq, FluentAssertions
Wdrożenie Docker Compose + nginx

Uruchomienie lokalne

Wymagania

Backend (API)

cd src/FoodManager.Api
dotnet run

API dostępne pod: https://localhost:7001
Swagger UI: https://localhost:7001/swagger

Frontend (Blazor WASM)

W oddzielnym terminalu:

cd src/FoodManager.Web
dotnet run

Otwórz: https://localhost:5001

Upewnij się, że wwwroot/appsettings.json wskazuje właściwy adres API:

{ "ApiBaseUrl": "https://localhost:7001/" }

Uruchomienie przez Docker Compose

# Budowanie i uruchomienie
docker compose up --build -d

# Logi
docker compose logs -f api

# Zatrzymanie
docker compose down
  • Frontend: http://localhost:8080
  • API: http://localhost:7001
  • Swagger: http://localhost:7001/swagger

Dane SQLite są przechowywane w wolumenie Docker fm_data.


Dostęp zdalny przez Cloudflare Tunnel

  1. Zainstaluj cloudflared:

    winget install Cloudflare.cloudflared
  2. Zaloguj się:

    cloudflared tunnel login
  3. Utwórz tunel:

    cloudflared tunnel create foodmanager
  4. Skonfiguruj plik ~/.cloudflared/config.yml:

    tunnel: <TUNNEL_ID>
    credentials-file: ~/.cloudflared/<TUNNEL_ID>.json
    
    ingress:
      - hostname: food.twojadomena.com
        service: http://localhost:8080
      - service: http_status:404
  5. Dodaj DNS i uruchom:

    cloudflared tunnel route dns foodmanager food.twojadomena.com
    cloudflared tunnel run foodmanager

Zabezpieczenia API

Ustaw klucz API w appsettings.json:

{
  "ApiKey": "TwojTajnyKlucz"
}

Lub przez zmienną środowiskową Docker:

environment:
  - ApiKey=TwojTajnyKlucz

Każde żądanie musi zawierać nagłówek: X-Api-Key: TwojTajnyKlucz


Uruchomienie testów

# Testy jednostkowe
dotnet test tests/FoodManager.UnitTests

# Testy integracyjne
dotnet test tests/FoodManager.IntegrationTests

# Wszystkie testy z pokryciem kodu
dotnet test --collect "XPlat Code Coverage"

Struktura projektu

FoodManager/
├── src/
│   ├── FoodManager.Domain/          # Encje, interfejsy, enumy
│   ├── FoodManager.Application/     # CQRS (MediatR), DTOs, walidacja
│   ├── FoodManager.Infrastructure/  # EF Core, repozytoria, usługi zewn.
│   ├── FoodManager.Api/             # REST API (kontrolery, middleware)
│   └── FoodManager.Web/             # Blazor WASM PWA (UI)
├── tests/
│   ├── FoodManager.UnitTests/
│   └── FoodManager.IntegrationTests/
├── docker-compose.yml
└── README.md

Konfiguracja bazy danych

Aplikacja używa EnsureCreated() przy starcie — baza i schemat są tworzone automatycznie.
Przy pierwszym uruchomieniu wstawianych jest 10 domyślnych kategorii (Nabiał, Pieczywo, Mięso itd.).

Plik bazy: src/FoodManager.Api/Data/food.db (lokalnie) lub wolumin Docker fm_data.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors