| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- from fastapi import FastAPI, Depends, HTTPException
- from sqlalchemy.orm import Session
- import logging
- import models, schemas, crud
- from database import SessionLocal, engine
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger(__name__)
- models.Base.metadata.create_all(bind=engine)
- app = FastAPI()
- def get_db():
- db = SessionLocal()
- try:
- yield db
- finally:
- db.close()
- @app.post("/users/", response_model=schemas.UserResponse)
- def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
- """Создает нового пользователя на основе предоставленных данных."""
- try:
- result = crud.create_user(db, user)
- logger.info(f"User created: {result.id}")
- return result
- except ValueError as e:
- logger.warning(f"Failed to create user: {e}")
- raise HTTPException(status_code=400, detail=str(e))
- except ConnectionError as e:
- logger.error(f"Database error: {e}")
- raise HTTPException(status_code=500, detail=str(e))
- @app.get("/users/")
- def read_users(db: Session = Depends(get_db)):
- """Возвращает список всех пользователей."""
- try:
- return crud.get_users(db)
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.get("/users/{user_id}")
- def read_user(user_id: int, db: Session = Depends(get_db)):
- """Возвращает информацию о пользователе по его ID."""
- try:
- return crud.get_user(db, user_id)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.delete("/users/{user_id}")
- def delete_user(user_id: int, db: Session = Depends(get_db)):
- """Удаляет пользователя по его ID."""
- try:
- return crud.delete_user(db, user_id)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.put("/users/{user_id}", response_model=schemas.UserResponse)
- def update_user(user_id: int, user: schemas.UserCreate, db: Session = Depends(get_db)):
- """Обновляет данные пользователя по его ID."""
- try:
- return crud.update_user(db, user_id, user)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.post("/posts/")
- def create_post(post: schemas.PostCreate, db: Session = Depends(get_db)):
- """Создает новый пост на основе предоставленных данных."""
- try:
- return crud.create_post(db, post)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ValueError as e:
- raise HTTPException(status_code=400, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.get("/posts/")
- def read_posts(db: Session = Depends(get_db)):
- """Возвращает список всех постов."""
- try:
- return crud.get_posts(db)
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.get("/posts/{post_id}")
- def read_post(post_id: int, db: Session = Depends(get_db)):
- """Возвращает информацию о посте по его ID."""
- try:
- return crud.get_post(db, post_id)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
- @app.put("/posts/{post_id}", response_model=schemas.PostResponse)
- def update_post(post_id: int, post: schemas.PostCreate, db: Session = Depends(get_db)):
- """Обновляет данные поста по его ID."""
- try:
- return crud.update_post(db, post_id, post)
- except LookupError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except ConnectionError as e:
- raise HTTPException(status_code=500, detail=str(e))
|