Files
agentic-coding-workflow/internal/changerequest/queries/change_requests.sql
T
2026-06-22 08:55:57 +08:00

64 lines
1.7 KiB
SQL

-- name: NextChangeRequestNumber :one
-- Per-project monotonic number; FOR UPDATE not needed because the
-- max(number)+1 INSERT runs inside the same tx, but we lock existing project
-- rows to serialize concurrent creates within a project.
SELECT COALESCE(MAX(number), 0) + 1 FROM change_requests WHERE project_id = $1 FOR UPDATE;
-- name: CreateChangeRequest :one
INSERT INTO change_requests (
id, project_id, workspace_id, requirement_id, issue_id, number,
title, description, source_branch, target_branch,
state, review_verdict, ci_state, provider, external_id, external_url,
merge_commit_sha, created_by
) VALUES (
$1, $2, $3, $4, $5, $6,
$7, $8, $9, $10,
'open', 'pending', $11, $12, $13, $14,
'', $15
)
RETURNING *;
-- name: GetChangeRequestByID :one
SELECT * FROM change_requests WHERE id = $1;
-- name: GetChangeRequestByNumber :one
SELECT cr.* FROM change_requests cr
JOIN projects p ON p.id = cr.project_id
WHERE p.slug = $1 AND cr.number = $2;
-- name: ListChangeRequestsByWorkspace :many
SELECT * FROM change_requests
WHERE workspace_id = $1
ORDER BY number DESC;
-- name: ListChangeRequestsByProject :many
SELECT * FROM change_requests
WHERE project_id = $1
ORDER BY number DESC;
-- name: UpdateChangeRequestReview :one
UPDATE change_requests
SET review_verdict = $2,
reviewed_by = $3,
reviewed_at = now(),
updated_at = now()
WHERE id = $1
RETURNING *;
-- name: UpdateChangeRequestState :one
UPDATE change_requests
SET state = $2,
merge_commit_sha = $3,
merged_at = $4,
updated_at = now()
WHERE id = $1
RETURNING *;
-- name: UpdateChangeRequestCI :one
UPDATE change_requests
SET ci_state = $2,
state = $3,
updated_at = now()
WHERE id = $1
RETURNING *;