person.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. """Person API routes."""
  2. from flask_restx import Namespace, Resource, fields
  3. from app.services.person_service import PersonService
  4. from app.utils.auth_decorator import require_auth
  5. person_ns = Namespace('persons', description='人员管理接口')
  6. # API models for Swagger documentation
  7. person_model = person_ns.model('Person', {
  8. 'id': fields.Integer(readonly=True, description='人员ID'),
  9. 'name': fields.String(required=True, description='人员姓名'),
  10. 'created_at': fields.String(readonly=True, description='创建时间'),
  11. 'updated_at': fields.String(readonly=True, description='更新时间')
  12. })
  13. person_input = person_ns.model('PersonInput', {
  14. 'name': fields.String(required=True, description='人员姓名')
  15. })
  16. person_update = person_ns.model('PersonUpdate', {
  17. 'id': fields.Integer(required=True, description='人员ID'),
  18. 'name': fields.String(required=True, description='人员姓名')
  19. })
  20. person_delete = person_ns.model('PersonDelete', {
  21. 'id': fields.Integer(required=True, description='人员ID')
  22. })
  23. # Response models
  24. success_response = person_ns.model('SuccessResponse', {
  25. 'success': fields.Boolean(description='操作是否成功'),
  26. 'data': fields.Raw(description='返回数据'),
  27. 'message': fields.String(description='消息')
  28. })
  29. error_response = person_ns.model('ErrorResponse', {
  30. 'success': fields.Boolean(description='操作是否成功'),
  31. 'error': fields.String(description='错误信息'),
  32. 'code': fields.String(description='错误代码')
  33. })
  34. @person_ns.route('')
  35. class PersonList(Resource):
  36. """Resource for listing all persons."""
  37. @person_ns.doc('list_persons')
  38. @person_ns.response(200, 'Success', success_response)
  39. @require_auth
  40. def get(self):
  41. """获取所有人员列表"""
  42. persons = PersonService.get_all()
  43. return {
  44. 'success': True,
  45. 'data': persons,
  46. 'message': 'Persons retrieved successfully'
  47. }, 200
  48. @person_ns.route('/<int:id>')
  49. @person_ns.param('id', '人员ID')
  50. class PersonDetail(Resource):
  51. """Resource for getting a single person."""
  52. @person_ns.doc('get_person')
  53. @person_ns.response(200, 'Success', success_response)
  54. @person_ns.response(404, 'Person not found', error_response)
  55. @require_auth
  56. def get(self, id):
  57. """根据ID获取人员信息"""
  58. person, error = PersonService.get_by_id(id)
  59. if error:
  60. return {
  61. 'success': False,
  62. 'error': error,
  63. 'code': 'NOT_FOUND'
  64. }, 404
  65. return {
  66. 'success': True,
  67. 'data': person,
  68. 'message': 'Person retrieved successfully'
  69. }, 200
  70. @person_ns.route('/create')
  71. class PersonCreate(Resource):
  72. """Resource for creating a person."""
  73. @person_ns.doc('create_person')
  74. @person_ns.expect(person_input)
  75. @person_ns.response(200, 'Success', success_response)
  76. @person_ns.response(400, 'Validation error', error_response)
  77. @require_auth
  78. def post(self):
  79. """创建新人员"""
  80. data = person_ns.payload
  81. name = data.get('name', '')
  82. person, error = PersonService.create(name)
  83. if error:
  84. return {
  85. 'success': False,
  86. 'error': error,
  87. 'code': 'VALIDATION_ERROR'
  88. }, 400
  89. return {
  90. 'success': True,
  91. 'data': person,
  92. 'message': 'Person created successfully'
  93. }, 200
  94. @person_ns.route('/update')
  95. class PersonUpdate(Resource):
  96. """Resource for updating a person."""
  97. @person_ns.doc('update_person')
  98. @person_ns.expect(person_update)
  99. @person_ns.response(200, 'Success', success_response)
  100. @person_ns.response(400, 'Validation error', error_response)
  101. @person_ns.response(404, 'Person not found', error_response)
  102. @require_auth
  103. def post(self):
  104. """更新人员信息"""
  105. data = person_ns.payload
  106. person_id = data.get('id')
  107. name = data.get('name', '')
  108. if not person_id:
  109. return {
  110. 'success': False,
  111. 'error': 'Person ID is required',
  112. 'code': 'VALIDATION_ERROR'
  113. }, 400
  114. person, error = PersonService.update(person_id, name)
  115. if error:
  116. if 'not found' in error.lower():
  117. return {
  118. 'success': False,
  119. 'error': error,
  120. 'code': 'NOT_FOUND'
  121. }, 404
  122. return {
  123. 'success': False,
  124. 'error': error,
  125. 'code': 'VALIDATION_ERROR'
  126. }, 400
  127. return {
  128. 'success': True,
  129. 'data': person,
  130. 'message': 'Person updated successfully'
  131. }, 200
  132. @person_ns.route('/delete')
  133. class PersonDelete(Resource):
  134. """Resource for deleting a person."""
  135. @person_ns.doc('delete_person')
  136. @person_ns.expect(person_delete)
  137. @person_ns.response(200, 'Success', success_response)
  138. @person_ns.response(404, 'Person not found', error_response)
  139. @require_auth
  140. def post(self):
  141. """删除人员"""
  142. data = person_ns.payload
  143. person_id = data.get('id')
  144. if not person_id:
  145. return {
  146. 'success': False,
  147. 'error': 'Person ID is required',
  148. 'code': 'VALIDATION_ERROR'
  149. }, 400
  150. success, error = PersonService.delete(person_id)
  151. if error:
  152. return {
  153. 'success': False,
  154. 'error': error,
  155. 'code': 'NOT_FOUND'
  156. }, 404
  157. return {
  158. 'success': True,
  159. 'data': None,
  160. 'message': 'Person deleted successfully'
  161. }, 200