File size: 5,664 Bytes
7fabf33 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | import type {
ActivityType,
DashboardResponse,
EvaluatorSummary,
GoalPeriod,
PaginatedResponse,
RegistrationCard,
RegistrationDetail,
TeamMemberOption,
TimelineItem,
TimelineEntry,
TimelineEntryCreatePayload,
WorkItemCard,
WorkItemCreatePayload,
WorkItemDetail,
WorkItemFormOptions,
WorkItemReopenPayload,
} from "./types";
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? (import.meta.env.DEV ? "http://127.0.0.1:8000" : "");
async function apiFetch<T>(path: string, init?: RequestInit): Promise<T> {
const response = await fetch(`${API_BASE_URL}${path}`, {
headers: {
"Content-Type": "application/json",
...(init?.headers ?? {}),
},
...init,
});
if (!response.ok) {
const body = await response.text();
throw new Error(body || `Falha ao acessar ${path}`);
}
return response.json() as Promise<T>;
}
export const api = {
getDashboard: () => apiFetch<DashboardResponse>("/dashboard"),
getWorkItems: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string }) => {
const search = new URLSearchParams();
if (params?.status) search.set("status", params.status);
if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId));
if (params?.priority) search.set("priority", params.priority);
if (params?.q) search.set("q", params.q);
if (params?.month) search.set("month", params.month);
const query = search.toString();
return apiFetch<WorkItemCard[]>(`/work-items${query ? `?${query}` : ""}`);
},
getWorkItemsPage: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string; page?: number }) => {
const search = new URLSearchParams();
if (params?.status) search.set("status", params.status);
if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId));
if (params?.priority) search.set("priority", params.priority);
if (params?.q) search.set("q", params.q);
if (params?.month) search.set("month", params.month);
if (params?.page) search.set("page", String(params.page));
const query = search.toString();
return apiFetch<PaginatedResponse<WorkItemCard>>(`/work-items/paged${query ? `?${query}` : ""}`);
},
getRegistrations: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string }) => {
const search = new URLSearchParams();
if (params?.status) search.set("status", params.status);
if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId));
if (params?.priority) search.set("priority", params.priority);
if (params?.q) search.set("q", params.q);
if (params?.month) search.set("month", params.month);
const query = search.toString();
return apiFetch<RegistrationCard[]>(`/registrations${query ? `?${query}` : ""}`);
},
getRegistrationsPage: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string; page?: number }) => {
const search = new URLSearchParams();
if (params?.status) search.set("status", params.status);
if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId));
if (params?.priority) search.set("priority", params.priority);
if (params?.q) search.set("q", params.q);
if (params?.month) search.set("month", params.month);
if (params?.page) search.set("page", String(params.page));
const query = search.toString();
return apiFetch<PaginatedResponse<RegistrationCard>>(`/registrations/paged${query ? `?${query}` : ""}`);
},
getRegistration: (propertyId: number) => apiFetch<RegistrationDetail>(`/registrations/${propertyId}`),
getWorkItem: (id: number) => apiFetch<WorkItemDetail>(`/work-items/${id}`),
createWorkItem: (payload: WorkItemCreatePayload) =>
apiFetch<WorkItemDetail>("/work-items", {
method: "POST",
body: JSON.stringify(payload),
}),
updateWorkItem: (id: number, payload: WorkItemCreatePayload) =>
apiFetch<WorkItemDetail>(`/work-items/${id}`, {
method: "PUT",
body: JSON.stringify(payload),
}),
reopenWorkItem: (id: number, payload: WorkItemReopenPayload) =>
apiFetch<WorkItemDetail>(`/work-items/${id}/reopen`, {
method: "POST",
body: JSON.stringify(payload),
}),
createTimelineEntry: (id: number, payload: TimelineEntryCreatePayload) =>
apiFetch<TimelineEntry>(`/work-items/${id}/timeline`, {
method: "POST",
body: JSON.stringify(payload),
}),
updateTimelineEntry: (workItemId: number, entryId: number, payload: TimelineEntryCreatePayload) =>
apiFetch<TimelineEntry>(`/work-items/${workItemId}/timeline/${entryId}`, {
method: "PUT",
body: JSON.stringify(payload),
}),
deleteTimelineEntry: (workItemId: number, entryId: number) =>
apiFetch<{ status: string }>(`/work-items/${workItemId}/timeline/${entryId}`, {
method: "DELETE",
}),
getEvaluators: (params?: { month?: string }) => {
const search = new URLSearchParams();
if (params?.month) search.set("month", params.month);
const query = search.toString();
return apiFetch<EvaluatorSummary[]>(`/evaluators${query ? `?${query}` : ""}`);
},
getPriorityOptions: () => apiFetch<string[]>("/priority-options"),
getTeamMembers: () => apiFetch<TeamMemberOption[]>("/team-members"),
getTimeline: () => apiFetch<TimelineItem[]>("/timeline"),
getGoals: () => apiFetch<GoalPeriod[]>("/goal-periods"),
getActivityTypes: () => apiFetch<ActivityType[]>("/activity-types"),
getWorkItemFormOptions: () => apiFetch<WorkItemFormOptions>("/work-item-form-options"),
};
|