"""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('/') @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