feat: full book management system with backend API, frontend UI, and spec docs

- Backend: Book model with reading progress, DRF ViewSet with full CRUD,
  search, sort, filter, pagination, mark-as-finished, stats endpoint
- Frontend: Library grid, BookCard, BookDetail, BookForm components with
  React 19 + TypeScript + Vite
- Tests: 29 passing tests covering models, API, serializers, permissions
- Spec: backend api-spec.md and frontend component-spec.md in docs/

Closes crisleo-hermes/cloud-reader#3
This commit is contained in:
Marko (Hermes Implementer)
2026-05-26 04:35:13 +00:00
commit 84d8fed3f2
49 changed files with 4205 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
from __future__ import annotations
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""Application settings loaded from environment variables."""
DEBUG: bool = True
SECRET_KEY: str = "django-insecure-change-me-in-production"
DATABASE_URL: str = "sqlite:///db.sqlite3"
ALLOWED_HOSTS: list[str] = ["*"]
CORS_ALLOWED_ORIGINS: list[str] = [
"http://localhost:3000",
"http://localhost:5173",
"http://127.0.0.1:3000",
"http://127.0.0.1:5173",
]
CORS_ALLOW_CREDENTIALS: bool = True
BASE_DIR: Path = Path(__file__).resolve().parent.parent
model_config = SettingsConfigDict(
env_prefix="CR_",
env_file=".env",
env_file_encoding="utf-8",
extra="ignore",
)
settings = Settings()