feat(fc2c-i): tag directory service and /api/tags/directory

This commit is contained in:
2026-05-15 15:50:41 -04:00
parent a74b313596
commit 8484cb9aaa
4 changed files with 247 additions and 0 deletions
+19
View File
@@ -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()