From 59f22320aeedcbefffb3c5477f73bcbf25ee5df2 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Tue, 14 Jul 2026 10:22:49 +0330 Subject: [PATCH] refactor(demo): split UI service package --- .env.example | 2 +- README.md | 2 +- docker-compose.yml | 2 +- pyproject.toml | 5 ++- src/gapido_auth/demo/__init__.py | 2 - src/gapido_demo/__init__.py | 1 + src/{gapido_auth/demo => gapido_demo}/app.py | 2 +- .../demo => gapido_demo}/grpc_client.py | 0 src/gapido_demo/py.typed | 1 + .../demo => gapido_demo}/static/app.js | 1 - .../demo => gapido_demo}/static/index.html | 1 - .../demo => gapido_demo}/static/styles.css | 40 +++++++++---------- tests/test_demo_app.py | 4 +- 13 files changed, 32 insertions(+), 31 deletions(-) delete mode 100644 src/gapido_auth/demo/__init__.py create mode 100644 src/gapido_demo/__init__.py rename src/{gapido_auth/demo => gapido_demo}/app.py (98%) rename src/{gapido_auth/demo => gapido_demo}/grpc_client.py (100%) create mode 100644 src/gapido_demo/py.typed rename src/{gapido_auth/demo => gapido_demo}/static/app.js (99%) rename src/{gapido_auth/demo => gapido_demo}/static/index.html (99%) rename src/{gapido_auth/demo => gapido_demo}/static/styles.css (77%) diff --git a/.env.example b/.env.example index 1056677..ccf6cd3 100644 --- a/.env.example +++ b/.env.example @@ -21,6 +21,6 @@ DEMO_ENABLE_DEBUG_OTP=true DEMO_DEBUG_SMS_TTL_SECONDS=300 DEMO_HOST=0.0.0.0 DEMO_PORT=8080 -ADMIN_MOBILE=989120000000 +ADMIN_MOBILE=09120000000 GRPC_HOST=0.0.0.0 GRPC_PORT=50051 diff --git a/README.md b/README.md index a18b5e2..2a3a139 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Supported values: ## Demo UI -`demo-app` is a small FastAPI backend-for-frontend that calls `auth-service` over gRPC. It demonstrates how another microservice consumes the auth service. +`demo-app` is a small FastAPI backend-for-frontend, implemented as the sibling package `gapido_demo`, that calls `auth-service` over gRPC. It demonstrates how another microservice consumes the auth service. Available browser actions: diff --git a/docker-compose.yml b/docker-compose.yml index 2c30844..8d9f8d6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -47,7 +47,7 @@ services: demo-app: build: . - command: uvicorn gapido_auth.demo.app:app --host 0.0.0.0 --port 8080 + command: uvicorn gapido_demo.app:app --host 0.0.0.0 --port 8080 environment: AUTH_GRPC_TARGET: auth-service:50051 REDIS_URL: redis://redis:6379/0 diff --git a/pyproject.toml b/pyproject.toml index 0be599c..f403fb8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,9 @@ build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] +[tool.setuptools.package-data] +gapido_demo = ["static/*"] + [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" @@ -52,7 +55,7 @@ select = ["E", "F", "I", "B", "UP", "ASYNC"] [tool.mypy] python_version = "3.12" strict = true -packages = ["gapido_auth"] +packages = ["gapido_auth", "gapido_demo"] exclude = ["src/gapido_auth/generated"] [[tool.mypy.overrides]] diff --git a/src/gapido_auth/demo/__init__.py b/src/gapido_auth/demo/__init__.py deleted file mode 100644 index 73e7137..0000000 --- a/src/gapido_auth/demo/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""Demo browser client for the auth service.""" - diff --git a/src/gapido_demo/__init__.py b/src/gapido_demo/__init__.py new file mode 100644 index 0000000..20519e9 --- /dev/null +++ b/src/gapido_demo/__init__.py @@ -0,0 +1 @@ +"""Demo browser client service for Gapido Auth.""" diff --git a/src/gapido_auth/demo/app.py b/src/gapido_demo/app.py similarity index 98% rename from src/gapido_auth/demo/app.py rename to src/gapido_demo/app.py index b0c15e2..f3e8a00 100644 --- a/src/gapido_auth/demo/app.py +++ b/src/gapido_demo/app.py @@ -12,8 +12,8 @@ from pydantic import BaseModel, Field from redis.asyncio import Redis from gapido_auth.config import Settings, get_settings -from gapido_auth.demo.grpc_client import AuthGrpcClient, DemoTokenResponse from gapido_auth.infrastructure.debug_sms_client import debug_sms_key +from gapido_demo.grpc_client import AuthGrpcClient, DemoTokenResponse STATIC_DIR = Path(__file__).resolve().parent / "static" T = TypeVar("T") diff --git a/src/gapido_auth/demo/grpc_client.py b/src/gapido_demo/grpc_client.py similarity index 100% rename from src/gapido_auth/demo/grpc_client.py rename to src/gapido_demo/grpc_client.py diff --git a/src/gapido_demo/py.typed b/src/gapido_demo/py.typed new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/gapido_demo/py.typed @@ -0,0 +1 @@ + diff --git a/src/gapido_auth/demo/static/app.js b/src/gapido_demo/static/app.js similarity index 99% rename from src/gapido_auth/demo/static/app.js rename to src/gapido_demo/static/app.js index 943328d..9d36986 100644 --- a/src/gapido_auth/demo/static/app.js +++ b/src/gapido_demo/static/app.js @@ -136,4 +136,3 @@ $("admin").addEventListener("click", async () => { }); render(); - diff --git a/src/gapido_auth/demo/static/index.html b/src/gapido_demo/static/index.html similarity index 99% rename from src/gapido_auth/demo/static/index.html rename to src/gapido_demo/static/index.html index 380f8f7..fa511a0 100644 --- a/src/gapido_auth/demo/static/index.html +++ b/src/gapido_demo/static/index.html @@ -62,4 +62,3 @@ - diff --git a/src/gapido_auth/demo/static/styles.css b/src/gapido_demo/static/styles.css similarity index 77% rename from src/gapido_auth/demo/static/styles.css rename to src/gapido_demo/static/styles.css index 35fd3cc..4903bc6 100644 --- a/src/gapido_auth/demo/static/styles.css +++ b/src/gapido_demo/static/styles.css @@ -1,9 +1,9 @@ :root { - color-scheme: light; + color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - background: #f5f7fb; - color: #1d2433; + background: #0c111d; + color: #e6edf7; } * { @@ -27,11 +27,11 @@ input { } .panel { - background: #ffffff; - border: 1px solid #dbe3ef; + background: #121a2a; + border: 1px solid #243149; border-radius: 8px; padding: 20px; - box-shadow: 0 16px 45px rgb(29 36 51 / 8%); + box-shadow: 0 18px 55px rgb(0 0 0 / 28%); } .identity { @@ -44,7 +44,7 @@ input { .eyebrow { margin: 0 0 4px; font-size: 13px; - color: #5f6f89; + color: #8fa3c1; font-weight: 700; } @@ -63,11 +63,11 @@ h2 { } .status { - border: 1px solid #c4d3ea; + border: 1px solid #2e7d72; border-radius: 999px; padding: 8px 12px; - color: #315477; - background: #eef5ff; + color: #8ff0d2; + background: #0f2a28; font-weight: 700; } @@ -85,32 +85,32 @@ h2 { label { display: grid; gap: 6px; - color: #40516b; + color: #b7c6dd; font-size: 14px; font-weight: 700; } input { width: 100%; - border: 1px solid #cfd9e8; + border: 1px solid #2b3a55; border-radius: 6px; padding: 11px 12px; - color: #1d2433; - background: #fbfdff; + color: #e6edf7; + background: #0b1220; } button { border: 0; border-radius: 6px; padding: 11px 14px; - background: #206a5d; + background: #2d8f7e; color: #ffffff; font-weight: 800; cursor: pointer; } button:hover { - background: #18544a; + background: #247669; } .actions { @@ -132,7 +132,7 @@ button:hover { } dt { - color: #6b7b92; + color: #93a4bc; } dd { @@ -146,8 +146,9 @@ pre { padding: 14px; border-radius: 6px; overflow: auto; - background: #111827; - color: #d1fae5; + border: 1px solid #243149; + background: #080d16; + color: #a7f3d0; } @media (max-width: 760px) { @@ -161,4 +162,3 @@ pre { font-size: 26px; } } - diff --git a/tests/test_demo_app.py b/tests/test_demo_app.py index 0904219..f96cc26 100644 --- a/tests/test_demo_app.py +++ b/tests/test_demo_app.py @@ -3,8 +3,8 @@ from dataclasses import dataclass from fastapi.testclient import TestClient from gapido_auth.config import Settings -from gapido_auth.demo.app import app, get_app_settings, get_auth_client, get_debug_redis -from gapido_auth.demo.grpc_client import DemoTokenResponse +from gapido_demo.app import app, get_app_settings, get_auth_client, get_debug_redis +from gapido_demo.grpc_client import DemoTokenResponse @dataclass(slots=True)