documents.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from fastapi import Depends, FastAPI, HTTPException, status
  2. from datetime import datetime, timedelta
  3. from typing import List, Union, Optional
  4. from fastapi import APIRouter
  5. from pydantic import BaseModel
  6. import json
  7. from apps.web.models.documents import (
  8. Documents,
  9. DocumentForm,
  10. DocumentUpdateForm,
  11. DocumentModel,
  12. )
  13. from utils.utils import get_current_user
  14. from constants import ERROR_MESSAGES
  15. router = APIRouter()
  16. ############################
  17. # GetDocuments
  18. ############################
  19. @router.get("/", response_model=List[DocumentModel])
  20. async def get_documents(user=Depends(get_current_user)):
  21. return Documents.get_docs()
  22. ############################
  23. # CreateNewDoc
  24. ############################
  25. @router.post("/create", response_model=Optional[DocumentModel])
  26. async def create_new_doc(form_data: DocumentForm, user=Depends(get_current_user)):
  27. if user.role != "admin":
  28. raise HTTPException(
  29. status_code=status.HTTP_401_UNAUTHORIZED,
  30. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  31. )
  32. doc = Documents.get_doc_by_name(form_data.name)
  33. if doc == None:
  34. doc = Documents.insert_new_doc(user.id, form_data)
  35. if doc:
  36. return doc
  37. else:
  38. raise HTTPException(
  39. status_code=status.HTTP_400_BAD_REQUEST,
  40. detail=ERROR_MESSAGES.FILE_EXISTS,
  41. )
  42. else:
  43. raise HTTPException(
  44. status_code=status.HTTP_400_BAD_REQUEST,
  45. detail=ERROR_MESSAGES.NAME_TAG_TAKEN,
  46. )
  47. ############################
  48. # GetDocByName
  49. ############################
  50. @router.get("/name/{name}", response_model=Optional[DocumentModel])
  51. async def get_doc_by_name(name: str, user=Depends(get_current_user)):
  52. doc = Documents.get_doc_by_name(name)
  53. if doc:
  54. return doc
  55. else:
  56. raise HTTPException(
  57. status_code=status.HTTP_401_UNAUTHORIZED,
  58. detail=ERROR_MESSAGES.NOT_FOUND,
  59. )
  60. ############################
  61. # UpdateDocByName
  62. ############################
  63. @router.post("/name/{name}/update", response_model=Optional[DocumentModel])
  64. async def update_doc_by_name(
  65. name: str, form_data: DocumentUpdateForm, user=Depends(get_current_user)
  66. ):
  67. if user.role != "admin":
  68. raise HTTPException(
  69. status_code=status.HTTP_401_UNAUTHORIZED,
  70. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  71. )
  72. doc = Documents.update_doc_by_name(name, form_data)
  73. if doc:
  74. return doc
  75. else:
  76. raise HTTPException(
  77. status_code=status.HTTP_400_BAD_REQUEST,
  78. detail=ERROR_MESSAGES.NAME_TAG_TAKEN,
  79. )
  80. ############################
  81. # DeleteDocByName
  82. ############################
  83. @router.delete("/name/{name}/delete", response_model=bool)
  84. async def delete_doc_by_name(name: str, user=Depends(get_current_user)):
  85. if user.role != "admin":
  86. raise HTTPException(
  87. status_code=status.HTTP_401_UNAUTHORIZED,
  88. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  89. )
  90. result = Documents.delete_doc_by_name(name)
  91. return result