req() in the frontend api client called res.json() on every non-204 2xx response, which throws SyntaxError on the empty body returned by POST .../customs (201) and similar endpoints. Read the response body once as text and parse it only when non-empty, so any bodyless 2xx resolves instead of rejecting. Added web/src/api/client.test.ts coverage that exercises the real req() against a stubbed fetch for both the 201 (addCustom) and 204 (removeCustom) empty-body cases. Also brought internal/store/queries/domains.sql's DeleteDomainsNotInZones query back in sync with the hand-maintained internal/store/db/domains.sql.go (RETURNING * -> explicit column list) since sqlc isn't installed in this environment and the two files are kept aligned by hand. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Yr8frsaxBgab1Aa7yfPuU
45 lines
1.5 KiB
SQL
45 lines
1.5 KiB
SQL
-- name: CreateDomain :one
|
|
INSERT INTO domains (id, project_id, provider_account_id, zone_name, zone_id, template_id)
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
RETURNING *;
|
|
|
|
-- name: ImportDomain :one
|
|
INSERT INTO domains (id, project_id, provider_account_id, zone_name, zone_id, template_id)
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
ON CONFLICT (project_id, zone_id) DO NOTHING
|
|
RETURNING *;
|
|
|
|
-- name: UpdateDomainTemplate :one
|
|
UPDATE domains SET template_id = $3 WHERE id = $1 AND project_id = $2
|
|
RETURNING *;
|
|
|
|
-- name: GetDomain :one
|
|
SELECT * FROM domains WHERE id = $1 AND project_id = $2;
|
|
|
|
-- name: ListDomains :many
|
|
SELECT * FROM domains WHERE project_id = $1 ORDER BY created_at;
|
|
|
|
-- name: DeleteDomain :exec
|
|
DELETE FROM domains WHERE id = $1 AND project_id = $2;
|
|
|
|
-- name: LoadDomainFull :one
|
|
SELECT d.zone_id, d.zone_name, a.provider, a.secret_enc, t.doc
|
|
FROM domains d
|
|
JOIN provider_accounts a ON a.id = d.provider_account_id
|
|
LEFT JOIN templates t ON t.id = d.template_id
|
|
WHERE d.id = $1 AND d.project_id = $2;
|
|
|
|
-- name: GetDomainStatus :one
|
|
SELECT last_check_status FROM domains WHERE id = $1;
|
|
|
|
-- name: SetDomainStatus :exec
|
|
UPDATE domains SET last_check_status = $2 WHERE id = $1 AND project_id = $3;
|
|
|
|
-- name: CountDriftDomains :one
|
|
SELECT count(*) FROM domains WHERE last_check_status = 'drift';
|
|
|
|
-- name: DeleteDomainsNotInZones :many
|
|
DELETE FROM domains
|
|
WHERE project_id = $1 AND provider_account_id = $2 AND zone_id <> ALL($3::text[])
|
|
RETURNING id, project_id, provider_account_id, zone_name, zone_id, template_id, created_at, last_check_status;
|