| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- """Supplier API routes."""
- from flask_restx import Namespace, Resource, fields
- from app.services.supplier_service import SupplierService
- from app.utils.auth_decorator import require_auth
- supplier_ns = Namespace('suppliers', description='供应商管理接口')
- # API models for Swagger documentation
- supplier_model = supplier_ns.model('Supplier', {
- '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='更新时间')
- })
- supplier_input = supplier_ns.model('SupplierInput', {
- 'name': fields.String(required=True, description='供应商名称')
- })
- supplier_update = supplier_ns.model('SupplierUpdate', {
- 'id': fields.Integer(required=True, description='供应商ID'),
- 'name': fields.String(description='供应商名称')
- })
- supplier_delete = supplier_ns.model('SupplierDelete', {
- 'id': fields.Integer(required=True, description='供应商ID')
- })
- # Response models
- success_response = supplier_ns.model('SuccessResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'data': fields.Raw(description='返回数据'),
- 'message': fields.String(description='消息')
- })
- error_response = supplier_ns.model('ErrorResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'error': fields.String(description='错误信息'),
- 'code': fields.String(description='错误代码')
- })
- @supplier_ns.route('')
- class SupplierList(Resource):
- """Resource for listing all suppliers."""
-
- @supplier_ns.doc('list_suppliers')
- @supplier_ns.response(200, 'Success', success_response)
- @require_auth
- def get(self):
- """获取所有供应商列表"""
- suppliers = SupplierService.get_all()
- return {
- 'success': True,
- 'data': suppliers,
- 'message': 'Suppliers retrieved successfully'
- }, 200
- @supplier_ns.route('/<int:id>')
- @supplier_ns.param('id', '供应商ID')
- class SupplierDetail(Resource):
- """Resource for getting a single supplier."""
-
- @supplier_ns.doc('get_supplier')
- @supplier_ns.response(200, 'Success', success_response)
- @supplier_ns.response(404, 'Supplier not found', error_response)
- @require_auth
- def get(self, id):
- """根据ID获取供应商信息"""
- supplier, error = SupplierService.get_by_id(id)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
-
- return {
- 'success': True,
- 'data': supplier,
- 'message': 'Supplier retrieved successfully'
- }, 200
- @supplier_ns.route('/create')
- class SupplierCreate(Resource):
- """Resource for creating a supplier."""
-
- @supplier_ns.doc('create_supplier')
- @supplier_ns.expect(supplier_input)
- @supplier_ns.response(200, 'Success', success_response)
- @supplier_ns.response(400, 'Validation error', error_response)
- @require_auth
- def post(self):
- """创建新供应商"""
- data = supplier_ns.payload
- name = data.get('name', '')
-
- supplier, error = SupplierService.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': supplier,
- 'message': 'Supplier created successfully'
- }, 200
- @supplier_ns.route('/update')
- class SupplierUpdate(Resource):
- """Resource for updating a supplier."""
-
- @supplier_ns.doc('update_supplier')
- @supplier_ns.expect(supplier_update)
- @supplier_ns.response(200, 'Success', success_response)
- @supplier_ns.response(400, 'Validation error', error_response)
- @supplier_ns.response(404, 'Supplier not found', error_response)
- @require_auth
- def post(self):
- """更新供应商信息"""
- data = supplier_ns.payload
- supplier_id = data.get('id')
- name = data.get('name')
-
- if not supplier_id:
- return {
- 'success': False,
- 'error': 'Supplier ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- supplier, error = SupplierService.update(supplier_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': supplier,
- 'message': 'Supplier updated successfully'
- }, 200
- @supplier_ns.route('/delete')
- class SupplierDelete(Resource):
- """Resource for deleting a supplier."""
-
- @supplier_ns.doc('delete_supplier')
- @supplier_ns.expect(supplier_delete)
- @supplier_ns.response(200, 'Success', success_response)
- @supplier_ns.response(400, 'Cannot delete', error_response)
- @supplier_ns.response(404, 'Supplier not found', error_response)
- @require_auth
- def post(self):
- """删除供应商"""
- data = supplier_ns.payload
- supplier_id = data.get('id')
-
- if not supplier_id:
- return {
- 'success': False,
- 'error': 'Supplier ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- success, error = SupplierService.delete(supplier_id)
- if error:
- if '未找到' in error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
- return {
- 'success': False,
- 'error': error,
- 'code': 'FOREIGN_KEY_VIOLATION'
- }, 400
-
- return {
- 'success': True,
- 'data': None,
- 'message': 'Supplier deleted successfully'
- }, 200
|