Compare commits

..

2 Commits

13 changed files with 65 additions and 27 deletions

View File

@ -1,5 +1,6 @@
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.db.database import SessionLocal from app.api.db.database import SessionLocal
def get_db(): def get_db():
db = SessionLocal() db = SessionLocal()
try: try:

View File

@ -1,12 +1,13 @@
import time from time import time
from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import Response from starlette.responses import Response
from loguru import logger from loguru import logger
class ActivityTrackerMiddleware(BaseHTTPMiddleware): class ActivityTrackerMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next): async def dispatch(self, request: Request, call_next):
start_time = time.time() start_time = time()
response = await call_next(request) response: Response = await call_next(request)
process_time = time.time() - start_time process_time = time() - start_time
logger.info(f'{request.method} {request.url} - Process Time: {process_time:.6f} seconds') logger.info(f"Processed {request.method} {request.url} in {process_time:.4f} seconds")
return response return response

View File

@ -1,7 +1,16 @@
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
class Comments(Base): class Comments(Base):
__tablename__ = 'comments' __tablename__ = 'comments'
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
post_id = Column(Integer, ForeignKey('posts.id'))
user_id = Column(Integer, ForeignKey('users.id'))
comment_text = Column(Text)
created_at = Column(Integer)
updated_at = Column(Integer)
post = relationship('Post', back_populates='comments')
user = relationship('User', back_populates='comments')

View File

@ -1,7 +1,13 @@
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
class Posts(Base): class Posts(Base):
__tablename__ = 'posts' __tablename__ = 'posts'
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
title = Column(String)
content = Column(Text)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship('User', back_populates='posts')

View File

@ -1,7 +1,12 @@
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
class Tags(Base): class Tags(Base):
__tablename__ = 'tags' __tablename__ = 'tags'
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False, unique=True)
description = Column(Text)
posts = relationship("Post", back_populates="tags", secondary="post_tags")

View File

@ -1,7 +1,14 @@
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
class User(Base): class User(Base):
__tablename__ = 'user' __tablename__ = 'user'
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Integer, default=1)
full_name = Column(String)
posts = relationship("Post", back_populates="author")

View File

@ -1,2 +1,3 @@
from fastapi import APIRouter from fastapi import APIRouter
router = APIRouter() router = APIRouter()

View File

@ -1,10 +1,11 @@
from pydantic import BaseModel from pydantic import BaseModel
class CommentsBase(BaseModel): class CommentsBase(BaseModel):
pass body: str
class Comments(BaseModel): class Comments(CommentsBase):
id: int id: int
post_id: int
class Config: class Config:
orm_mode = True orm_mode = True

View File

@ -1,10 +1,9 @@
from pydantic import BaseModel from pydantic import BaseModel
class PostsBase(BaseModel): class PostsBase(BaseModel):
pass title: str
content: str
class Posts(BaseModel):
id: int
class Posts(PostsBase):
class Config: class Config:
orm_mode = True orm_mode = True

View File

@ -1,10 +1,11 @@
from pydantic import BaseModel from pydantic import BaseModel
class TagsBase(BaseModel): class TagsBase(BaseModel):
pass name: str
class Tags(BaseModel): class Tags(TagsBase):
id: int id: int
name: str
class Config: class Config:
orm_mode = True orm_mode = True

View File

@ -1,10 +1,11 @@
from pydantic import BaseModel from pydantic import BaseModel
class UserBase(BaseModel): class UserBase(BaseModel):
pass email: str
class User(BaseModel): class User(UserBase):
id: int id: int
is_active: bool
class Config: class Config:
orm_mode = True orm_mode = True

View File

@ -2,9 +2,11 @@ from fastapi import FastAPI
from app.api.db.database import engine, Base from app.api.db.database import engine, Base
from app.api.v1.routes import router from app.api.v1.routes import router
from app.api.core.middleware.activity_tracker import ActivityTrackerMiddleware from app.api.core.middleware.activity_tracker import ActivityTrackerMiddleware
app = FastAPI() app = FastAPI()
app.add_middleware(ActivityTrackerMiddleware) app.add_middleware(ActivityTrackerMiddleware)
app.include_router(router, prefix='/v1') app.include_router(router, prefix="/v1")
@app.on_event('startup')
def startup(): @app.on_event("startup")
def startup_event():
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)

View File

@ -1 +1,5 @@
# No code generated fastapi
uvicorn
sqlalchemy
pydantic
loguru