feat(fc2c-i): tag directory service and /api/tags/directory
This commit is contained in:
@@ -4,6 +4,7 @@ from quart import Blueprint, jsonify, request
|
||||
|
||||
from ..extensions import get_session
|
||||
from ..models import TagKind
|
||||
from ..services.tag_directory_service import TagDirectoryService
|
||||
from ..services.tag_service import TagService, TagValidationError
|
||||
|
||||
tags_bp = Blueprint("tags", __name__, url_prefix="/api")
|
||||
@@ -46,6 +47,24 @@ async def autocomplete():
|
||||
)
|
||||
|
||||
|
||||
@tags_bp.route("/tags/directory", methods=["GET"])
|
||||
async def directory():
|
||||
kind = request.args.get("kind") or None
|
||||
q = request.args.get("q") or None
|
||||
cursor = request.args.get("cursor") or None
|
||||
try:
|
||||
limit = int(request.args.get("limit", "60"))
|
||||
except ValueError:
|
||||
return jsonify({"error": "limit must be an integer"}), 400
|
||||
async with get_session() as session:
|
||||
svc = TagDirectoryService(session)
|
||||
try:
|
||||
page = await svc.list_tags(kind=kind, q=q, cursor=cursor, limit=limit)
|
||||
except ValueError as exc:
|
||||
return jsonify({"error": str(exc)}), 400
|
||||
return jsonify({"cards": page.cards, "next_cursor": page.next_cursor})
|
||||
|
||||
|
||||
@tags_bp.route("/tags", methods=["POST"])
|
||||
async def create_tag():
|
||||
body = await request.get_json()
|
||||
|
||||
Reference in New Issue
Block a user