* Initial RESTful API

* RESTful API tests

* Scrapping error handling refactored

* Initial GraphQL API

* GraphQL API tests
This commit is contained in:
David
2021-03-28 23:17:47 +02:00
committed by GitHub
parent 7288e9ace7
commit 2938f780aa
15 changed files with 1873 additions and 671 deletions

View File

@@ -0,0 +1,49 @@
import { NextApiHandler } from "next";
import NextCors from "nextjs-cors";
import { googleScrape, textToSpeechScrape } from "../../../utils/translate";
type Data = {
translation?: string,
audio?: number[],
error?: string
};
const methods = ["GET"];
const handler: NextApiHandler<Data> = async (req, res) => {
await NextCors(req, res, {
methods,
origin: "*",
preflightContinue: true
});
const {
query: { slug },
method
} = req;
if (!slug || !Array.isArray(slug) || slug.length !== 3)
return res.status(404).json({ error: "Not Found" });
if (!method || !methods.includes(method)) {
res.setHeader("Allow", methods);
return res.status(405).json({ error: "Method Not Allowed" });
}
const [source, target, query] = slug;
if (source === "audio") {
const audio = await textToSpeechScrape(target, query);
return audio
? res.status(200).json({ audio })
: res.status(500).json({ error: "An error occurred while retrieving the audio" });
}
const { translationRes, errorMsg } = await googleScrape(source, target, query);
if (errorMsg)
return res.status(500).json({ error: errorMsg });
res.status(200).json({ translation: translationRes });
}
export default handler;