siprio / frontend /src /api.ts
gui-sparim's picture
Aprimora cadastro acesso e relatorio
d17f6be
Raw
History Blame Contribute Delete
3.72 kB
import type { Equipe, Processo, StatusFiltro } from "./types";
const API_BASE = import.meta.env.VITE_API_BASE ?? "/api";
async function parseResponse<T>(response: Response): Promise<T> {
if (response.ok) {
return response.json() as Promise<T>;
}
let message = "Não foi possível concluir a operação.";
try {
const payload = await response.json();
if (typeof payload.detail === "string") {
message = payload.detail;
}
} catch {
message = response.statusText || message;
}
throw new Error(message);
}
export async function listarProcessos(params: {
q?: string;
status?: StatusFiltro;
}): Promise<Processo[]> {
const query = new URLSearchParams();
if (params.q) query.set("q", params.q);
if (params.status) query.set("status", params.status);
const response = await fetch(`${API_BASE}/processos?${query.toString()}`);
return parseResponse<Processo[]>(response);
}
export async function criarProcesso(form: FormData): Promise<Processo> {
const response = await fetch(`${API_BASE}/processos`, {
method: "POST",
body: form
});
return parseResponse<Processo>(response);
}
export async function atualizarDirecao(id: number, form: FormData): Promise<Processo> {
const response = await fetch(`${API_BASE}/processos/${id}/direcao`, {
method: "PATCH",
body: form
});
return parseResponse<Processo>(response);
}
export async function excluirProcesso(id: number): Promise<void> {
const response = await fetch(`${API_BASE}/processos/${id}`, {
method: "DELETE"
});
if (response.ok) return;
await parseResponse<never>(response);
}
export async function atualizarPrazoEquipe(
id: number,
equipe: Equipe,
payload: {
prazo: string | null;
data_informacao?: string | null;
data_atendimento?: string | null;
proxima_equipe?: Equipe | null;
encerrar_fluxo?: boolean;
observacoes?: string;
justificativa_revisao?: string;
confirmar_revisao?: boolean;
}
): Promise<Processo> {
const response = await fetch(`${API_BASE}/processos/${id}/equipes/${equipe}/prazo`, {
method: "PATCH",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
return parseResponse<Processo>(response);
}
export async function atualizarEtapaFluxo(
id: number,
etapaId: number,
payload: {
prazo: string | null;
data_informacao?: string | null;
data_atendimento?: string | null;
observacoes?: string;
justificativa_revisao?: string;
confirmar_revisao?: boolean;
}
): Promise<Processo> {
const response = await fetch(`${API_BASE}/processos/${id}/fluxo-etapas/${etapaId}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
return parseResponse<Processo>(response);
}
export async function atualizarFluxoDirecao(
id: number,
payload: {
etapa_tipo: "direcao_prazo" | "direcao_conclusao";
prazo_informado: string | null;
data_resposta_direcao_origem: string | null;
data_atendimento: string | null;
data_informacao_conclusao_origem: string | null;
observacoes_direcao: string;
justificativa_revisao?: string;
confirmar_revisao?: boolean;
}
): Promise<Processo> {
const response = await fetch(`${API_BASE}/processos/${id}/direcao/fluxo`, {
method: "PATCH",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
return parseResponse<Processo>(response);
}
export function urlArquivo(id: number): string {
return `${API_BASE}/processos/${id}/arquivo`;
}
export function urlRelatorioProcessos(): string {
return `${API_BASE}/processos/relatorio-priorizacoes.pdf`;
}