Update generated backend for blog_app with entities: posts, comments, tags, user

This commit is contained in:
Backend IM Bot 2025-03-21 12:27:43 +01:00
parent c61abb1d18
commit 78cdbac2cf
10 changed files with 44 additions and 41 deletions

View File

@ -1,4 +1,4 @@
from time import 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
@ -6,8 +6,8 @@ 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() start_time = time.time()
response = await call_next(request) response: Response = await call_next(request)
process_time = time() - start_time process_time = time.time() - start_time
logger.info(f"Request processed in {process_time:.4f} seconds") logger.info(f"Request processing time: {process_time:.5f} seconds")
return response return response

View File

@ -10,7 +10,7 @@ class Comments(Base):
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
post_id = Column(Integer, ForeignKey('posts.id')) post_id = Column(Integer, ForeignKey('posts.id'))
user_id = Column(Integer, ForeignKey('users.id')) user_id = Column(Integer, ForeignKey('users.id'))
content = Column(Text) comment_text = Column(Text)
created_at = Column(String) created_at = Column(String)
updated_at = Column(String, nullable=True) updated_at = Column(String, nullable=True)
@ -18,4 +18,4 @@ class Comments(Base):
user = relationship('User', back_populates='comments') user = relationship('User', back_populates='comments')
def __repr__(self): def __repr__(self):
return f'Comment(id={self.id}, post_id={self.post_id}, user_id={self.user_id}, content="{self.content[:20]}...")' return f'Comment(id={self.id}, post_id={self.post_id}, user_id={self.user_id}, comment_text="{self.comment_text[:20]}...", created_at="{self.created_at}", updated_at="{self.updated_at}")'

View File

@ -1,5 +1,3 @@
# app/api/v1/models/posts.py
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
@ -8,9 +6,9 @@ class Posts(Base):
__tablename__ = 'posts' __tablename__ = 'posts'
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey('users.id'))
title = Column(String) title = Column(String)
content = Column(Text) content = Column(Text)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship('User', back_populates='posts') user = relationship('User', back_populates='posts')

View File

@ -1,6 +1,6 @@
# app/api/v1/models/tags.py # app/api/v1/models/tags.py
from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
@ -8,10 +8,10 @@ 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) name = Column(String, nullable=False, unique=True)
description = Column(Text) description = Column(Text, nullable=True)
posts = relationship('Post', back_populates='tags', secondary='post_tags') posts = relationship('Post', back_populates='tags', secondary='post_tags')
def __repr__(self): def __repr__(self):
return f'Tag(id={self.id}, name={self.name})' return f'Tag(id={self.id}, name="{self.name}")'

View File

@ -1,20 +1,25 @@
# app/api/v1/models/user.py
from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy import Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from app.api.db.database import Base from app.api.db.database import Base
# Optional imports
# from typing import Optional
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)
username = Column(String, unique=True, nullable=False) # Add relevant columns for user entity
email = Column(String, unique=True, nullable=False) # For example:
password = Column(String, nullable=False) # name = Column(String)
bio = Column(Text, nullable=True) # email = Column(String, unique=True, index=True)
# hashed_password = Column(String)
# bio = Column(Text, nullable=True)
# Define relationships here if needed # Define relationships
# For example:
# posts = relationship("Post", back_populates="author") # posts = relationship("Post", back_populates="author")
def __repr__(self): # Optional __repr__ method
return f"User(id={self.id}, username='{self.username}', email='{self.email}')" # def __repr__(self):
# return f"User(id={self.id}, name={self.name}, email={self.email})"

View File

@ -1,13 +1,14 @@
app/api/v1/schemas/comments.py:
from pydantic import BaseModel from pydantic import BaseModel
class CommentsBase(BaseModel): class CommentsBase(BaseModel):
text: str text: str
post_id: int
user_id: int
class Comments(CommentsBase): class Comments(CommentsBase):
id: int id: int
post_id: int post: dict = None
user: dict = None
class Config: class Config:
orm_mode = True orm_mode = True

View File

@ -1,12 +1,15 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional
class PostsBase(BaseModel): class PostsBase(BaseModel):
title: str title: str
content: str content: str
published: bool = True
rating: Optional[int] = None
class Posts(PostsBase): class Posts(PostsBase):
id: int id: int
owner_id: int user_id: int
class Config: class Config:
orm_mode = True orm_mode = True

View File

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

View File

@ -1,10 +1,9 @@
from pydantic import BaseModel, EmailStr from pydantic import BaseModel
class UserBase(BaseModel): class UserBase(BaseModel):
email: EmailStr pass
username: str
class User(UserBase): class User(BaseModel):
id: int id: int
class Config: class Config:

View File

@ -2,11 +2,9 @@ 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')
@app.on_event("startup") def startup():
def startup_event():
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)