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

83 lines
2.2 KiB
TypeScript
Raw Normal View History

"use server";
import { executeGraphQL } from "app/_lib/zammad";
import { getTicketOverviewCountsQuery } from "app/_graphql/getTicketOverviewCountsQuery";
import { getTicketsByOverviewQuery } from "app/_graphql/getTicketsByOverviewQuery";
export const getOverviewTicketCountsAction = async () => {
const countResult = await executeGraphQL({
query: getTicketOverviewCountsQuery,
});
const overviews = countResult?.ticketOverviews?.edges;
const counts = overviews?.reduce((acc: any, overview: any) => {
acc[overview.node.name] = overview.node.ticketCount;
return acc;
});
return counts;
};
export const getOverviewTicketsAction = async (name: string) => {
let tickets = [];
let error = null;
if (name === "Recent") {
const response = await fetch(
`${process.env.ZAMMAD_URL}/api/v1/recent_view`,
);
const recent = await response.json();
console.log({ recent });
for (const rec of recent) {
const res = await fetch(
`${process.env.ZAMMAD_URL}/api/v1/tickets/${rec.o_id}`,
);
const tkt = await res.json();
tickets.push({
...tkt,
internalId: tkt.id,
createdAt: tkt.created_at,
updatedAt: tkt.updated_at,
});
}
} else {
const overviewLookup = {
Assigned: "My Assigned Tickets",
Open: "Open Tickets",
Urgent: "Escalated Tickets",
Unassigned: "Unassigned & Open Tickets",
};
const fullName = overviewLookup[name];
const countResult = await executeGraphQL({
query: getTicketOverviewCountsQuery,
});
const overviewID = countResult?.ticketOverviews?.edges?.find(
(overview: any) => overview.node.name === fullName,
)?.node?.id;
console.log({ overviewID });
const ticketsResult = await executeGraphQL({
query: getTicketsByOverviewQuery,
variables: { overviewId: overviewID, pageSize: 250 },
});
const edges = ticketsResult?.ticketsByOverview?.edges;
if (edges) {
tickets = edges.map((edge: any) => edge.node);
}
}
const sortedTickets = tickets.sort((a: any, b: any) => {
if (a.internalId < b.internalId) {
return 1;
}
if (a.internalId > b.internalId) {
return -1;
}
return 0;
});
return { tickets: sortedTickets, error };
};