server.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import fastapi
  2. import fastapi.staticfiles
  3. import fastapi.responses
  4. import pathlib
  5. import os
  6. from . import *
  7. from .requests import *
  8. class server(fastapi.FastAPI):
  9. def __init__(self, config_file: str) -> None:
  10. super().__init__()
  11. location = pathlib.Path(config_file)
  12. self.__resources = config_loader(app_config) \
  13. .load(location) \
  14. .resources
  15. self.__static()
  16. self.__route_product()
  17. self.__route_users()
  18. @property
  19. def resources(self) -> app_resources:
  20. return self.__resources
  21. @property
  22. def product_app(self) -> product_app:
  23. return self.__resources.product_app
  24. @property
  25. def users_app(self) -> users_app:
  26. return self.__resources.users_app
  27. def __static(self) -> None:
  28. @self.get("/")
  29. async def root() -> str:
  30. with pathlib.Path("static/core.html").open() as core:
  31. return fastapi.responses.HTMLResponse(
  32. content = core.read(),
  33. status_code = 200
  34. )
  35. app_directory = fastapi.staticfiles.StaticFiles(
  36. directory = pathlib.Path("static/")
  37. )
  38. covers_directory = fastapi.staticfiles.StaticFiles(
  39. directory = self.resources.config.covers_path
  40. )
  41. self.mount(
  42. "/app",
  43. app_directory,
  44. name = "app_frontend"
  45. )
  46. self.mount(
  47. directory_image.server_path(),
  48. covers_directory,
  49. name = "covers"
  50. )
  51. def __route_product(self) -> None:
  52. @self.get("/products")
  53. async def products() -> dict:
  54. return self.product_app.all()
  55. @self.get("/product/get/barcode/{barcode}")
  56. async def product_get_barcode(barcode: int) -> dict:
  57. return self.product_app.get_barcode(str(barcode))
  58. @self.get("/product/get/name/{name}")
  59. async def product_get_name(name: str) -> dict:
  60. return self.product_app.get_name(name)
  61. @self.get("/product/search/name/{name}")
  62. async def product_search_name(name: str) -> dict:
  63. return self.product_app.search_name(name)
  64. @self.get("/product/search/author/{author}")
  65. async def product_search_author(author: str) -> dict:
  66. return self.product_app.search_author(author)
  67. @self.get("/product/check/barcode/{barcode}")
  68. async def product_check_barcode(barcode: int) -> dict:
  69. return self.product_app.check_barcode(str(barcode))
  70. @self.get("/product/check/name/{name}")
  71. async def product_check_name(name: str) -> dict:
  72. return self.product_app.check_name(name)
  73. @self.post("/product/update/barcode/{barcode}")
  74. async def product_barcode_update(
  75. barcode: str,
  76. product: product_update_request
  77. ) -> dict:
  78. body = product.dict()
  79. body["target_barcode"] = barcode
  80. return self.product_app.update(body)
  81. @self.post("/product/update/name/{name}")
  82. async def product_name_update(
  83. name: str,
  84. product: product_update_request
  85. ) -> dict:
  86. body = product.dict()
  87. body["target_name"] = name
  88. return self.product_app.update(body)
  89. @self.post("/product/update/image/barcode/{barcode}")
  90. async def product_image_barcode_update(
  91. barcode: str,
  92. product_image: product_update_image_request
  93. ) -> dict:
  94. body = product_image.dict()
  95. body["target_barcode"] = barcode
  96. return self.product_app.update_image(body)
  97. @self.post("/product/update/image/name/{name}")
  98. async def product_image_barcode_update(
  99. name: str,
  100. product_image: product_update_image_request
  101. ) -> dict:
  102. body = product_image.dict()
  103. body["target_name"] = name
  104. return self.product_app.update_image(body)
  105. @self.delete("/product/barcode/{barcode}")
  106. async def product_barcode_delete(
  107. barcode: str,
  108. request: apikey_request
  109. ) -> dict:
  110. body = request.dict()
  111. body["target_barcode"] = barcode
  112. return self.product_app.delete(body)
  113. @self.delete("/product/name/{name}")
  114. async def product_name_delete(
  115. name: str,
  116. request: apikey_request
  117. ) -> dict:
  118. body = request.dict()
  119. body["target_name"] = name
  120. return self.product_app.delete(body)
  121. @self.post("/product/create")
  122. async def product_create(product: product_create_request) -> dict:
  123. return self.product_app.create(product.dict())
  124. def __route_users(self) -> None:
  125. @self.post("/user/login")
  126. async def user_login(user: user_login_request) -> dict:
  127. return self.users_app.login(user.nick, user.password)
  128. @self.post("/user")
  129. async def user_get(body: user_get_request) -> dict:
  130. return self.users_app.get(body.apikey)
  131. instance = server(os.environ["config_file"])