You've already forked agentic-coding-workflow
feat(project): domain types and sqlc queries for project/requirement/issue
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
-- name: CreateIssue :one
|
||||
INSERT INTO issues (id, project_id, requirement_id, number, title, description, assignee_id, created_by)
|
||||
VALUES (
|
||||
$1, $2, $3,
|
||||
(SELECT COALESCE(MAX(number), 0) + 1 FROM issues WHERE project_id = $2),
|
||||
$4, $5, $6, $7
|
||||
)
|
||||
RETURNING id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at;
|
||||
|
||||
-- name: GetIssueByNumber :one
|
||||
SELECT id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at
|
||||
FROM issues
|
||||
WHERE project_id = $1 AND number = $2;
|
||||
|
||||
-- name: ListIssues :many
|
||||
SELECT id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at
|
||||
FROM issues
|
||||
WHERE project_id = $1
|
||||
AND (sqlc.narg('status')::text IS NULL OR status = sqlc.narg('status'))
|
||||
AND (
|
||||
sqlc.narg('requirement_filter')::text IS NULL
|
||||
OR (sqlc.narg('requirement_filter') = 'none' AND requirement_id IS NULL)
|
||||
OR (sqlc.narg('requirement_filter') = 'id' AND requirement_id = sqlc.narg('requirement_id'))
|
||||
)
|
||||
AND (sqlc.narg('assignee_id')::uuid IS NULL OR assignee_id = sqlc.narg('assignee_id'))
|
||||
ORDER BY number DESC;
|
||||
|
||||
-- name: ListIssuesByRequirement :many
|
||||
SELECT id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at
|
||||
FROM issues
|
||||
WHERE requirement_id = $1
|
||||
ORDER BY number DESC;
|
||||
|
||||
-- name: UpdateIssueCore :one
|
||||
UPDATE issues
|
||||
SET title = $2,
|
||||
description = $3,
|
||||
requirement_id = $4,
|
||||
updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at;
|
||||
|
||||
-- name: UpdateIssueAssignee :one
|
||||
UPDATE issues
|
||||
SET assignee_id = $2, updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING id, project_id, requirement_id, number, title, description, status,
|
||||
assignee_id, created_by, closed_at, created_at, updated_at;
|
||||
|
||||
-- name: CloseIssue :exec
|
||||
UPDATE issues SET status = 'closed', closed_at = now(), updated_at = now()
|
||||
WHERE id = $1 AND status = 'open';
|
||||
|
||||
-- name: ReopenIssue :exec
|
||||
UPDATE issues SET status = 'open', closed_at = NULL, updated_at = now()
|
||||
WHERE id = $1 AND status = 'closed';
|
||||
@@ -0,0 +1,35 @@
|
||||
-- name: CreateProject :one
|
||||
INSERT INTO projects (id, slug, name, description, visibility, owner_id)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
RETURNING id, slug, name, description, visibility, owner_id, archived_at, created_at, updated_at;
|
||||
|
||||
-- name: GetProjectBySlug :one
|
||||
SELECT id, slug, name, description, visibility, owner_id, archived_at, created_at, updated_at
|
||||
FROM projects WHERE slug = $1;
|
||||
|
||||
-- name: GetProjectByID :one
|
||||
SELECT id, slug, name, description, visibility, owner_id, archived_at, created_at, updated_at
|
||||
FROM projects WHERE id = $1;
|
||||
|
||||
-- name: ListProjects :many
|
||||
SELECT id, slug, name, description, visibility, owner_id, archived_at, created_at, updated_at
|
||||
FROM projects
|
||||
WHERE (sqlc.arg('include_archived')::bool OR archived_at IS NULL)
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: UpdateProject :one
|
||||
UPDATE projects
|
||||
SET name = $2,
|
||||
description = $3,
|
||||
visibility = $4,
|
||||
updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING id, slug, name, description, visibility, owner_id, archived_at, created_at, updated_at;
|
||||
|
||||
-- name: ArchiveProject :exec
|
||||
UPDATE projects SET archived_at = now(), updated_at = now()
|
||||
WHERE id = $1 AND archived_at IS NULL;
|
||||
|
||||
-- name: UnarchiveProject :exec
|
||||
UPDATE projects SET archived_at = NULL, updated_at = now()
|
||||
WHERE id = $1 AND archived_at IS NOT NULL;
|
||||
@@ -0,0 +1,56 @@
|
||||
-- name: CreateRequirement :one
|
||||
INSERT INTO requirements (id, project_id, number, title, description, owner_id)
|
||||
VALUES (
|
||||
$1, $2,
|
||||
(SELECT COALESCE(MAX(number), 0) + 1 FROM requirements WHERE project_id = $2),
|
||||
$3, $4, $5
|
||||
)
|
||||
RETURNING id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at;
|
||||
|
||||
-- name: GetRequirementByNumber :one
|
||||
SELECT id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at
|
||||
FROM requirements
|
||||
WHERE project_id = $1 AND number = $2;
|
||||
|
||||
-- name: GetRequirementByID :one
|
||||
SELECT id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at
|
||||
FROM requirements WHERE id = $1;
|
||||
|
||||
-- name: ListRequirements :many
|
||||
SELECT id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at
|
||||
FROM requirements
|
||||
WHERE project_id = $1
|
||||
AND (sqlc.narg('phase')::text IS NULL OR phase = sqlc.narg('phase'))
|
||||
AND (sqlc.narg('status')::text IS NULL OR status = sqlc.narg('status'))
|
||||
ORDER BY number DESC;
|
||||
|
||||
-- name: UpdateRequirement :one
|
||||
UPDATE requirements
|
||||
SET title = $2,
|
||||
description = $3,
|
||||
owner_id = $4,
|
||||
updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at;
|
||||
|
||||
-- name: UpdateRequirementPhase :one
|
||||
UPDATE requirements
|
||||
SET phase = $2, updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING id, project_id, number, title, description, phase, status, owner_id,
|
||||
closed_at, created_at, updated_at;
|
||||
|
||||
-- name: CloseRequirement :exec
|
||||
UPDATE requirements
|
||||
SET status = 'closed', closed_at = now(), updated_at = now()
|
||||
WHERE id = $1 AND status = 'open';
|
||||
|
||||
-- name: ReopenRequirement :exec
|
||||
UPDATE requirements
|
||||
SET status = 'open', closed_at = NULL, updated_at = now()
|
||||
WHERE id = $1 AND status = 'closed';
|
||||
Reference in New Issue
Block a user