Add template fastapi app, test, README.md, this can be used for future extension

This commit is contained in:
dongli 2025-05-11 19:15:41 -07:00
parent 50087c95be
commit c4c34e6cd7
41 changed files with 47 additions and 61 deletions

View File

@ -2,12 +2,19 @@ This is a template backend service based on fastapi + mongodb app
To start development in local, go to the root directory of the project YOUR_WORKSPACE_PATH/devops/
```bash
cd scripts/mongodb
docker compose -f scripts/mongodb/docker-compose.yml up -d
docker compose -f app/scripts/mongodb/docker-compose.yml up -d
```
Then run the app
```bash
uvicorn main:app --reload
uvicorn app.main:app --reload
```
In case a new dependency is added, run the following command to update the requirements.txt file
```bash
# optional: if you have not installed pipreqs
pip3 install pipreqs
# generate requirements.txt
pipreqs . --force
```

View File

@ -2,14 +2,14 @@ import logging
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
from providers import common
from providers.logger import register_logger
from providers import router
from providers import database
from providers import metrics
from providers import probes
from providers import exception_handler
from common.config.app_settings import app_settings
from app.providers import common
from app.providers.logger import register_logger
from app.providers import router
from app.providers import database
from app.providers import metrics
from app.providers import probes
from app.providers import exception_handler
from app.common.config.app_settings import app_settings
def create_app() -> FastAPI:
logging.info("App initializing")

View File

@ -0,0 +1,3 @@
from app.common.daos.hello_world.hello_world_dao import HelloWorldDao
hello_world_dao = HelloWorldDao()

View File

@ -1,4 +1,4 @@
from common.models.hello_world.hello_world import HelloWorld
from app.common.models.hello_world.hello_world import HelloWorld
class HelloWorldDao:
def __init__(self):

View File

@ -1,5 +1,5 @@
from .base_logger import LoggerBase
from common.config.app_settings import app_settings
from app.common.config.app_settings import app_settings
class ApplicationLogger(LoggerBase):
def __init__(self, application_activities: dict[str, any] = {}) -> None:

View File

@ -1,5 +1,5 @@
from loguru import logger as guru_logger
from common.config.log_settings import log_settings
from app.common.config.log_settings import log_settings
from typing import Dict, Any, Optional
import socket
import json
@ -9,7 +9,7 @@ import sys
import inspect
import logging
from common.log.json_sink import JsonSink
from app.common.log.json_sink import JsonSink
class LoggerBase:
binded_loggers = {}

View File

@ -0,0 +1,4 @@
from app.common.models.hello_world.hello_world import HelloWorld
# list of beanie document models
db_models = [HelloWorld]

View File

View File

View File

@ -1,6 +1,6 @@
from fastapi.responses import RedirectResponse
from common.config.site_settings import site_settings
from bootstrap.application import create_app
from app.common.config.site_settings import site_settings
from app.bootstrap.application import create_app
app = create_app()

View File

View File

@ -1,5 +1,5 @@
from fastapi.middleware.cors import CORSMiddleware
from common.config.site_settings import site_settings
from app.common.config.site_settings import site_settings
def register(app):

View File

@ -1,9 +1,9 @@
import asyncio
from common.config.app_settings import app_settings
from app.common.config.app_settings import app_settings
from beanie import init_beanie
from motor.motor_asyncio import AsyncIOMotorClient
from common.models import db_models
from common.probes import ProbeResult
from app.common.models import db_models
from app.common.probes import ProbeResult
client = AsyncIOMotorClient(
app_settings.APP_MONGODB_URI,

View File

@ -1,5 +1,4 @@
from loguru import logger as guru_logger
from common.log.base_logger import LoggerBase
from app.common.log.base_logger import LoggerBase
def register_logger():

View File

@ -1,6 +1,6 @@
import logging
from prometheus_fastapi_instrumentator import Instrumentator
from common.config.app_settings import app_settings
from app.common.config.app_settings import app_settings
def register(app):
instrumentator = (

View File

@ -1,5 +1,5 @@
from common.probes import ProbeManager, ProbeType
from common.probes.adapters import FastAPIAdapter
from app.common.probes import ProbeManager, ProbeType
from app.common.probes.adapters import FastAPIAdapter
from .database import check_database_initialized
def register(app):

View File

@ -1,4 +1,4 @@
from routes import api_router
from app.routes import api_router
from starlette import routing

View File

@ -1,5 +1,5 @@
from fastapi import APIRouter
from routes.hello_world import router as hello_world_router
from app.routes.hello_world import router as hello_world_router
api_router = APIRouter()

View File

@ -1,7 +1,7 @@
from fastapi import APIRouter
from loguru import logger
from common.daos.hello_world import hello_world_dao
from app.common.daos.hello_world import hello_world_dao
router = APIRouter()

View File

@ -1,3 +0,0 @@
from common.daos.hello_world.hello_world_dao import HelloWorldDao
hello_world_dao = HelloWorldDao()

View File

@ -1,4 +0,0 @@
from common.models.hello_world.hello_world import HelloWorld
# list of beanie document models
db_models = [HelloWorld]

View File

@ -1,30 +1,10 @@
annotated-types==0.7.0
anyio==4.9.0
beanie==1.29.0
click==8.2.0
dnspython==2.7.0
exceptiongroup==1.3.0
fastapi==0.115.12
h11==0.16.0
httptools==0.6.4
idna==3.10
lazy-model==0.2.0
loguru==0.7.3
motor==3.7.0
prometheus-fastapi-instrumentator==7.1.0
prometheus_client==0.21.1
pydantic==2.11.4
pydantic-settings==2.9.1
pydantic_core==2.33.2
pymongo==4.12.1
python-dotenv==1.1.0
PyYAML==6.0.2
sniffio==1.3.1
prometheus_fastapi_instrumentator==7.1.0
pydantic_settings==2.9.1
pytest==7.1.2
starlette==0.46.2
toml==0.10.2
typing-inspection==0.4.0
typing_extensions==4.13.2
uvicorn==0.34.2
uvloop==0.21.0
watchfiles==1.0.5
websockets==15.0.1
httpx==0.24.0

View File