link-stack/apps/leafcutter/app/api/upload/index.ts

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-03-31 08:34:35 +02:00
/* eslint-disable no-restricted-syntax */
2023-06-28 09:09:45 +00:00
import { NextRequest, NextResponse } from "next/server";
2023-03-31 08:34:35 +02:00
import { Client } from "@opensearch-project/opensearch";
import { v4 as uuid } from "uuid";
2023-06-26 10:07:12 +00:00
import taxonomy from "app/_config/taxonomy.json";
import unRegions from "app/_config/unRegions.json";
2023-03-31 08:34:35 +02:00
2023-06-28 09:09:45 +00:00
export const POST = async (req: NextRequest) => {
const { tickets } = await req.json();
const authorization = req.headers.get("authorization");
2023-03-31 08:34:35 +02:00
const baseURL = `https://${process.env.OPENSEARCH_URL}`;
const client = new Client({
node: baseURL,
ssl: {
rejectUnauthorized: false,
},
headers: {
2025-01-22 17:50:38 +01:00
authorization,
},
2023-03-31 08:34:35 +02:00
});
const succeeded = [];
const failed = [];
for await (const ticket of tickets) {
const { id } = ticket;
try {
const country = ticket.country[0] ?? "none";
2023-05-24 20:27:57 +00:00
// @ts-expect-error
2023-03-31 08:34:35 +02:00
const translatedCountry = taxonomy.country[country]?.display ?? "none";
2025-01-22 17:50:38 +01:00
const countryDetails: any = unRegions.find(
(c) => c.name === translatedCountry,
);
2023-03-31 08:34:35 +02:00
const augmentedTicket = {
...ticket,
2025-01-22 17:50:38 +01:00
region:
countryDetails["sub-region"]?.toLowerCase().replace(" ", "-") ?? null,
continent:
countryDetails.region?.toLowerCase().replace(" ", "-") ?? null,
2023-05-24 20:27:57 +00:00
};
2023-03-31 08:34:35 +02:00
const out = await client.create({
id: uuid(),
index: "sample_tagged_tickets",
refresh: true,
body: augmentedTicket,
});
succeeded.push(id);
} catch (e) {
2025-01-22 17:50:38 +01:00
console.error(e);
2023-03-31 08:34:35 +02:00
failed.push(id);
}
}
const results = { succeeded, failed };
2023-06-28 09:09:45 +00:00
return NextResponse.json(results);
2023-03-31 08:34:35 +02:00
};