mirror of
https://github.com/directus/directus.git
synced 2026-01-28 04:28:07 -05:00
84 lines
1.7 KiB
TypeScript
84 lines
1.7 KiB
TypeScript
import fetch from 'node-fetch';
|
|
|
|
const feedbackUrl = process.env.DIRECTUS_URL + '/items/docs_feedback';
|
|
const token = process.env.DIRECTUS_TOKEN;
|
|
|
|
const headers = {
|
|
'Content-Type': 'application/json',
|
|
Accept: 'application/json',
|
|
Authorization: `Bearer ${token}`,
|
|
};
|
|
|
|
type Submission = {
|
|
id?: string;
|
|
title: string;
|
|
url: string;
|
|
rating: number;
|
|
comments: string;
|
|
};
|
|
|
|
async function createSubmission(submission: Submission) {
|
|
try {
|
|
const response = await fetch(feedbackUrl, {
|
|
method: 'POST',
|
|
body: JSON.stringify(submission),
|
|
headers,
|
|
});
|
|
|
|
if (!response.ok) throw Error(response.statusText);
|
|
|
|
const { data } = (await response.json()) as { data: any };
|
|
return data;
|
|
} catch (error) {
|
|
return error;
|
|
}
|
|
}
|
|
|
|
async function updateSubmission(id: string, submission: Submission) {
|
|
try {
|
|
const response = await fetch(`${feedbackUrl}/${id}`, {
|
|
method: 'PATCH',
|
|
body: JSON.stringify(submission),
|
|
headers,
|
|
});
|
|
|
|
if (!response.ok) throw Error(response.statusText);
|
|
|
|
const { data } = (await response.json()) as { data: any };
|
|
return data;
|
|
} catch (error) {
|
|
return error;
|
|
}
|
|
}
|
|
|
|
exports.handler = async (event) => {
|
|
if (event.httpMethod !== 'POST') {
|
|
return { statusCode: 405, body: 'Method Not Allowed' };
|
|
}
|
|
|
|
try {
|
|
const { id, ...data } = JSON.parse(event.body);
|
|
|
|
let response: any;
|
|
|
|
if (id) {
|
|
response = await updateSubmission(id, data);
|
|
} else {
|
|
response = await createSubmission(data);
|
|
}
|
|
|
|
return {
|
|
statusCode: 200,
|
|
body: JSON.stringify(response),
|
|
};
|
|
} catch (error) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(error);
|
|
|
|
return {
|
|
statusCode: 500,
|
|
body: JSON.stringify({ error: 'Feedback submission failed!' }),
|
|
};
|
|
}
|
|
};
|