chats.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from fastapi import Response
  2. from fastapi import Depends, FastAPI, HTTPException, status
  3. from datetime import datetime, timedelta
  4. from typing import List, Union, Optional
  5. from fastapi import APIRouter
  6. from pydantic import BaseModel
  7. from apps.web.models.users import Users
  8. from apps.web.models.chats import (
  9. ChatModel,
  10. ChatForm,
  11. ChatUpdateForm,
  12. ChatTitleIdResponse,
  13. Chats,
  14. )
  15. from utils.utils import (
  16. bearer_scheme,
  17. )
  18. from constants import ERROR_MESSAGES
  19. router = APIRouter()
  20. ############################
  21. # GetChats
  22. ############################
  23. @router.get("/", response_model=List[ChatTitleIdResponse])
  24. async def get_user_chats(skip: int = 0, limit: int = 50, cred=Depends(bearer_scheme)):
  25. token = cred.credentials
  26. user = Users.get_user_by_token(token)
  27. if user:
  28. return Chats.get_chat_lists_by_user_id(user.id, skip, limit)
  29. else:
  30. raise HTTPException(
  31. status_code=status.HTTP_401_UNAUTHORIZED,
  32. detail=ERROR_MESSAGES.INVALID_TOKEN,
  33. )
  34. ############################
  35. # CreateNewChat
  36. ############################
  37. @router.post("/new", response_model=Optional[ChatModel])
  38. async def create_new_chat(form_data: ChatForm, cred=Depends(bearer_scheme)):
  39. token = cred.credentials
  40. user = Users.get_user_by_token(token)
  41. if user:
  42. return Chats.insert_new_chat(user.id, form_data)
  43. else:
  44. raise HTTPException(
  45. status_code=status.HTTP_401_UNAUTHORIZED,
  46. detail=ERROR_MESSAGES.INVALID_TOKEN,
  47. )
  48. ############################
  49. # GetChatById
  50. ############################
  51. @router.get("/{id}", response_model=Optional[ChatModel])
  52. async def get_chat_by_id(id: str, cred=Depends(bearer_scheme)):
  53. token = cred.credentials
  54. user = Users.get_user_by_token(token)
  55. if user:
  56. return Chats.get_chat_by_id_and_user_id(id, user.id)
  57. else:
  58. raise HTTPException(
  59. status_code=status.HTTP_401_UNAUTHORIZED,
  60. detail=ERROR_MESSAGES.INVALID_TOKEN,
  61. )
  62. ############################
  63. # UpdateChatById
  64. ############################
  65. @router.post("/{id}", response_model=Optional[ChatModel])
  66. async def update_chat_by_id(
  67. id: str, form_data: ChatUpdateForm, cred=Depends(bearer_scheme)
  68. ):
  69. token = cred.credentials
  70. user = Users.get_user_by_token(token)
  71. if user:
  72. chat = Chats.get_chat_by_id_and_user_id(id, user.id)
  73. if chat:
  74. return Chats.update_chat_by_id(id, form_data.chat)
  75. else:
  76. raise HTTPException(
  77. status_code=status.HTTP_401_UNAUTHORIZED,
  78. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  79. )
  80. else:
  81. raise HTTPException(
  82. status_code=status.HTTP_401_UNAUTHORIZED,
  83. detail=ERROR_MESSAGES.INVALID_TOKEN,
  84. )