[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "the-other-dude-backend"
version = "9.0.1"
description = "MikroTik Fleet Management Portal - Backend API"
requires-python = ">=3.12"
dependencies = [
    "fastapi[standard]>=0.115.0",
    "sqlalchemy[asyncio]>=2.0.0",
    "asyncpg>=0.30.0",
    "alembic>=1.14.0",
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    "python-jose[cryptography]>=3.3.0",
    "bcrypt>=4.0.0,<5.0.0",
    "redis>=5.0.0",
    "nats-py>=2.7.0",
    "cryptography>=42.0.0",
    "python-multipart>=0.0.9",
    "httpx>=0.27.0",
    "asyncssh>=2.20.0",
    "pygit2>=1.14.0",
    "apscheduler>=3.10.0,<4.0",
    "aiosmtplib>=3.0.0",
    "structlog>=25.1.0",
    "slowapi>=0.1.9",
    "jinja2>=3.1.6",
    "prometheus-fastapi-instrumentator>=7.0.0",
    "gunicorn>=23.0.0",
    "sse-starlette>=2.0.0",
    "weasyprint>=62.0",
    "srptools==1.0.1",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0.0",
    "pytest-asyncio>=0.25,<1.0",
    "pytest-mock>=3.14",
    "httpx>=0.27.0",
    "pytest-cov>=5.0.0",
]

[tool.hatch.build.targets.wheel]
packages = ["app"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
testpaths = ["tests"]
markers = [
    "integration: marks tests as integration tests requiring PostgreSQL (deselect with '-m \"not integration\"')",
]

[tool.ruff]
line-length = 100
target-version = "py312"

[tool.ruff.lint]
select = ["E", "F", "W"]
ignore = [
    "F821",  # SQLAlchemy uses forward-reference strings in relationships
    "E501",  # Line too long — pre-existing in migrations and SQL strings
]

[tool.ruff.lint.per-file-ignores]
"alembic/versions/*.py" = ["E402"]  # Alembic puts revision vars before imports
