diff --git a/backend/app/api/v1/__pycache__/__init__.cpython-313.pyc b/backend/app/api/v1/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 00ba8a6..0000000 Binary files a/backend/app/api/v1/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/backend/app/api/v1/__pycache__/posts.cpython-313.pyc b/backend/app/api/v1/__pycache__/posts.cpython-313.pyc deleted file mode 100644 index c534030..0000000 Binary files a/backend/app/api/v1/__pycache__/posts.cpython-313.pyc and /dev/null differ diff --git a/backend/app/api/v1/posts.py b/backend/app/api/v1/posts.py index cdc6b30..f042797 100644 --- a/backend/app/api/v1/posts.py +++ b/backend/app/api/v1/posts.py @@ -1,4 +1,10 @@ -from fastapi import APIRouter +from fastapi import APIRouter, Depends, HTTPException, Body +from sqlalchemy.ext.asyncio import AsyncSession +from pydantic import BaseModel +from app.schemas.posts import PostCreate, PostRead, PostRead +from app.db_engine import get_async_session +from app.models.posts import Post + router = APIRouter( prefix="/posts", @@ -6,6 +12,7 @@ router = APIRouter( responses={404: {"description": "Not found"}}, ) + @router.get("/") async def get_posts(): pass @@ -17,8 +24,18 @@ async def get_post(id: int): @router.post("/") -async def create_post(): - pass +async def create_post( + post: PostCreate = Body(...), db: AsyncSession = Depends(get_async_session) +): + new_post = Post(title=post.title, content=post.content, images=post.images) + try: + db.add(new_post) + await db.commit() + await db.refresh(new_post) + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + return new_post @router.put("/{id}") @@ -29,5 +46,3 @@ async def update_post(id: int): @router.delete("/{id}") async def delete_post(id: int): pass - - diff --git a/backend/app/schemas/posts.py b/backend/app/schemas/posts.py index 154db42..ed80e9c 100644 --- a/backend/app/schemas/posts.py +++ b/backend/app/schemas/posts.py @@ -5,10 +5,10 @@ from typing import Optional class PostCreate(BaseModel): title: str = Field(min_length=3, max_length=150) content: str = Field(min_length=10) - images: Optional[str] = Field() + images: Optional[str] = Field(default=None) class Config: - orm_mode = True + from_attributes = True class PostRead(BaseModel): @@ -18,13 +18,13 @@ class PostRead(BaseModel): images: str = Field() class Config: - orm_mode = True + from_attributes = True class PostUpdate(BaseModel): title: str = Field(min_length=3, max_length=150) content: str = Field(min_length=10) - images: Optional[str] = Field() + images: Optional[str] = Field(default=None) class Config: - orm_mode = True + from_attributes = True