mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 14:56:51 +00:00
fix: synchronize cronjob deletion server-side (#11)
This commit is contained in:
parent
792aa697b5
commit
fd06a4bb07
4 changed files with 256 additions and 16 deletions
|
|
@ -68,14 +68,13 @@ export function CronjobCard({ job }: Props) {
|
|||
|
||||
async function remove() {
|
||||
try {
|
||||
await deleteMut.mutateAsync(job.id);
|
||||
toast.success("Automação excluída.");
|
||||
setConfirmDelete(false);
|
||||
|
||||
const { error: syncError } = await syncAgentRuntime(job.agent_instance_id, "cronjobs");
|
||||
if (syncError) {
|
||||
toast.warning("Automação removida, mas o runtime do agente não sincronizou.");
|
||||
const result = await deleteMut.mutateAsync(job.id);
|
||||
if (result.runtime_sync_warning) {
|
||||
toast.warning("Automação removida do painel; limpeza final do runtime pendente.");
|
||||
} else {
|
||||
toast.success("Automação excluída.");
|
||||
}
|
||||
setConfirmDelete(false);
|
||||
} catch (e) {
|
||||
toast.error(e instanceof Error ? e.message : "Erro ao excluir.");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||
import { supabase } from "@/integrations/supabase/client";
|
||||
import { useAuth } from "@/hooks/use-auth";
|
||||
import { invokeFunction } from "@/lib/invoke-function";
|
||||
|
||||
export interface ScheduledJob {
|
||||
id: string;
|
||||
|
|
@ -49,6 +50,7 @@ export function useCronjobs() {
|
|||
.from("scheduled_jobs")
|
||||
.select("*")
|
||||
.eq("user_id", user!.id)
|
||||
.neq("status", "archived")
|
||||
.order("created_at", { ascending: false });
|
||||
if (error) throw error;
|
||||
return (data ?? []).map(normalizeJob);
|
||||
|
|
@ -67,6 +69,7 @@ export function useCronjob(id: string | undefined) {
|
|||
.select("*")
|
||||
.eq("id", id!)
|
||||
.eq("user_id", user!.id)
|
||||
.neq("status", "archived")
|
||||
.maybeSingle();
|
||||
if (error) throw error;
|
||||
return data ? normalizeJob(data) : null;
|
||||
|
|
@ -135,7 +138,7 @@ export function useCreateCronjob() {
|
|||
if (error) throw error;
|
||||
return normalizeJob(data);
|
||||
},
|
||||
onSuccess: () => {
|
||||
onSettled: () => {
|
||||
qc.invalidateQueries({ queryKey: ["cronjobs"] });
|
||||
qc.invalidateQueries({ queryKey: ["user-jobs-limits"] });
|
||||
},
|
||||
|
|
@ -178,8 +181,17 @@ export function useDeleteCronjob() {
|
|||
const qc = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async (id: string) => {
|
||||
const { error } = await supabase.from("scheduled_jobs").delete().eq("id", id);
|
||||
if (error) throw error;
|
||||
const { data, error } = await invokeFunction<{
|
||||
success: boolean;
|
||||
job_id: string;
|
||||
agent_instance_id: string;
|
||||
archived: boolean;
|
||||
deleted: boolean;
|
||||
runtime_sync_warning: string | null;
|
||||
}>("delete-cronjob", { job_id: id });
|
||||
if (error) throw new Error(error.message);
|
||||
if (!data?.success) throw new Error("Erro ao excluir automação.");
|
||||
return data;
|
||||
},
|
||||
onSuccess: () => {
|
||||
qc.invalidateQueries({ queryKey: ["cronjobs"] });
|
||||
|
|
|
|||
|
|
@ -88,12 +88,11 @@ function CronjobDetailPage() {
|
|||
|
||||
async function remove() {
|
||||
try {
|
||||
await deleteMut.mutateAsync(job!.id);
|
||||
toast.success("Excluída.");
|
||||
|
||||
const { error: syncError } = await syncAgentRuntime(job!.agent_instance_id, "cronjobs");
|
||||
if (syncError) {
|
||||
toast.warning("Automação removida, mas o runtime do agente não sincronizou.");
|
||||
const result = await deleteMut.mutateAsync(job!.id);
|
||||
if (result.runtime_sync_warning) {
|
||||
toast.warning("Excluída do painel; limpeza final do runtime pendente.");
|
||||
} else {
|
||||
toast.success("Excluída.");
|
||||
}
|
||||
|
||||
navigate({ to: "/painel/cronjobs" });
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue