diff --git a/notifier/Dockerfile.notifier b/notifier/Dockerfile.notifier new file mode 100644 index 0000000000..e69de29bb2 diff --git a/notifier/README.md b/notifier/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/notifier/engine/api/__init__.py b/notifier/engine/api/__init__.py new file mode 100644 index 0000000000..962edebebe --- /dev/null +++ b/notifier/engine/api/__init__.py @@ -0,0 +1 @@ +from .home import router as home_router diff --git a/notifier/engine/api/home.py b/notifier/engine/api/home.py new file mode 100644 index 0000000000..7b83558ec7 --- /dev/null +++ b/notifier/engine/api/home.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter + + +router = APIRouter() + + +@router.get("/") +def home(): + return {"message": "Hello, World!"} diff --git a/notifier/engine/app.py b/notifier/engine/app.py new file mode 100644 index 0000000000..7bfed1dc19 --- /dev/null +++ b/notifier/engine/app.py @@ -0,0 +1,11 @@ +from fastapi import FastAPI +from .api import home_router +from .settings import settings + +app = FastAPI( + title=settings.PROJECT_NAME, + description=settings.PROJECT_DESCRIPTION, + version=settings.PROJECT_VERSION, +) + +app.include_router(home_router, tags=["home"]) diff --git a/notifier/engine/celery.py b/notifier/engine/celery.py new file mode 100644 index 0000000000..4df1033ba8 --- /dev/null +++ b/notifier/engine/celery.py @@ -0,0 +1,4 @@ +from celery import Celery +from .settings import settings + +celery = Celery("tasks", broker=settings.CELERY_BROKER_URL) diff --git a/notifier/engine/settings/__init__.py b/notifier/engine/settings/__init__.py new file mode 100644 index 0000000000..4aebff6267 --- /dev/null +++ b/notifier/engine/settings/__init__.py @@ -0,0 +1,3 @@ +from common import Settings + +settings = Settings() diff --git a/notifier/engine/settings/celery.py b/notifier/engine/settings/celery.py new file mode 100644 index 0000000000..39cfed7c66 --- /dev/null +++ b/notifier/engine/settings/celery.py @@ -0,0 +1,10 @@ +import os + + +class CelerySettings: + BROKER_URL = os.environ.get("CELERY_BROKER_URL", "redis://localhost:6379/0") + CELERY_ACCEPT_CONTENT = ["json"] + CELERY_TASK_SERIALIZER = "json" + CELERY_RESULT_SERIALIZER = "json" + CELERY_TIMEZONE = "UTC" + CELERY_ENABLE_UTC = True diff --git a/notifier/engine/settings/common.py b/notifier/engine/settings/common.py new file mode 100644 index 0000000000..2b0b387d46 --- /dev/null +++ b/notifier/engine/settings/common.py @@ -0,0 +1,16 @@ +import os + +# third-party imports +from pydantic_settings import BaseSettings + +# local imports +from .celery import CelerySettings +from .postgres import PostgresSettings + + +class Settings(BaseSettings, CelerySettings, PostgresSettings): + PROJECT_NAME: str = "Notification Engine" + PROJECT_DESCRIPTION: str = "A simple notification service" + PROJECT_VERSION: str = "0.1.0" + SECRET_KEY: str = os.environ.get("SECRET_KEY", "123456789") + DEBUG: bool = os.environ.get("DEBUG", False) diff --git a/notifier/engine/settings/postgres.py b/notifier/engine/settings/postgres.py new file mode 100644 index 0000000000..648f973fe0 --- /dev/null +++ b/notifier/engine/settings/postgres.py @@ -0,0 +1,9 @@ +import os + + +class PostgresSettings: + PG_HOST: str = os.environ.get("POSTGRES_HOST", "localhost") + PG_PORT: int = os.environ.get("POSTGRES_PORT", 5432) + PG_USER: str = os.environ.get("POSTGRES_USER", "postgres") + PG_PASSWORD: str = os.environ.get("POSTGRES_PASSWORD", "postgres") + PG_NAME: str = os.environ.get("POSTGRES_DB", "notification") diff --git a/notifier/engine/tasks/__init__.py b/notifier/engine/tasks/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/notifier/main.py b/notifier/main.py new file mode 100644 index 0000000000..6fb9c2876f --- /dev/null +++ b/notifier/main.py @@ -0,0 +1,6 @@ +from .engine.app import app + +if __name__ == "__main__": + import uvicorn + + uvicorn.run(app, host="0.0.0.0", port=8080) diff --git a/notifier/requirements.txt b/notifier/requirements.txt new file mode 100644 index 0000000000..5a01d3df13 --- /dev/null +++ b/notifier/requirements.txt @@ -0,0 +1,2 @@ +fastapi==0.111.1 +pydantic==2.8.2 \ No newline at end of file