mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-03 18:46:47 +09:00
saved_view_service raises ValidationError/NotFoundError/ConflictError and returns bare dicts; views.py drops the (value, err) tuple translations and its not-found prose sniff. Duplicate names are now 409. Sniffing census 11 -> 10. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from flask import Blueprint, jsonify, request
|
|
from flask_jwt_extended import jwt_required, get_jwt_identity
|
|
|
|
from app.services import saved_view_service
|
|
|
|
views_bp = Blueprint('views', __name__)
|
|
|
|
|
|
@views_bp.route('', methods=['GET'])
|
|
@jwt_required()
|
|
def list_views():
|
|
"""List the current user's saved views, optionally for one page."""
|
|
page = request.args.get('page', '').strip()
|
|
if not page:
|
|
return jsonify({'error': 'The page query parameter is required'}), 400
|
|
return jsonify({'views': saved_view_service.list_views(get_jwt_identity(), page)})
|
|
|
|
|
|
@views_bp.route('', methods=['POST'])
|
|
@jwt_required()
|
|
def create_view():
|
|
body = request.get_json(silent=True) or {}
|
|
view = saved_view_service.create_view(
|
|
get_jwt_identity(),
|
|
body.get('page'),
|
|
body.get('name'),
|
|
body.get('state'),
|
|
is_default=bool(body.get('is_default')),
|
|
)
|
|
return jsonify(view), 201
|
|
|
|
|
|
@views_bp.route('/<int:view_id>', methods=['PUT'])
|
|
@jwt_required()
|
|
def update_view(view_id):
|
|
body = request.get_json(silent=True) or {}
|
|
view = saved_view_service.update_view(get_jwt_identity(), view_id, body)
|
|
return jsonify(view)
|
|
|
|
|
|
@views_bp.route('/<int:view_id>', methods=['DELETE'])
|
|
@jwt_required()
|
|
def delete_view(view_id):
|
|
saved_view_service.delete_view(get_jwt_identity(), view_id)
|
|
return jsonify({'success': True})
|