| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- """Item API routes."""
- from flask_restx import Namespace, Resource, fields
- from app.services.item_service import ItemService
- from app.utils.auth_decorator import require_auth
- item_ns = Namespace('items', description='物品管理接口')
- # API models for Swagger documentation
- item_model = item_ns.model('Item', {
- 'id': fields.Integer(readonly=True, description='物品ID'),
- 'name': fields.String(required=True, description='物品名称'),
- 'unit_price': fields.Float(required=True, description='单价'),
- 'created_at': fields.String(readonly=True, description='创建时间'),
- 'updated_at': fields.String(readonly=True, description='更新时间')
- })
- item_input = item_ns.model('ItemInput', {
- 'name': fields.String(required=True, description='物品名称'),
- 'unit_price': fields.Float(required=True, description='单价')
- })
- item_update = item_ns.model('ItemUpdate', {
- 'id': fields.Integer(required=True, description='物品ID'),
- 'name': fields.String(description='物品名称'),
- 'unit_price': fields.Float(description='单价')
- })
- item_delete = item_ns.model('ItemDelete', {
- 'id': fields.Integer(required=True, description='物品ID')
- })
- # Response models
- success_response = item_ns.model('SuccessResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'data': fields.Raw(description='返回数据'),
- 'message': fields.String(description='消息')
- })
- error_response = item_ns.model('ErrorResponse', {
- 'success': fields.Boolean(description='操作是否成功'),
- 'error': fields.String(description='错误信息'),
- 'code': fields.String(description='错误代码')
- })
- @item_ns.route('')
- class ItemList(Resource):
- """Resource for listing all items."""
-
- @item_ns.doc('list_items')
- @item_ns.response(200, 'Success', success_response)
- @require_auth
- def get(self):
- """获取所有物品列表"""
- items = ItemService.get_all()
- return {
- 'success': True,
- 'data': items,
- 'message': 'Items retrieved successfully'
- }, 200
- @item_ns.route('/<int:id>')
- @item_ns.param('id', '物品ID')
- class ItemDetail(Resource):
- """Resource for getting a single item."""
-
- @item_ns.doc('get_item')
- @item_ns.response(200, 'Success', success_response)
- @item_ns.response(404, 'Item not found', error_response)
- @require_auth
- def get(self, id):
- """根据ID获取物品信息"""
- item, error = ItemService.get_by_id(id)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
-
- return {
- 'success': True,
- 'data': item,
- 'message': 'Item retrieved successfully'
- }, 200
- @item_ns.route('/create')
- class ItemCreate(Resource):
- """Resource for creating an item."""
-
- @item_ns.doc('create_item')
- @item_ns.expect(item_input)
- @item_ns.response(200, 'Success', success_response)
- @item_ns.response(400, 'Validation error', error_response)
- @require_auth
- def post(self):
- """创建新物品"""
- data = item_ns.payload
- name = data.get('name', '')
- unit_price = data.get('unit_price')
-
- item, error = ItemService.create(name, unit_price)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- return {
- 'success': True,
- 'data': item,
- 'message': 'Item created successfully'
- }, 200
- @item_ns.route('/update')
- class ItemUpdate(Resource):
- """Resource for updating an item."""
-
- @item_ns.doc('update_item')
- @item_ns.expect(item_update)
- @item_ns.response(200, 'Success', success_response)
- @item_ns.response(400, 'Validation error', error_response)
- @item_ns.response(404, 'Item not found', error_response)
- @require_auth
- def post(self):
- """更新物品信息"""
- data = item_ns.payload
- item_id = data.get('id')
- name = data.get('name')
- unit_price = data.get('unit_price')
-
- if not item_id:
- return {
- 'success': False,
- 'error': 'Item ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- item, error = ItemService.update(item_id, name, unit_price)
- if error:
- if 'not found' in error.lower():
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
- return {
- 'success': False,
- 'error': error,
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- return {
- 'success': True,
- 'data': item,
- 'message': 'Item updated successfully'
- }, 200
- @item_ns.route('/delete')
- class ItemDelete(Resource):
- """Resource for deleting an item."""
-
- @item_ns.doc('delete_item')
- @item_ns.expect(item_delete)
- @item_ns.response(200, 'Success', success_response)
- @item_ns.response(404, 'Item not found', error_response)
- @require_auth
- def post(self):
- """删除物品"""
- data = item_ns.payload
- item_id = data.get('id')
-
- if not item_id:
- return {
- 'success': False,
- 'error': 'Item ID is required',
- 'code': 'VALIDATION_ERROR'
- }, 400
-
- success, error = ItemService.delete(item_id)
- if error:
- return {
- 'success': False,
- 'error': error,
- 'code': 'NOT_FOUND'
- }, 404
-
- return {
- 'success': True,
- 'data': None,
- 'message': 'Item deleted successfully'
- }, 200
|