Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

105 lignes
4.1 KiB

  1. from Config.RouteProvider import RouteProvider
  2. from flask import jsonify
  3. from flask_jwt_extended import jwt_required
  4. from datetime import datetime
  5. class UsersCRUD(RouteProvider):
  6. def __init__(self):
  7. super().__init__()
  8. @jwt_required()
  9. @RouteProvider.access_controller(access_level=["Administrator", "System Administrator"])
  10. def create(self, request):
  11. data = request.form
  12. files = request.files
  13. required_keys = ["email", "password", "name", "address"]
  14. required_files = ["profile_picture"]
  15. if not self.validate(required_keys, data):
  16. return self._abort(400, "Incorrectly formatted request. Please make sure that all the required fields are entered.")
  17. if not self.validate(required_files, files):
  18. return self._abort(400, "Incorrectly formatted request. Please make sure that all the required files are attached.")
  19. constraint = self.check_constraint(data, self.tables.Users)
  20. if self.check_constraint(data, self.tables.Users) is not True:
  21. return self._abort(409, constraint)
  22. user = self.tables.Users()
  23. [setattr(user, key, data[key]) for key in required_keys]
  24. profile_picture_path = self.save_file(files, "profile_picture", "/users/")
  25. user.profile_picture_path = profile_picture_path
  26. user.sign_up_date = datetime.utcnow()
  27. self.db.session.add(user)
  28. self.db.session.commit()
  29. user = self.tables.Users.query.filter_by(email = data["email"]).first()
  30. return jsonify({ "user" : self.schemas.User.dump(user) })
  31. @jwt_required()
  32. @RouteProvider.access_controller(access_level=["*"])
  33. def read(self, request):
  34. params = self.build_params(self.tables.Users.__struct__, request.args)
  35. query_result = self.tables.Users.query.filter_by(**params).all()
  36. return jsonify({ "users" : self.schemas.Users.dump(query_result), "args" : params })
  37. @jwt_required()
  38. @RouteProvider.access_controller(access_level=["*"])
  39. def update(self, request):
  40. data = request.form
  41. files = request.files
  42. required_keys = ["id"]
  43. updatable_keys = []
  44. [updatable_keys.append(key) for key in self.tables.Users.__struct__ if key not in ["sign_up_date", "id"]]
  45. required_files = ["profile_picture"]
  46. if not self.validate(required_keys, data):
  47. return self._abort(400, "Incorrectly formatted request. Please make sure that all the required fields are entered.")
  48. user = self.tables.Users.query.filter_by(id = data["id"]).first()
  49. if user is None:
  50. return self._abort(404, "User not found")
  51. constraint = self.check_constraint(data, self.tables.Users)
  52. if constraint is not True:
  53. return self._abort(409, constraint)
  54. [setattr(user, key, data[key]) for key in updatable_keys if key in data]
  55. if "profile_picture" in files:
  56. profile_picture_path = self.save_file(files, "profile_picture", "/users/")
  57. user.profile_picture_path = profile_picture_path
  58. if data["admin_id"] == 'null':
  59. user.admin_id = None
  60. self.db.session.commit()
  61. user = self.tables.Users.query.filter_by(id = data["id"]).first()
  62. return jsonify({ "user" : self.schemas.User.dump(user) })
  63. @jwt_required()
  64. @RouteProvider.access_controller(access_level=["Administrator", "System Administrator"])
  65. def delete(self, request):
  66. params = self.build_params(self.tables.Users.__struct__, request.args)
  67. if "id" not in params:
  68. return self._abort(400, "Missing params info: 'id'")
  69. user = self.tables.Users.query.filter_by(id = params["id"]).first()
  70. if user is None:
  71. return self._abort(404, f'User with ID \'{params["id"]}\' is not found')
  72. user.archived = 1 if user.archived == 0 else 0
  73. if user.archived == 1:
  74. user.archived = 0
  75. else:
  76. user.archived = 1
  77. user = self.tables.Users.query.filter_by(**params).first()
  78. return jsonify({ "user" : self.schemas.User.dump(user) })
  79. users_crud = UsersCRUD()