| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- """Person API routes."""
- from flask_restx import Namespace, Resource, fields
- from app.services.person_service import PersonService
- from app.utils.auth_decorator import require_auth
- person_ns = Namespace('persons', description='人员管理接口')
- # API models for Swagger documentation
- person_model = person_ns.model('Person', {
- 'id': fields.Integer(readonly=True, description='人员ID'),
- 'name': fields.String(required=True, description='人员姓名'),
- 'created_at': fields.String(readonly=True, description='创建时间'),
- 'updated_at': fields.String(readonly=True, description='更新时间')
- })
- person_input = person_ns.model('PersonInput', {
- 'name': fields.String(required=True, description='人员姓名')
- })
- person_update = person_ns.model('PersonUpdate', {
- 'id': fields.Integer(required=True, description='人员ID'),
- 'name': fields.String(required=True, description='人员姓名')
- })
- person_delete = person_ns.model('PersonDelete', {
- 'id': fields.Integer(required=True, description='人员ID')
- })
- # Response models
- success_response = person_ns.model('SuccessResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'data': fields.Raw(description='返回数据'),
- 'message': fields.String(description='消息')
- })
- error_response = person_ns.model('ErrorResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'error': fields.String(description='错误信息'),
- 'code': fields.String(description='错误代码')
- })
- @person_ns.route('')
- class PersonList(Resource):
- """Resource for listing all persons."""
-
- @person_ns.doc('list_persons')
- @person_ns.response(200, 'Success', success_response)
- @require_auth
- def get(self):
- """获取所有人员列表"""
- persons = PersonService.get_all()
- return {
- 'success': True,
- 'data': persons,
- 'message': 'Persons retrieved successfully'
- }, 200
- @person_ns.route('/<int:id>')
- @person_ns.param('id', '人员ID')
- class PersonDetail(Resource):
- """Resource for getting a single person."""
-
- @person_ns.doc('get_person')
- @person_ns.response(200, 'Success', success_response)
- @person_ns.response(404, 'Person not found', error_response)
- @require_auth
- def get(self, id):
- """根据ID获取人员信息"""
- person, error = PersonService.get_by_id(id)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
-
- return {
- 'success': True,
- 'data': person,
- 'message': 'Person retrieved successfully'
- }, 200
- @person_ns.route('/create')
- class PersonCreate(Resource):
- """Resource for creating a person."""
-
- @person_ns.doc('create_person')
- @person_ns.expect(person_input)
- @person_ns.response(200, 'Success', success_response)
- @person_ns.response(400, 'Validation error', error_response)
- @require_auth
- def post(self):
- """创建新人员"""
- data = person_ns.payload
- name = data.get('name', '')
-
- person, error = PersonService.create(name)
- if error:
- code = 'DUPLICATE_NAME' if '已存在' in error else 'VALIDATION_ERROR'
- return {
- 'success': False,
- 'error': error,
- 'code': code
- }, 400
-
- return {
- 'success': True,
- 'data': person,
- 'message': 'Person created successfully'
- }, 200
- @person_ns.route('/update')
- class PersonUpdate(Resource):
- """Resource for updating a person."""
-
- @person_ns.doc('update_person')
- @person_ns.expect(person_update)
- @person_ns.response(200, 'Success', success_response)
- @person_ns.response(400, 'Validation error', error_response)
- @person_ns.response(404, 'Person not found', error_response)
- @require_auth
- def post(self):
- """更新人员信息"""
- data = person_ns.payload
- person_id = data.get('id')
- name = data.get('name', '')
-
- if not person_id:
- return {
- 'success': False,
- 'error': 'Person ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- person, error = PersonService.update(person_id, name)
- if error:
- if '未找到' in error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
- code = 'DUPLICATE_NAME' if '已存在' in error else 'VALIDATION_ERROR'
- return {
- 'success': False,
- 'error': error,
- 'code': code
- }, 400
-
- return {
- 'success': True,
- 'data': person,
- 'message': 'Person updated successfully'
- }, 200
- @person_ns.route('/delete')
- class PersonDelete(Resource):
- """Resource for deleting a person."""
-
- @person_ns.doc('delete_person')
- @person_ns.expect(person_delete)
- @person_ns.response(200, 'Success', success_response)
- @person_ns.response(404, 'Person not found', error_response)
- @require_auth
- def post(self):
- """删除人员"""
- data = person_ns.payload
- person_id = data.get('id')
-
- if not person_id:
- return {
- 'success': False,
- 'error': 'Person ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- success, error = PersonService.delete(person_id)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
-
- return {
- 'success': True,
- 'data': None,
- 'message': 'Person deleted successfully'
- }, 200
|