fix(fetch-requests): update custom pages for schema changes and use PATCH for retry

- Rename format→bank in CREATE_FIELDS and TypeScript models
- Add pipeline field to create form and FetchRequestCreate model
- Export PipelineType from index barrel
- Use new patch() method for retry instead of generic update()
This commit is contained in:
2026-07-31 00:15:06 +05:30
parent cebde4c18b
commit c705325855
4 changed files with 17 additions and 14 deletions

View File

@@ -7,7 +7,7 @@ import { useNavigate } from "react-router-dom";
import { useAppContext, useResource, ListCellRenderer, FormFieldRenderer, getApi, applyDisplayFormat } from "../../react-openapi"; import { useAppContext, useResource, ListCellRenderer, FormFieldRenderer, getApi, applyDisplayFormat } from "../../react-openapi";
import type { FieldConfig } from "../../react-openapi"; import type { FieldConfig } from "../../react-openapi";
const CREATE_FIELDS = ["account", "format", "start_date", "end_date", "source"]; const CREATE_FIELDS = ["account", "bank", "pipeline", "start_date", "end_date", "source"];
function FetchRequestList() { function FetchRequestList() {
const navigate = useNavigate(); const navigate = useNavigate();

View File

@@ -9,7 +9,6 @@ import {
Chip, Chip,
CircularProgress, CircularProgress,
Alert, Alert,
IconButton,
Snackbar, Snackbar,
} from "@mui/material"; } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import ArrowBackIcon from "@mui/icons-material/ArrowBack";
@@ -20,8 +19,8 @@ import WarningAmberIcon from "@mui/icons-material/WarningAmber";
import PlayArrowIcon from "@mui/icons-material/PlayArrow"; import PlayArrowIcon from "@mui/icons-material/PlayArrow";
import RemoveCircleOutlineIcon from "@mui/icons-material/RemoveCircleOutline"; import RemoveCircleOutlineIcon from "@mui/icons-material/RemoveCircleOutline";
import FiberManualRecordIcon from "@mui/icons-material/FiberManualRecord"; import FiberManualRecordIcon from "@mui/icons-material/FiberManualRecord";
import { useResource, useItemSse, DetailFieldRenderer, applyDisplayFormat } from "../../react-openapi"; import { useResource, useItemSse, DetailFieldRenderer } from "../../react-openapi";
import { useQuery, useMutation } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { RETRY_MAX, formatApiError } from "../features/fetch-requests"; import { RETRY_MAX, formatApiError } from "../features/fetch-requests";
import type { FetchRequestStatus, SSEEvent, ProgressMessage } from "../features/fetch-requests"; import type { FetchRequestStatus, SSEEvent, ProgressMessage } from "../features/fetch-requests";
import { PipelineStepper } from "./components/PipelineStepper"; import { PipelineStepper } from "./components/PipelineStepper";
@@ -71,9 +70,10 @@ function sseIcon(status: SSEEvent["status"]) {
export default function FetchRequestDetail() { export default function FetchRequestDetail() {
const { id } = useParams<{ id: string }>(); const { id } = useParams<{ id: string }>();
const navigate = useNavigate(); const navigate = useNavigate();
const { get, update, resource } = useResource("fetch-requests"); const { get, patch, resource } = useResource("fetch-requests");
const [stepStats, setStepStats] = useState<Record<string, number>>({}); const [stepStats, setStepStats] = useState<Record<string, number>>({});
const [liveParsedCount, setLiveParsedCount] = useState<number | undefined>(undefined); const [liveParsedCount, setLiveParsedCount] = useState<number | undefined>(undefined);
const [retrying, setRetrying] = useState(false);
const [failNotif, setFailNotif] = useState<string | null>(null); const [failNotif, setFailNotif] = useState<string | null>(null);
const feedRef = useRef<HTMLDivElement>(null); const feedRef = useRef<HTMLDivElement>(null);
@@ -83,10 +83,6 @@ export default function FetchRequestDetail() {
enabled: !!id, enabled: !!id,
}); });
const updateMutation = useMutation({
mutationFn: ({ id: rid, data }: { id: string; data: any }) => update(rid, data),
});
const sseUrl = id ? `/fetch-requests/${id}/events` : null; const sseUrl = id ? `/fetch-requests/${id}/events` : null;
const { connected: sseConnected, events: sseEvents } = useItemSse(sseUrl, { const { connected: sseConnected, events: sseEvents } = useItemSse(sseUrl, {
onEvent: (parsed: SSEEvent) => { onEvent: (parsed: SSEEvent) => {
@@ -150,12 +146,15 @@ export default function FetchRequestDetail() {
}, [sseEvents]); }, [sseEvents]);
const handleRetry = async () => { const handleRetry = async () => {
if (!id) return; if (!id || !patch || retrying) return;
setRetrying(true);
try { try {
await updateMutation.mutateAsync({ id, data: { status: "pending" } }); await patch(id, { status: "pending" });
refetchRequest(); refetchRequest();
} catch (err: any) { } catch (err: any) {
setFailNotif(formatApiError(err)); setFailNotif(formatApiError(err));
} finally {
setRetrying(false);
} }
}; };
@@ -232,7 +231,7 @@ export default function FetchRequestDetail() {
size="small" size="small"
startIcon={<ReplayIcon />} startIcon={<ReplayIcon />}
onClick={handleRetry} onClick={handleRetry}
disabled={updateMutation.isPending} disabled={retrying}
> >
Retry Retry
</Button> </Button>

View File

@@ -9,7 +9,7 @@ export type FetchRequestStatus =
export interface FileSource { export interface FileSource {
path: string; path: string;
format: string; bank: string;
raw_lines?: string[]; raw_lines?: string[];
txn_blocks?: Record<string, any>; txn_blocks?: Record<string, any>;
txn_dicts?: Record<string, any>[]; txn_dicts?: Record<string, any>[];
@@ -18,7 +18,7 @@ export interface FileSource {
} }
export interface EmailSource { export interface EmailSource {
format: string; bank: string;
from_email?: string; from_email?: string;
subject?: string; subject?: string;
raw_terms?: string[]; raw_terms?: string[];
@@ -26,9 +26,12 @@ export interface EmailSource {
txn_dicts_count?: number; txn_dicts_count?: number;
} }
export type PipelineType = "heuristic" | "llm" | "llama_parser";
export interface FetchRequestCreate { export interface FetchRequestCreate {
source: FileSource | EmailSource; source: FileSource | EmailSource;
account_name: string; account_name: string;
pipeline?: PipelineType;
payor_username?: string; payor_username?: string;
start_date?: string; start_date?: string;
end_date?: string; end_date?: string;

View File

@@ -14,6 +14,7 @@ export type {
SSEEventStep, SSEEventStep,
SSEEventStatus, SSEEventStatus,
ProgressMessage, ProgressMessage,
PipelineType,
} from "./fetch-requests.models"; } from "./fetch-requests.models";
export { RETRY_MAX, formatApiError } from "./fetch-requests.models"; export { RETRY_MAX, formatApiError } from "./fetch-requests.models";
export { export {