mirror of
https://github.com/wassname/Open-Assistant.git
synced 2026-06-27 16:10:30 +08:00
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { getToken } from "next-auth/jwt";
|
|
import prisma from "src/lib/prismadb";
|
|
|
|
/**
|
|
* Stores the task interaction with the Task Backend and then returns the next task generated.
|
|
*
|
|
* This implicity does a few things:
|
|
* 1) Stores the answer with the Task Backend.
|
|
* 2) Records the new task in our local database.
|
|
* 3) Returns the newly created task to the client.
|
|
*/
|
|
const handler = async (req, res) => {
|
|
const token = await getToken({ req });
|
|
|
|
// Return nothing if the user isn't registered.
|
|
if (!token) {
|
|
res.status(401).end();
|
|
return;
|
|
}
|
|
|
|
// Parse out the local task ID and the interaction contents.
|
|
const { id, content, update_type } = await JSON.parse(req.body);
|
|
|
|
// Log the interaction locally to create our user_post_id needed by the Task
|
|
// Backend.
|
|
const interaction = await prisma.taskInteraction.create({
|
|
data: {
|
|
content,
|
|
task: {
|
|
connect: {
|
|
id,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Send the interaction to the Task Backend. This automatically fetches the
|
|
// next task in the sequence (or the done task).
|
|
const interactionRes = await fetch(`${process.env.FASTAPI_URL}/api/v1/tasks/interaction`, {
|
|
method: "POST",
|
|
headers: {
|
|
"X-API-Key": process.env.FASTAPI_KEY,
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({
|
|
type: update_type,
|
|
user: {
|
|
id: token.sub,
|
|
display_name: token.name || token.email,
|
|
auth_method: "local",
|
|
},
|
|
message_id: id,
|
|
user_message_id: interaction.id,
|
|
...content,
|
|
}),
|
|
});
|
|
const newTask = await interactionRes.json();
|
|
|
|
// Stores the new task with our database.
|
|
const newRegisteredTask = await prisma.registeredTask.create({
|
|
data: {
|
|
task: newTask,
|
|
user: {
|
|
connect: {
|
|
id: token.sub,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Send the next task in the sequence to the client.
|
|
res.status(200).json(newRegisteredTask);
|
|
};
|
|
|
|
export default handler;
|