diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index caeb9aa..2d0f319 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -9,12 +9,12 @@ jobs: - uses: actions/checkout@v4 - name: Login run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.czernobog.pl -u gitea --password-stdin - # astroklient dołącza do tej samej pętli: dzieli warstwę logiczną i łącze, + # astroklient-demo dołącza do tej samej pętli: dzieli warstwę logiczną i łącze, # więc jego obraz ma powstawać z tego samego commita co reszta produktu. - - name: Build & push (data, logic, presentation, astroklient) + - name: Build & push (data, logic, presentation, astroklient-demo) run: | TAG=${GITHUB_SHA::8} - for SVC in data logic presentation astroklient; do + for SVC in data logic presentation astroklient-demo; do docker build -t gitea.czernobog.pl/gitea/astrololo-$SVC:$TAG ./services/$SVC docker push gitea.czernobog.pl/gitea/astrololo-$SVC:$TAG done diff --git a/.gitea/workflows/tests.yml b/.gitea/workflows/tests.yml index ec025a4..2021e5a 100644 --- a/.gitea/workflows/tests.yml +++ b/.gitea/workflows/tests.yml @@ -91,8 +91,8 @@ jobs: PYTHONPATH: . run: pytest tests -q -rs - astroklient-tests: - name: Testy astroklienta (wersja demo) + astroklient-demo-tests: + name: Testy astroklienta-demo runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -100,14 +100,14 @@ jobs: with: python-version: "3.12" cache: pip - cache-dependency-path: services/astroklient/requirements-dev.txt + cache-dependency-path: services/astroklient-demo/requirements-dev.txt - name: Instalacja zależności - run: pip install -r services/astroklient/requirements-dev.txt + run: pip install -r services/astroklient-demo/requirements-dev.txt # Demo rozmawia z warstwą danych PRODUKCJI, więc jego powierzchnia musi być # pilnowana tak samo jak reszty: testy sprawdzają m.in., że nie przybyła # żadna trasa poza dwiema funkcjami. - name: Testy (pytest) - working-directory: services/astroklient + working-directory: services/astroklient-demo env: PYTHONPATH: . run: pytest tests -q -rs diff --git a/docs/astrololo_wymagania.xlsx b/docs/astrololo_wymagania.xlsx index e6f860b..c0dd2af 100644 Binary files a/docs/astrololo_wymagania.xlsx and b/docs/astrololo_wymagania.xlsx differ diff --git a/services/astroklient/Dockerfile b/services/astroklient-demo/Dockerfile similarity index 100% rename from services/astroklient/Dockerfile rename to services/astroklient-demo/Dockerfile diff --git a/services/astroklient/README.md b/services/astroklient-demo/README.md similarity index 93% rename from services/astroklient/README.md rename to services/astroklient-demo/README.md index d8445af..9d381af 100644 --- a/services/astroklient/README.md +++ b/services/astroklient-demo/README.md @@ -1,4 +1,4 @@ -# astroklient — wersja demonstracyjna (PRE-28) +# astroklient-demo — wersja demonstracyjna (PRE-28) Osobna warstwa prezentacji o **dwóch funkcjach**: @@ -18,7 +18,7 @@ okazji kodu reszty programu. ## Izolacja: własne dane, pula na konto ``` -astroklient → logic-demo → data-demo → udział astrololo-demo (pusty na starcie) +astroklient-demo → logic-demo → data-demo → udział astrololo-demo (pusty na starcie) └── klientA/ ← pula konta └── klientB/ ← pula konta ``` @@ -42,7 +42,7 @@ w nazwie katalogu: `../..` czy ukośnik wyprowadziłyby zapytanie poza udział. **Pula klienta to jeden katalog**, więc przejście na pełną wersję nie oznacza utraty wgrań — procedura importu jest w runbooku wdrożenia (repo `deploy`, -`astrololo/README-astroklient.md`). +`astrololo/README-astroklient-demo.md`). ## Konfiguracja @@ -66,7 +66,7 @@ cd services/presentation && python scripts/make_user.py demo ## Uruchomienie lokalne ```bash -cd services/astroklient +cd services/astroklient-demo pip install -r requirements-dev.txt DEMO_PASSWORD=tajne LOGIC_URL=http://localhost:8001 \ uvicorn app.main:app --port 8005 @@ -75,7 +75,7 @@ DEMO_PASSWORD=tajne LOGIC_URL=http://localhost:8001 \ Testy: ```bash -cd services/astroklient && PYTHONPATH=. pytest tests -q +cd services/astroklient-demo && PYTHONPATH=. pytest tests -q ``` ## Co pilnują testy diff --git a/services/astroklient/app/__init__.py b/services/astroklient-demo/app/__init__.py similarity index 100% rename from services/astroklient/app/__init__.py rename to services/astroklient-demo/app/__init__.py diff --git a/services/astroklient/app/clients/__init__.py b/services/astroklient-demo/app/clients/__init__.py similarity index 100% rename from services/astroklient/app/clients/__init__.py rename to services/astroklient-demo/app/clients/__init__.py diff --git a/services/astroklient/app/clients/logic_client.py b/services/astroklient-demo/app/clients/logic_client.py similarity index 97% rename from services/astroklient/app/clients/logic_client.py rename to services/astroklient-demo/app/clients/logic_client.py index bc64945..bddb49a 100644 --- a/services/astroklient/app/clients/logic_client.py +++ b/services/astroklient-demo/app/clients/logic_client.py @@ -45,7 +45,7 @@ class LogicClient: def report(self, when_utc_iso: str, lat: float, lon: float) -> dict[str, Any]: """Interpretacja urodzeniowa: sygnifikatory z obliczeń szukane w bazach. - Jedyne pytanie, jakie astroklient zadaje o treść — bez grupowania, + Jedyne pytanie, jakie astroklient-demo zadaje o treść — bez grupowania, bez promptów, bez modelu językowego.""" payload = {"when_utc": when_utc_iso, "lat": lat, "lon": lon, "limit": settings.report_limit, "group": False, diff --git a/services/astroklient/app/config.py b/services/astroklient-demo/app/config.py similarity index 92% rename from services/astroklient/app/config.py rename to services/astroklient-demo/app/config.py index 0e3769b..b02ed6a 100644 --- a/services/astroklient/app/config.py +++ b/services/astroklient-demo/app/config.py @@ -1,4 +1,4 @@ -"""Konfiguracja astroklienta — wersji demonstracyjnej (PRE-28). +"""Konfiguracja astroklienta-demo — wersji demonstracyjnej (PRE-28). Zna WYŁĄCZNIE adres warstwy logicznej, tak samo jak pełna prezentacja. Nie wie nic o bazach, Excelu ani SQL-u. diff --git a/services/astroklient/app/link_crypto.py b/services/astroklient-demo/app/link_crypto.py similarity index 100% rename from services/astroklient/app/link_crypto.py rename to services/astroklient-demo/app/link_crypto.py diff --git a/services/astroklient/app/main.py b/services/astroklient-demo/app/main.py similarity index 94% rename from services/astroklient/app/main.py rename to services/astroklient-demo/app/main.py index 47369f8..bb011cd 100644 --- a/services/astroklient/app/main.py +++ b/services/astroklient-demo/app/main.py @@ -1,4 +1,4 @@ -"""astroklient — wersja DEMONSTRACYJNA (PRE-28). +"""astroklient-demo — wersja DEMONSTRACYJNA (PRE-28). DWIE FUNKCJE I ANI JEDNEJ WIĘCEJ: 1. dodanie pliku bazy (wgranie + włączenie do użytku), @@ -10,7 +10,7 @@ Tutaj pozostałych funkcji NIE MA W OBRAZIE: nie ma tras, nie ma szablonów, nie nawet metod w kliencie warstwy logicznej. Demo można komuś oddać, nie oddając przy okazji kodu reszty programu. -UWAGA, ŚWIADOMA DECYZJA WŁAŚCICIELA: astroklient pracuje na TEJ SAMEJ warstwie +UWAGA, ŚWIADOMA DECYZJA WŁAŚCICIELA: astroklient-demo pracuje na TEJ SAMEJ warstwie danych co produkcja. Kto ma do niego dostęp, czyta oryginalne bazy interpretacyjne, a pliki przez niego wgrane trafiają do produkcyjnego zbioru. Dlatego konto jest osobne (DEMO_USER/DEMO_PASSWORD) — żeby dało się odciąć demo jedną zmienną, bez @@ -32,7 +32,7 @@ from app.clients.logic_client import LogicClient # Automatyczna dokumentacja WYŁĄCZONA — tak samo jak w pełnej aplikacji. /docs # wypisałoby komplet tras, a demo ma nie zdradzać nawet własnej powierzchni. -app = FastAPI(title="astroklient · demo", docs_url=None, redoc_url=None, openapi_url=None) +app = FastAPI(title="astroklient-demo", docs_url=None, redoc_url=None, openapi_url=None) security.install(app) app.mount("/static", StaticFiles(directory="app/static"), name="static") @@ -48,7 +48,7 @@ def _logic(request: Request) -> LogicClient: return LogicClient(tenant=getattr(request.state, "user", "") or "") # Stan pliku „w użyciu" — ta sama nazwa, co w warstwie danych (DAN-27). Wpisana -# tutaj wprost, bo astroklient nie importuje tamtej warstwy; literówka objawiłaby +# tutaj wprost, bo astroklient-demo nie importuje tamtej warstwy; literówka objawiłaby # się dopiero na żywo, więc pilnuje jej test. ACTIVE = "active" @@ -152,4 +152,4 @@ def _wroc(error: str = "", done: str = "") -> RedirectResponse: @app.get("/health") def health() -> dict: - return {"status": "ok", "layer": "astroklient"} + return {"status": "ok", "layer": "astroklient-demo"} diff --git a/services/astroklient/app/security.py b/services/astroklient-demo/app/security.py similarity index 97% rename from services/astroklient/app/security.py rename to services/astroklient-demo/app/security.py index 7a74da9..b8b1fe1 100644 --- a/services/astroklient/app/security.py +++ b/services/astroklient-demo/app/security.py @@ -1,4 +1,4 @@ -"""Logowanie do astroklienta (PRE-28). +"""Logowanie do astroklienta-demo (PRE-28). OSOBNE KONTO, NIE WSPÓŁDZIELONE Z GŁÓWNĄ APLIKACJĄ. Demo pracuje na tej samej warstwie danych co produkcja, więc kto ma do niego dostęp, czyta oryginalne bazy @@ -26,8 +26,8 @@ from collections import deque from fastapi import Request from fastapi.responses import HTMLResponse, JSONResponse -log = logging.getLogger("astroklient.security") -audit_log = logging.getLogger("astroklient.audit") +log = logging.getLogger("astroklient-demo.security") +audit_log = logging.getLogger("astroklient-demo.audit") _SCRYPT_N, _SCRYPT_R, _SCRYPT_P, _SCRYPT_LEN = 2**14, 8, 1, 32 _HASH_PREFIX = "scrypt$" @@ -163,7 +163,7 @@ def install(app) -> None: _setup_audit_logging() if not auth_enabled(): log.warning( - "UWAGA: brak kont (DEMO_USERS / DEMO_PASSWORD) — astroklient stoi OTWARTY. " + "UWAGA: brak kont (DEMO_USERS / DEMO_PASSWORD) — astroklient-demo stoi OTWARTY. " "Bez logowania nie ma też PULI: wszyscy pracowaliby na jednym, wspólnym " "zbiorze baz, widząc nawzajem swoje wgrania." ) @@ -184,7 +184,7 @@ def install(app) -> None: if not user: return HTMLResponse( "