link-stack/apps/link/app/_actions/overviews.ts

98 lines
2.7 KiB
TypeScript
Raw Permalink Normal View History

"use server";
2024-08-06 08:36:03 +02:00
import { executeGraphQL, executeREST } from "app/_lib/zammad";
import { getTicketOverviewCountsQuery } from "app/_graphql/getTicketOverviewCountsQuery";
import { getTicketsByOverviewQuery } from "app/_graphql/getTicketsByOverviewQuery";
2024-08-07 12:02:33 +02:00
const overviewLookup = {
Assigned: "My Assigned Tickets",
Open: "Open Tickets",
Urgent: "Escalated Tickets",
Unassigned: "Unassigned & Open Tickets",
Recent: "Recent Tickets",
Pending: "Pending Reached Tickets",
MyPending: "My Pending Reached Tickets",
MySubscribed: "My Subscribed Tickets",
};
export const getOverviewTicketCountsAction = async () => {
2024-08-14 10:51:12 +02:00
try {
const recent = await executeREST({ path: "/api/v1/recent_view" });
const countResult = await executeGraphQL({
query: getTicketOverviewCountsQuery,
});
const overviews = countResult?.ticketOverviews?.edges ?? [];
const counts = overviews.reduce((acc: any, overview: any) => {
const name = overview.node.name;
const key = Object.keys(overviewLookup)
.find((k) => overviewLookup[k] === name)
?.toLowerCase();
if (key) {
acc[key] = overview.node.ticketCount ?? 0;
}
return acc;
}, {});
counts.recent = recent.length;
2024-08-14 10:51:12 +02:00
return counts;
} catch (e) {
2024-08-14 13:03:50 +02:00
console.error(e.message);
2024-08-14 10:51:12 +02:00
return {};
}
};
export const getOverviewTicketsAction = async (name: string) => {
let tickets = [];
2024-08-14 10:51:12 +02:00
try {
if (name === "Recent") {
const recent = await executeREST({ path: "/api/v1/recent_view" });
2024-08-14 10:51:12 +02:00
for (const rec of recent) {
const tkt = await executeREST({
path: `/api/v1/tickets/${rec.o_id}`,
});
tickets.push({
...tkt,
internalId: tkt.id,
createdAt: tkt.created_at,
updatedAt: tkt.updated_at,
});
}
} else {
const fullName = overviewLookup[name];
const countResult = await executeGraphQL({
query: getTicketOverviewCountsQuery,
2024-08-06 08:36:03 +02:00
});
2024-08-14 10:51:12 +02:00
const overviewID = countResult?.ticketOverviews?.edges?.find(
(overview: any) => overview.node.name === fullName,
)?.node?.id;
const ticketsResult = await executeGraphQL({
query: getTicketsByOverviewQuery,
variables: { overviewId: overviewID, pageSize: 250 },
});
2024-08-14 10:51:12 +02:00
const edges = ticketsResult?.ticketsByOverview?.edges;
if (edges) {
tickets = edges.map((edge: any) => edge.node);
}
}
2024-08-14 10:51:12 +02:00
const sortedTickets = tickets.sort((a: any, b: any) => {
if (a.internalId < b.internalId) {
return 1;
}
if (a.internalId > b.internalId) {
return -1;
}
return 0;
});
2024-08-14 10:51:12 +02:00
return { tickets: sortedTickets };
} catch (e) {
2024-08-14 13:03:50 +02:00
console.error(e.message);
2024-08-14 10:51:12 +02:00
return { tickets, message: e.message ?? "" };
}
};