main.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from fastapi import FastAPI, Depends, HTTPException
  2. from sqlalchemy.orm import Session
  3. import logging
  4. import models, schemas, crud
  5. from database import SessionLocal, engine
  6. logging.basicConfig(level=logging.INFO)
  7. logger = logging.getLogger(__name__)
  8. models.Base.metadata.create_all(bind=engine)
  9. app = FastAPI()
  10. def get_db():
  11. db = SessionLocal()
  12. try:
  13. yield db
  14. finally:
  15. db.close()
  16. @app.post("/users/", response_model=schemas.UserResponse)
  17. def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
  18. """Создает нового пользователя на основе предоставленных данных."""
  19. try:
  20. result = crud.create_user(db, user)
  21. logger.info(f"User created: {result.id}")
  22. return result
  23. except ValueError as e:
  24. logger.warning(f"Failed to create user: {e}")
  25. raise HTTPException(status_code=400, detail=str(e))
  26. except ConnectionError as e:
  27. logger.error(f"Database error: {e}")
  28. raise HTTPException(status_code=500, detail=str(e))
  29. @app.get("/users/")
  30. def read_users(db: Session = Depends(get_db)):
  31. """Возвращает список всех пользователей."""
  32. try:
  33. return crud.get_users(db)
  34. except ConnectionError as e:
  35. raise HTTPException(status_code=500, detail=str(e))
  36. @app.get("/users/{user_id}")
  37. def read_user(user_id: int, db: Session = Depends(get_db)):
  38. """Возвращает информацию о пользователе по его ID."""
  39. try:
  40. return crud.get_user(db, user_id)
  41. except LookupError as e:
  42. raise HTTPException(status_code=404, detail=str(e))
  43. except ConnectionError as e:
  44. raise HTTPException(status_code=500, detail=str(e))
  45. @app.delete("/users/{user_id}")
  46. def delete_user(user_id: int, db: Session = Depends(get_db)):
  47. """Удаляет пользователя по его ID."""
  48. try:
  49. return crud.delete_user(db, user_id)
  50. except LookupError as e:
  51. raise HTTPException(status_code=404, detail=str(e))
  52. except ConnectionError as e:
  53. raise HTTPException(status_code=500, detail=str(e))
  54. @app.put("/users/{user_id}", response_model=schemas.UserResponse)
  55. def update_user(user_id: int, user: schemas.UserCreate, db: Session = Depends(get_db)):
  56. """Обновляет данные пользователя по его ID."""
  57. try:
  58. return crud.update_user(db, user_id, user)
  59. except LookupError as e:
  60. raise HTTPException(status_code=404, detail=str(e))
  61. except ConnectionError as e:
  62. raise HTTPException(status_code=500, detail=str(e))
  63. @app.post("/posts/")
  64. def create_post(post: schemas.PostCreate, db: Session = Depends(get_db)):
  65. """Создает новый пост на основе предоставленных данных."""
  66. try:
  67. return crud.create_post(db, post)
  68. except LookupError as e:
  69. raise HTTPException(status_code=404, detail=str(e))
  70. except ValueError as e:
  71. raise HTTPException(status_code=400, detail=str(e))
  72. except ConnectionError as e:
  73. raise HTTPException(status_code=500, detail=str(e))
  74. @app.get("/posts/")
  75. def read_posts(db: Session = Depends(get_db)):
  76. """Возвращает список всех постов."""
  77. try:
  78. return crud.get_posts(db)
  79. except ConnectionError as e:
  80. raise HTTPException(status_code=500, detail=str(e))
  81. @app.get("/posts/{post_id}")
  82. def read_post(post_id: int, db: Session = Depends(get_db)):
  83. """Возвращает информацию о посте по его ID."""
  84. try:
  85. return crud.get_post(db, post_id)
  86. except LookupError as e:
  87. raise HTTPException(status_code=404, detail=str(e))
  88. except ConnectionError as e:
  89. raise HTTPException(status_code=500, detail=str(e))
  90. @app.put("/posts/{post_id}", response_model=schemas.PostResponse)
  91. def update_post(post_id: int, post: schemas.PostCreate, db: Session = Depends(get_db)):
  92. """Обновляет данные поста по его ID."""
  93. try:
  94. return crud.update_post(db, post_id, post)
  95. except LookupError as e:
  96. raise HTTPException(status_code=404, detail=str(e))
  97. except ConnectionError as e:
  98. raise HTTPException(status_code=500, detail=str(e))