diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..2637a19 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY app ./app + +EXPOSE 8000 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/config.py b/backend/app/config.py new file mode 100644 index 0000000..aa2aa32 --- /dev/null +++ b/backend/app/config.py @@ -0,0 +1,16 @@ +import os + + +class Settings: + def __init__(self): + self.minio_endpoint = os.environ.get("MINIO_ENDPOINT", "localhost:9000") + self.minio_access_key = os.environ.get("MINIO_ACCESS_KEY", "minioadmin") + self.minio_secret_key = os.environ.get("MINIO_SECRET_KEY", "minioadmin") + self.minio_bucket = os.environ.get("MINIO_BUCKET", "dochub") + self.meilisearch_host = os.environ.get("MEILISEARCH_HOST", "http://localhost:7700") + self.meilisearch_api_key = os.environ.get("MEILISEARCH_API_KEY", "") + self.meilisearch_index = os.environ.get("MEILISEARCH_INDEX", "documents") + self.cors_origins = os.environ.get("CORS_ORIGINS", "*").split(",") + + +settings = Settings() diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..cf08318 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,19 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + +from app.config import settings + +app = FastAPI(title="DocHub API") + +app.add_middleware( + CORSMiddleware, + allow_origins=settings.cors_origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +@app.get("/health") +def health(): + return {"status": "ok"} diff --git a/backend/pytest.ini b/backend/pytest.ini new file mode 100644 index 0000000..a635c5c --- /dev/null +++ b/backend/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..cdceac5 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,7 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.6 +minio==7.2.9 +meilisearch==0.31.5 +pytest==8.3.3 +httpx==0.27.2 +python-multipart==0.0.9 diff --git a/backend/tests/test_main.py b/backend/tests/test_main.py new file mode 100644 index 0000000..7cede08 --- /dev/null +++ b/backend/tests/test_main.py @@ -0,0 +1,11 @@ +from fastapi.testclient import TestClient + +from app.main import app + +client = TestClient(app) + + +def test_health_returns_ok(): + response = client.get("/health") + assert response.status_code == 200 + assert response.json() == {"status": "ok"}