Files
multica/server/pkg/db/generated/issue_dependency.sql.go
Jiayuan 473ec17c65 feat(activity): add issue relation activities to timeline
When issue dependencies are created or removed, both the source and
target issues now receive activity entries in their timeline. This
enables bi-directional visibility — e.g., issue A's timeline shows
"added relation: blocks MUL-456" while issue B shows "added relation:
blocked by MUL-123".

Changes:
- Add CRUD SQL queries and handler endpoints for issue_dependency
- Add issue_dependency:created/removed event types
- Add activity listener that records activities on both issues
- Render relation activities in the frontend with Link2 icon
2026-04-03 23:51:36 +08:00

92 lines
2.3 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: issue_dependency.sql
package db
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const createIssueDependency = `-- name: CreateIssueDependency :one
INSERT INTO issue_dependency (issue_id, depends_on_issue_id, type)
VALUES ($1, $2, $3)
RETURNING id, issue_id, depends_on_issue_id, type
`
type CreateIssueDependencyParams struct {
IssueID pgtype.UUID `json:"issue_id"`
DependsOnIssueID pgtype.UUID `json:"depends_on_issue_id"`
Type string `json:"type"`
}
func (q *Queries) CreateIssueDependency(ctx context.Context, arg CreateIssueDependencyParams) (IssueDependency, error) {
row := q.db.QueryRow(ctx, createIssueDependency, arg.IssueID, arg.DependsOnIssueID, arg.Type)
var i IssueDependency
err := row.Scan(
&i.ID,
&i.IssueID,
&i.DependsOnIssueID,
&i.Type,
)
return i, err
}
const deleteIssueDependency = `-- name: DeleteIssueDependency :exec
DELETE FROM issue_dependency WHERE id = $1
`
func (q *Queries) DeleteIssueDependency(ctx context.Context, id pgtype.UUID) error {
_, err := q.db.Exec(ctx, deleteIssueDependency, id)
return err
}
const getIssueDependency = `-- name: GetIssueDependency :one
SELECT id, issue_id, depends_on_issue_id, type FROM issue_dependency WHERE id = $1
`
func (q *Queries) GetIssueDependency(ctx context.Context, id pgtype.UUID) (IssueDependency, error) {
row := q.db.QueryRow(ctx, getIssueDependency, id)
var i IssueDependency
err := row.Scan(
&i.ID,
&i.IssueID,
&i.DependsOnIssueID,
&i.Type,
)
return i, err
}
const listIssueDependencies = `-- name: ListIssueDependencies :many
SELECT id, issue_id, depends_on_issue_id, type FROM issue_dependency
WHERE issue_id = $1 OR depends_on_issue_id = $1
`
func (q *Queries) ListIssueDependencies(ctx context.Context, issueID pgtype.UUID) ([]IssueDependency, error) {
rows, err := q.db.Query(ctx, listIssueDependencies, issueID)
if err != nil {
return nil, err
}
defer rows.Close()
items := []IssueDependency{}
for rows.Next() {
var i IssueDependency
if err := rows.Scan(
&i.ID,
&i.IssueID,
&i.DependsOnIssueID,
&i.Type,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}