diff --git a/app/api/core/dependencies/dependencies.py b/app/api/core/dependencies/dependencies.py new file mode 100644 index 0000000..5383c0b --- /dev/null +++ b/app/api/core/dependencies/dependencies.py @@ -0,0 +1,8 @@ +from sqlalchemy.orm import Session +from app.api.db.database import SessionLocal +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() diff --git a/app/api/core/middleware/activity_tracker.py b/app/api/core/middleware/activity_tracker.py new file mode 100644 index 0000000..d4996e2 --- /dev/null +++ b/app/api/core/middleware/activity_tracker.py @@ -0,0 +1,12 @@ +import time +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request +from starlette.responses import Response +from loguru import logger +class ActivityTrackerMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + start_time = time.time() + response = await call_next(request) + process_time = time.time() - start_time + logger.info(f'{request.method} {request.url} - Process Time: {process_time:.6f} seconds') + return response diff --git a/app/api/db/database.py b/app/api/db/database.py new file mode 100644 index 0000000..f327867 --- /dev/null +++ b/app/api/db/database.py @@ -0,0 +1,7 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +SQLALCHEMY_DATABASE_URL = 'sqlite:///./blog_app.db' +engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={'check_same_thread': False}) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) +Base = declarative_base() diff --git a/app/api/v1/models/comments.py b/app/api/v1/models/comments.py new file mode 100644 index 0000000..cb33396 --- /dev/null +++ b/app/api/v1/models/comments.py @@ -0,0 +1,7 @@ +from sqlalchemy import Column, ForeignKey, Integer, String, Text +from app.api.db.database import Base + +class Comments(Base): + __tablename__ = 'comments' + + id = Column(Integer, primary_key=True, index=True) diff --git a/app/api/v1/models/posts.py b/app/api/v1/models/posts.py new file mode 100644 index 0000000..79723fb --- /dev/null +++ b/app/api/v1/models/posts.py @@ -0,0 +1,7 @@ +from sqlalchemy import Column, ForeignKey, Integer, String, Text +from app.api.db.database import Base + +class Posts(Base): + __tablename__ = 'posts' + + id = Column(Integer, primary_key=True, index=True) diff --git a/app/api/v1/models/tags.py b/app/api/v1/models/tags.py new file mode 100644 index 0000000..813918e --- /dev/null +++ b/app/api/v1/models/tags.py @@ -0,0 +1,7 @@ +from sqlalchemy import Column, ForeignKey, Integer, String, Text +from app.api.db.database import Base + +class Tags(Base): + __tablename__ = 'tags' + + id = Column(Integer, primary_key=True, index=True) diff --git a/app/api/v1/models/user.py b/app/api/v1/models/user.py new file mode 100644 index 0000000..14f09c1 --- /dev/null +++ b/app/api/v1/models/user.py @@ -0,0 +1,7 @@ +from sqlalchemy import Column, ForeignKey, Integer, String, Text +from app.api.db.database import Base + +class User(Base): + __tablename__ = 'user' + + id = Column(Integer, primary_key=True, index=True) diff --git a/app/api/v1/routes/__init__.py b/app/api/v1/routes/__init__.py index e69de29..da060ab 100644 --- a/app/api/v1/routes/__init__.py +++ b/app/api/v1/routes/__init__.py @@ -0,0 +1,2 @@ +from fastapi import APIRouter +router = APIRouter() diff --git a/app/api/v1/routes/comments.py b/app/api/v1/routes/comments.py new file mode 100644 index 0000000..940e1eb --- /dev/null +++ b/app/api/v1/routes/comments.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from app.api.core.dependencies import get_db + +router = APIRouter() + +@router.get('/comments/') +def read_comments(db: Session = Depends(get_db)): + return {'message': 'Read comments'} diff --git a/app/api/v1/routes/posts.py b/app/api/v1/routes/posts.py new file mode 100644 index 0000000..717942a --- /dev/null +++ b/app/api/v1/routes/posts.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from app.api.core.dependencies import get_db + +router = APIRouter() + +@router.get('/posts/') +def read_posts(db: Session = Depends(get_db)): + return {'message': 'Read posts'} diff --git a/app/api/v1/routes/tags.py b/app/api/v1/routes/tags.py new file mode 100644 index 0000000..928683c --- /dev/null +++ b/app/api/v1/routes/tags.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from app.api.core.dependencies import get_db + +router = APIRouter() + +@router.get('/tags/') +def read_tags(db: Session = Depends(get_db)): + return {'message': 'Read tags'} diff --git a/app/api/v1/routes/user.py b/app/api/v1/routes/user.py new file mode 100644 index 0000000..818519d --- /dev/null +++ b/app/api/v1/routes/user.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from app.api.core.dependencies import get_db + +router = APIRouter() + +@router.get('/user/') +def read_user(db: Session = Depends(get_db)): + return {'message': 'Read user'} diff --git a/app/api/v1/schemas/comments.py b/app/api/v1/schemas/comments.py new file mode 100644 index 0000000..a04f3ef --- /dev/null +++ b/app/api/v1/schemas/comments.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + +class CommentsBase(BaseModel): + pass + +class Comments(BaseModel): + id: int + + class Config: + orm_mode = True diff --git a/app/api/v1/schemas/posts.py b/app/api/v1/schemas/posts.py new file mode 100644 index 0000000..7536ecf --- /dev/null +++ b/app/api/v1/schemas/posts.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + +class PostsBase(BaseModel): + pass + +class Posts(BaseModel): + id: int + + class Config: + orm_mode = True diff --git a/app/api/v1/schemas/tags.py b/app/api/v1/schemas/tags.py new file mode 100644 index 0000000..e212f4d --- /dev/null +++ b/app/api/v1/schemas/tags.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + +class TagsBase(BaseModel): + pass + +class Tags(BaseModel): + id: int + + class Config: + orm_mode = True diff --git a/app/api/v1/schemas/user.py b/app/api/v1/schemas/user.py new file mode 100644 index 0000000..819e527 --- /dev/null +++ b/app/api/v1/schemas/user.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + +class UserBase(BaseModel): + pass + +class User(BaseModel): + id: int + + class Config: + orm_mode = True diff --git a/main.py b/main.py index dca5c44..1024a94 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,10 @@ from fastapi import FastAPI - -app = FastAPI(title="Generated Backend") - -@app.get("/") -def read_root(): - return {"message": "Welcome to the generated backend"} \ No newline at end of file +from app.api.db.database import engine, Base +from app.api.v1.routes import router +from app.api.core.middleware.activity_tracker import ActivityTrackerMiddleware +app = FastAPI() +app.add_middleware(ActivityTrackerMiddleware) +app.include_router(router, prefix='/v1') +@app.on_event('startup') +def startup(): + Base.metadata.create_all(bind=engine) diff --git a/requirements.txt b/requirements.txt index a70e8ac..8927dae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1 @@ -fastapi -uvicorn -sqlalchemy -pydantic \ No newline at end of file +# No code generated