Add Coolify REST API server with Scalar docs and UI integration
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>
This commit is contained in:
54
app/renderer/src/hooks/use-coolify.js
Normal file
54
app/renderer/src/hooks/use-coolify.js
Normal file
@@ -0,0 +1,54 @@
|
||||
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 }),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user