5128e1551c
Backend (backend/):
- FastAPI app with layered app/{api,core,crud,db,models,schemas} structure
- TiDB connection via SQLAlchemy. The URL is built with URL.create rather
than string formatting: the password contains '@', which would otherwise be
parsed as the user/host separator and silently truncate the credential.
- Alembic environment wired to Base.metadata and the app settings, so
backend/.env stays the single source of truth for credentials
- /api/health endpoint reporting database reachability
- models/ and crud/ are intentionally empty: no model classes are defined and
no tables are created, at import time or otherwise
Frontend (frontend/):
- Vue 3 + Vite + TypeScript scaffold (create-vue, --bare)
- axios instance with a normalized error shape
- vue-router with a home route and a catch-all 404
- pinia + pinia-plugin-persistedstate; the app store persists selected keys
- Element Plus with its icons registered globally
- dev proxy forwards /api to the FastAPI service on port 8000
The database paper_doc was created in TiDB out of band; no table exists yet.
20 lines
680 B
Bash
20 lines
680 B
Bash
# Copy to .env and fill in real values. .env is git-ignored.
|
|
|
|
# --- Application ---
|
|
APP_NAME=paper-doc API
|
|
DEBUG=true
|
|
|
|
# --- Database (TiDB) ---
|
|
# Local development reaches TiDB through its k3s NodePort.
|
|
# Inside the cluster, use the Service instead: DB_HOST=tidb-tidb.tidb, DB_PORT=4000
|
|
DB_HOST=192.168.1.88
|
|
DB_PORT=32738
|
|
DB_USER=Govin
|
|
DB_PASSWORD=change-me
|
|
DB_NAME=paper_doc
|
|
|
|
# Optional: bypass the DB_* parts above with a full SQLAlchemy URL.
|
|
# The password must be percent-encoded (a raw '@' would be parsed as the
|
|
# user/host separator). Prefer the DB_* parts above and let the app encode it.
|
|
# DATABASE_URL=mysql+pymysql://Govin:change-me%40123@192.168.1.88:32738/paper_doc
|