import { Router } from "express"; import type { Request } from "express"; import { graphqlClient } from "../lib/graphqlClient"; import { respondWithError } from "../lib/error"; import { GetTranslationDocument, TranslationsDocument, CreateTranslationDocument, UpdateTranslationDocument, DeleteTranslationDocument, } from "../../shared/generated/graphql"; interface GqlRequest extends Request { gql?: typeof graphqlClient; } const router = Router(); // GET /api/translations/:id router.get("/:id", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { translation } = await client.request(GetTranslationDocument, { id: req.params.id, }); if (!translation) return res.status(404).json({ message: "Translation not found" }); res.json(translation); } catch (error) { respondWithError(res, error, "Failed to fetch translation"); } }); // GET /api/translations router.get("/", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { translations } = await client.request(TranslationsDocument, { workId: req.query.workId as string, language: req.query.language as string | undefined, limit: req.query.limit ? Number(req.query.limit) : undefined, offset: req.query.offset ? Number(req.query.offset) : undefined, }); res.json(translations); } catch (error) { respondWithError(res, error, "Failed to fetch translations"); } }); // POST /api/translations router.post("/", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { createTranslation } = await client.request( CreateTranslationDocument, { input: req.body, } ); res.status(201).json(createTranslation); } catch (error) { respondWithError(res, error, "Failed to create translation"); } }); // PUT /api/translations/:id router.put("/:id", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { updateTranslation } = await client.request( UpdateTranslationDocument, { id: req.params.id, input: req.body, } ); res.json(updateTranslation); } catch (error) { respondWithError(res, error, "Failed to update translation"); } }); // DELETE /api/translations/:id router.delete("/:id", async (req: GqlRequest, res) => { try { const client = req.gql || graphqlClient; const { deleteTranslation } = await client.request( DeleteTranslationDocument, { id: req.params.id, } ); res.json({ success: deleteTranslation }); } catch (error) { respondWithError(res, error, "Failed to delete translation"); } }); export default router;