Files
main_backend/AGENTS.md
T
Daniil cca1668fee
dev / deploy (push) Failing after 2m50s
compute / deploy (push) Has been cancelled
chore: agentic upgrade
2026-05-17 02:11:48 +03:00

2.9 KiB

Repository Guidelines

Project Structure & Module Organization

This FastAPI backend lives in cpv3/. The app entry point is cpv3/main.py; versioned routes are collected in cpv3/api/v1/router.py. Feature code lives in cpv3/modules/<feature>/ and should stay flat: models.py, schemas.py, repository.py, service.py, and router.py. Shared infrastructure is in cpv3/infrastructure/, database setup in cpv3/db/, migrations in alembic/, docs in docs/, and tests in tests/unit/ and tests/integration/.

Build, Test, and Development Commands

  • uv sync installs locked dependencies.
  • uv run uvicorn cpv3.main:app --reload runs the API on localhost:8000.
  • docker compose -f docker-compose.local.yml up --build starts Postgres, Redis, MinIO, the API, and the Dramatiq worker.
  • uv run dramatiq cpv3.modules.tasks.service starts the worker without Docker.
  • uv run alembic upgrade head applies database migrations.
  • uv run alembic revision --autogenerate -m "add table" creates a migration.

Coding Style & Naming Conventions

Use Python 3.11+ with absolute imports such as from cpv3.modules.media.schemas import MediaRead. Keep Ruff formatting with a 100-character line length: uv run ruff format cpv3 tests and uv run ruff check cpv3 tests. Put HTTP concerns in router.py, DTOs in schemas.py, business orchestration in service.py, and SQLAlchemy queries in repository.py. Pydantic schemas should inherit from cpv3.common.schemas.Schema. Define reusable error strings as module-level ERROR_... constants.

Testing Guidelines

Pytest is configured in pyproject.toml with pytest-asyncio auto mode. Name test files test_*.py, classes Test*, and functions test_*. Run all tests with uv run pytest; run a slice with uv run pytest tests/unit/test_task_service.py. Prefer unit tests for service/repository logic and integration tests for endpoint contracts. Shared async clients, users, storage mocks, and SQLite fixtures live in tests/conftest.py.

Commit & Pull Request Guidelines

Recent history uses short imperative subjects, often with Conventional Commit prefixes: fix: add cors endpoints, feat: add swagger auth, chore: add pipeline. Keep commits focused and mention migrations or config changes in the body. Pull requests should include a summary, linked issue or task, test results, and notes for API, migration, Docker, or environment-variable changes.

Security & Configuration Tips

Runtime settings come from .env through cpv3/infrastructure/settings.py. Do not commit real secrets, service keys, or certificates. Local defaults expose Postgres on 5332, Redis on 6379, MinIO on 9000/9001, and the API on 8000.

Agent-Specific Instructions

Use Context7 for current library, SDK, CLI, framework, or cloud-service documentation. Treat committed project files as source of truth when available, and do not rely on .claude/ directory contents.