fetch request steps
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
export type FetchRequestStatus = "pending" | "processing" | "raw_expenses_done" | "enriched_done" | "completed" | "failed";
|
||||
export type FetchRequestStatus =
|
||||
| "pending"
|
||||
| "processing"
|
||||
| "paused"
|
||||
| "raw_expenses_done"
|
||||
| "enriched_done"
|
||||
| "completed"
|
||||
| "failed";
|
||||
|
||||
export interface FileSource {
|
||||
path: string;
|
||||
@@ -20,12 +27,18 @@ export interface FetchRequestCreate {
|
||||
end_date?: string;
|
||||
}
|
||||
|
||||
export interface FetchRequestUpdate {
|
||||
status?: FetchRequestStatus;
|
||||
error_message?: string | null;
|
||||
}
|
||||
|
||||
export interface FetchRequest extends FetchRequestCreate {
|
||||
id: string;
|
||||
status: FetchRequestStatus;
|
||||
fingerprint: string;
|
||||
completed_at?: string | null;
|
||||
error_message?: string | null;
|
||||
retry_count?: number;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
@@ -36,3 +49,44 @@ export interface UploadResult {
|
||||
url: string;
|
||||
absolute_path: string;
|
||||
}
|
||||
|
||||
export interface AmbiguityCandidate {
|
||||
amount: number;
|
||||
balance: number;
|
||||
}
|
||||
|
||||
export interface PendingAmbiguity {
|
||||
id: string;
|
||||
fetch_request: string;
|
||||
step_index?: number;
|
||||
line: string;
|
||||
ocr_amount: number;
|
||||
ocr_balance: number;
|
||||
prev_balance: number;
|
||||
candidates: AmbiguityCandidate[];
|
||||
chosen?: AmbiguityCandidate | null;
|
||||
resolved_at?: string | null;
|
||||
status: "pending" | "resolved";
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface ResolveAmbiguityPayload {
|
||||
chosen: {
|
||||
amount: number;
|
||||
balance: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface SSEEvent {
|
||||
step: string;
|
||||
status: "started" | "completed" | "paused";
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface FetchRequestFilters {
|
||||
status?: FetchRequestStatus[];
|
||||
account_name?: string;
|
||||
source_type?: "file" | "email";
|
||||
}
|
||||
|
||||
export const RETRY_MAX = 3;
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
export type {
|
||||
FetchRequest,
|
||||
FetchRequestCreate,
|
||||
FetchRequestUpdate,
|
||||
FetchRequestStatus,
|
||||
FetchRequestFilters,
|
||||
FileSource,
|
||||
EmailSource,
|
||||
UploadResult,
|
||||
PendingAmbiguity,
|
||||
AmbiguityCandidate,
|
||||
ResolveAmbiguityPayload,
|
||||
SSEEvent,
|
||||
} from "./fetch-requests.models";
|
||||
export { RETRY_MAX } from "./fetch-requests.models";
|
||||
export {
|
||||
useFetchRequestsList,
|
||||
useFetchRequest,
|
||||
useCreateFetchRequest,
|
||||
useUpdateFetchRequest,
|
||||
useDeleteFetchRequest,
|
||||
useUploadFile,
|
||||
useFetchRequestAmbiguities,
|
||||
useResolveAmbiguity,
|
||||
} from "./useFetchRequests";
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useResourceByName } from "../../../react-openapi";
|
||||
import { api } from "../../../react-openapi/api/client";
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||
import type { ResolveAmbiguityPayload } from "./fetch-requests.models";
|
||||
|
||||
export function useFetchRequestsList(params?: {
|
||||
status?: string;
|
||||
@@ -21,6 +22,11 @@ export function useCreateFetchRequest() {
|
||||
return useCreate();
|
||||
}
|
||||
|
||||
export function useUpdateFetchRequest() {
|
||||
const { usePatch } = useResourceByName("fetch-requests");
|
||||
return usePatch();
|
||||
}
|
||||
|
||||
export function useDeleteFetchRequest() {
|
||||
const { useDelete } = useResourceByName("fetch-requests");
|
||||
return useDelete();
|
||||
@@ -41,3 +47,44 @@ export function useUploadFile() {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useFetchRequestAmbiguities(fetchRequestId: string) {
|
||||
return useQuery({
|
||||
queryKey: ["fetch-requests", fetchRequestId, "ambiguities"],
|
||||
queryFn: async () => {
|
||||
const res = await api.get(
|
||||
`/fetch-requests/${fetchRequestId}/ambiguities`
|
||||
);
|
||||
return res.data;
|
||||
},
|
||||
enabled: !!fetchRequestId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useResolveAmbiguity() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async ({
|
||||
ambiguityId,
|
||||
payload,
|
||||
}: {
|
||||
ambiguityId: string;
|
||||
payload: ResolveAmbiguityPayload;
|
||||
}) => {
|
||||
const res = await api.post(
|
||||
`/ambiguities/${ambiguityId}/resolve`,
|
||||
payload
|
||||
);
|
||||
return res.data;
|
||||
},
|
||||
onSuccess: (data: any) => {
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: ["fetch-requests", data.fetch_request, "ambiguities"],
|
||||
});
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: ["fetch-requests", "detail", data.fetch_request],
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user