import { Router } from "express"; import type { Request } from "express"; import { graphqlClient } from "../lib/graphqlClient"; import { respondWithError } from "../lib/error"; import { GetTagDocument, TagsDocument, type GetTagQuery, type TagsQuery, } from "../../shared/generated/graphql"; interface GqlRequest extends Request { gql?: typeof graphqlClient; } const router = Router(); // GET /api/tags router.get("/", async (req: GqlRequest, res) => { try { const variables = { limit: req.query.limit ? Number(req.query.limit) : undefined, offset: req.query.offset ? Number(req.query.offset) : undefined, }; const client = req.gql || graphqlClient; const { tags } = await client.request(TagsDocument, variables); res.json(tags); } catch (error) { respondWithError(res, error, "Failed to fetch tags"); } }); // GET /api/tags/:id router.get("/:id", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { tag } = await client.request(GetTagDocument, { id: req.params.id, }); if (!tag) return res.status(404).json({ message: "Tag not found" }); res.json(tag); } catch (error) { respondWithError(res, error, "Failed to fetch tag"); } }); export default router;