feat: F023 signal-to-match pipeline & shadow market decision flow
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
||||
import { signalPipelineService } from '../services/signalPipelineService'
|
||||
import type { GateType } from '../domain/signalPipeline'
|
||||
|
||||
const STALE_PIPELINE = 15_000
|
||||
|
||||
export function useSignalPipelineState(signalId: string | null) {
|
||||
return useQuery({
|
||||
queryKey: ['signal-pipeline', signalId],
|
||||
queryFn: () => signalPipelineService.getPipelineState(signalId!),
|
||||
enabled: signalId !== null,
|
||||
staleTime: STALE_PIPELINE,
|
||||
select: (res) => res.data ?? null,
|
||||
})
|
||||
}
|
||||
|
||||
export function useSignalAuditTrail(signalId: string | null) {
|
||||
return useQuery({
|
||||
queryKey: ['signal-audit-trail', signalId],
|
||||
queryFn: () => signalPipelineService.getAuditTrail(signalId!),
|
||||
enabled: signalId !== null,
|
||||
staleTime: STALE_PIPELINE,
|
||||
select: (res) => res.data ?? [],
|
||||
})
|
||||
}
|
||||
|
||||
export function useEvaluateGate() {
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: ({ signalId, gateType }: { signalId: string; gateType: GateType }) =>
|
||||
signalPipelineService.evaluateGate(signalId, gateType),
|
||||
onSuccess: (_data, { signalId }) => {
|
||||
queryClient.invalidateQueries({ queryKey: ['signal-pipeline', signalId] })
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
export function usePublishToFutureAvailability() {
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (signalId: string) => signalPipelineService.publishToFutureAvailability(signalId),
|
||||
onSuccess: (_data, signalId) => {
|
||||
queryClient.invalidateQueries({ queryKey: ['signal-pipeline', signalId] })
|
||||
queryClient.invalidateQueries({ queryKey: ['signal-audit-trail', signalId] })
|
||||
queryClient.invalidateQueries({ queryKey: ['market-signals'] })
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user