Express API server on :3100 exposing all Coolify operations: - CRUD for apps, env vars, servers - Full upsert pipeline (create/update + env + route + deploy) - Drift detection, Traefik route management via SSH - Scalar API docs at /reference, OpenAPI 3.1 spec UI: New Coolify page with app cards, deploy/delete actions, env var expansion. Sidebar nav + React Query hooks + fetch client. Both UI and LLM/CLI use the same HTTP endpoints. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { coolifyApi } from '@/lib/api';
|
|
import { queryKeys } from '@/lib/query-keys';
|
|
|
|
export function useCoolifyApps() {
|
|
return useQuery({
|
|
queryKey: queryKeys.coolify.apps,
|
|
queryFn: () => coolifyApi.listApps(),
|
|
staleTime: 30_000,
|
|
});
|
|
}
|
|
|
|
export function useCoolifyServers() {
|
|
return useQuery({
|
|
queryKey: queryKeys.coolify.servers,
|
|
queryFn: () => coolifyApi.listServers(),
|
|
staleTime: 60_000,
|
|
});
|
|
}
|
|
|
|
export function useCoolifyNextPort() {
|
|
return useQuery({
|
|
queryKey: queryKeys.coolify.nextPort,
|
|
queryFn: () => coolifyApi.getNextPort(),
|
|
staleTime: 30_000,
|
|
});
|
|
}
|
|
|
|
export function useCoolifyDeploy() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (uuid) => coolifyApi.deploy(uuid),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: queryKeys.coolify.apps }),
|
|
});
|
|
}
|
|
|
|
export function useCoolifyUpsert() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ projectPath, appName }) => coolifyApi.upsert(projectPath, appName),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: queryKeys.coolify.apps });
|
|
qc.invalidateQueries({ queryKey: queryKeys.coolify.nextPort });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useCoolifyDelete() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (uuid) => coolifyApi.deleteApp(uuid),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: queryKeys.coolify.apps }),
|
|
});
|
|
}
|