feat(workspace): sqlc queries for workspace/worktree/credential

This commit is contained in:
2026-05-02 07:07:33 +08:00
parent e5800ef5dc
commit 08845f92d7
9 changed files with 838 additions and 0 deletions
@@ -0,0 +1,13 @@
-- name: UpsertCredential :one
INSERT INTO git_credentials (id, workspace_id, kind, username, encrypted_secret, fingerprint)
VALUES ($1,$2,$3,$4,$5,$6)
ON CONFLICT (workspace_id) DO UPDATE
SET kind = EXCLUDED.kind,
username = EXCLUDED.username,
encrypted_secret = EXCLUDED.encrypted_secret,
fingerprint = EXCLUDED.fingerprint,
updated_at = now()
RETURNING *;
-- name: GetCredentialByWorkspace :one
SELECT * FROM git_credentials WHERE workspace_id = $1;
+43
View File
@@ -0,0 +1,43 @@
-- name: CreateWorkspace :one
INSERT INTO workspaces (
id, project_id, slug, name, description,
git_remote_url, default_branch, main_path, sync_status
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
RETURNING *;
-- name: GetWorkspaceByID :one
SELECT * FROM workspaces WHERE id = $1;
-- name: GetWorkspaceBySlug :one
SELECT w.* FROM workspaces w
JOIN projects p ON p.id = w.project_id
WHERE p.slug = $1 AND w.slug = $2;
-- name: ListWorkspacesByProject :many
SELECT * FROM workspaces WHERE project_id = $1
ORDER BY created_at DESC;
-- name: UpdateWorkspaceCore :one
UPDATE workspaces
SET name = $2, description = $3, default_branch = $4, updated_at = now()
WHERE id = $1
RETURNING *;
-- name: UpdateWorkspaceSyncStatus :one
UPDATE workspaces
SET sync_status = $2,
last_synced_at = $3,
last_sync_error = $4,
updated_at = now()
WHERE id = $1
RETURNING *;
-- name: DeleteWorkspace :exec
DELETE FROM workspaces WHERE id = $1;
-- name: ResetStuckSyncStatuses :exec
UPDATE workspaces
SET sync_status = 'error',
last_sync_error = 'process_restarted_during_' || sync_status,
updated_at = now()
WHERE sync_status IN ('cloning', 'syncing');
+39
View File
@@ -0,0 +1,39 @@
-- name: CreateWorktree :one
INSERT INTO workspace_worktrees (
id, workspace_id, branch, path, status, active_holder, acquired_at
) VALUES ($1,$2,$3,$4,$5,$6,$7)
RETURNING *;
-- name: GetWorktreeByID :one
SELECT * FROM workspace_worktrees WHERE id = $1;
-- name: GetWorktreeByBranchForUpdate :one
SELECT * FROM workspace_worktrees
WHERE workspace_id = $1 AND branch = $2
FOR UPDATE;
-- name: ListWorktreesByWorkspace :many
SELECT * FROM workspace_worktrees
WHERE workspace_id = $1
ORDER BY created_at DESC;
-- name: SetWorktreeActive :one
UPDATE workspace_worktrees
SET status = 'active', active_holder = $2, acquired_at = now(), last_used_at = now()
WHERE id = $1
RETURNING *;
-- name: SetWorktreeIdle :one
UPDATE workspace_worktrees
SET status = 'idle', active_holder = NULL, acquired_at = NULL, last_used_at = now()
WHERE id = $1
RETURNING *;
-- name: SetWorktreePruning :one
UPDATE workspace_worktrees
SET status = 'pruning', last_used_at = now()
WHERE id = $1
RETURNING *;
-- name: DeleteWorktree :exec
DELETE FROM workspace_worktrees WHERE id = $1;
@@ -0,0 +1,76 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: credentials.sql
package workspacesqlc
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const getCredentialByWorkspace = `-- name: GetCredentialByWorkspace :one
SELECT id, workspace_id, kind, username, encrypted_secret, fingerprint, created_at, updated_at FROM git_credentials WHERE workspace_id = $1
`
func (q *Queries) GetCredentialByWorkspace(ctx context.Context, workspaceID pgtype.UUID) (GitCredential, error) {
row := q.db.QueryRow(ctx, getCredentialByWorkspace, workspaceID)
var i GitCredential
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Kind,
&i.Username,
&i.EncryptedSecret,
&i.Fingerprint,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const upsertCredential = `-- name: UpsertCredential :one
INSERT INTO git_credentials (id, workspace_id, kind, username, encrypted_secret, fingerprint)
VALUES ($1,$2,$3,$4,$5,$6)
ON CONFLICT (workspace_id) DO UPDATE
SET kind = EXCLUDED.kind,
username = EXCLUDED.username,
encrypted_secret = EXCLUDED.encrypted_secret,
fingerprint = EXCLUDED.fingerprint,
updated_at = now()
RETURNING id, workspace_id, kind, username, encrypted_secret, fingerprint, created_at, updated_at
`
type UpsertCredentialParams struct {
ID pgtype.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Kind string `json:"kind"`
Username *string `json:"username"`
EncryptedSecret []byte `json:"encrypted_secret"`
Fingerprint *string `json:"fingerprint"`
}
func (q *Queries) UpsertCredential(ctx context.Context, arg UpsertCredentialParams) (GitCredential, error) {
row := q.db.QueryRow(ctx, upsertCredential,
arg.ID,
arg.WorkspaceID,
arg.Kind,
arg.Username,
arg.EncryptedSecret,
arg.Fingerprint,
)
var i GitCredential
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Kind,
&i.Username,
&i.EncryptedSecret,
&i.Fingerprint,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
+32
View File
@@ -0,0 +1,32 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
package workspacesqlc
import (
"context"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
type DBTX interface {
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
QueryRow(context.Context, string, ...interface{}) pgx.Row
}
func New(db DBTX) *Queries {
return &Queries{db: db}
}
type Queries struct {
db DBTX
}
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
return &Queries{
db: tx,
}
}
+136
View File
@@ -0,0 +1,136 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
package workspacesqlc
import (
"net/netip"
"github.com/jackc/pgx/v5/pgtype"
)
type AuditLog struct {
ID int64 `json:"id"`
UserID pgtype.UUID `json:"user_id"`
Action string `json:"action"`
TargetType *string `json:"target_type"`
TargetID *string `json:"target_id"`
Ip *netip.Addr `json:"ip"`
Metadata []byte `json:"metadata"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type GitCredential struct {
ID pgtype.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Kind string `json:"kind"`
Username *string `json:"username"`
EncryptedSecret []byte `json:"encrypted_secret"`
Fingerprint *string `json:"fingerprint"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type Issue struct {
ID pgtype.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
RequirementID pgtype.UUID `json:"requirement_id"`
Number int32 `json:"number"`
Title string `json:"title"`
Description string `json:"description"`
Status string `json:"status"`
AssigneeID pgtype.UUID `json:"assignee_id"`
CreatedBy pgtype.UUID `json:"created_by"`
ClosedAt pgtype.Timestamptz `json:"closed_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type Notification struct {
ID pgtype.UUID `json:"id"`
UserID pgtype.UUID `json:"user_id"`
Topic string `json:"topic"`
Severity string `json:"severity"`
Title string `json:"title"`
Body string `json:"body"`
Link *string `json:"link"`
Metadata []byte `json:"metadata"`
ReadAt pgtype.Timestamptz `json:"read_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type Project struct {
ID pgtype.UUID `json:"id"`
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
Visibility string `json:"visibility"`
OwnerID pgtype.UUID `json:"owner_id"`
ArchivedAt pgtype.Timestamptz `json:"archived_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type Requirement struct {
ID pgtype.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
Number int32 `json:"number"`
Title string `json:"title"`
Description string `json:"description"`
Phase string `json:"phase"`
Status string `json:"status"`
OwnerID pgtype.UUID `json:"owner_id"`
ClosedAt pgtype.Timestamptz `json:"closed_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type User struct {
ID pgtype.UUID `json:"id"`
Email string `json:"email"`
PasswordHash string `json:"password_hash"`
DisplayName string `json:"display_name"`
IsAdmin bool `json:"is_admin"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type UserSession struct {
ID pgtype.UUID `json:"id"`
UserID pgtype.UUID `json:"user_id"`
TokenHash []byte `json:"token_hash"`
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
LastSeenAt pgtype.Timestamptz `json:"last_seen_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type Workspace struct {
ID pgtype.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
GitRemoteUrl string `json:"git_remote_url"`
DefaultBranch string `json:"default_branch"`
MainPath string `json:"main_path"`
SyncStatus string `json:"sync_status"`
LastSyncedAt pgtype.Timestamptz `json:"last_synced_at"`
LastSyncError *string `json:"last_sync_error"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type WorkspaceWorktree struct {
ID pgtype.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Branch string `json:"branch"`
Path string `json:"path"`
Status string `json:"status"`
ActiveHolder *string `json:"active_holder"`
AcquiredAt pgtype.Timestamptz `json:"acquired_at"`
LastUsedAt pgtype.Timestamptz `json:"last_used_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
+264
View File
@@ -0,0 +1,264 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: workspaces.sql
package workspacesqlc
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const createWorkspace = `-- name: CreateWorkspace :one
INSERT INTO workspaces (
id, project_id, slug, name, description,
git_remote_url, default_branch, main_path, sync_status
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
RETURNING id, project_id, slug, name, description, git_remote_url, default_branch, main_path, sync_status, last_synced_at, last_sync_error, created_at, updated_at
`
type CreateWorkspaceParams struct {
ID pgtype.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
GitRemoteUrl string `json:"git_remote_url"`
DefaultBranch string `json:"default_branch"`
MainPath string `json:"main_path"`
SyncStatus string `json:"sync_status"`
}
func (q *Queries) CreateWorkspace(ctx context.Context, arg CreateWorkspaceParams) (Workspace, error) {
row := q.db.QueryRow(ctx, createWorkspace,
arg.ID,
arg.ProjectID,
arg.Slug,
arg.Name,
arg.Description,
arg.GitRemoteUrl,
arg.DefaultBranch,
arg.MainPath,
arg.SyncStatus,
)
var i Workspace
err := row.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const deleteWorkspace = `-- name: DeleteWorkspace :exec
DELETE FROM workspaces WHERE id = $1
`
func (q *Queries) DeleteWorkspace(ctx context.Context, id pgtype.UUID) error {
_, err := q.db.Exec(ctx, deleteWorkspace, id)
return err
}
const getWorkspaceByID = `-- name: GetWorkspaceByID :one
SELECT id, project_id, slug, name, description, git_remote_url, default_branch, main_path, sync_status, last_synced_at, last_sync_error, created_at, updated_at FROM workspaces WHERE id = $1
`
func (q *Queries) GetWorkspaceByID(ctx context.Context, id pgtype.UUID) (Workspace, error) {
row := q.db.QueryRow(ctx, getWorkspaceByID, id)
var i Workspace
err := row.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const getWorkspaceBySlug = `-- name: GetWorkspaceBySlug :one
SELECT w.id, w.project_id, w.slug, w.name, w.description, w.git_remote_url, w.default_branch, w.main_path, w.sync_status, w.last_synced_at, w.last_sync_error, w.created_at, w.updated_at FROM workspaces w
JOIN projects p ON p.id = w.project_id
WHERE p.slug = $1 AND w.slug = $2
`
type GetWorkspaceBySlugParams struct {
Slug string `json:"slug"`
Slug_2 string `json:"slug_2"`
}
func (q *Queries) GetWorkspaceBySlug(ctx context.Context, arg GetWorkspaceBySlugParams) (Workspace, error) {
row := q.db.QueryRow(ctx, getWorkspaceBySlug, arg.Slug, arg.Slug_2)
var i Workspace
err := row.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const listWorkspacesByProject = `-- name: ListWorkspacesByProject :many
SELECT id, project_id, slug, name, description, git_remote_url, default_branch, main_path, sync_status, last_synced_at, last_sync_error, created_at, updated_at FROM workspaces WHERE project_id = $1
ORDER BY created_at DESC
`
func (q *Queries) ListWorkspacesByProject(ctx context.Context, projectID pgtype.UUID) ([]Workspace, error) {
rows, err := q.db.Query(ctx, listWorkspacesByProject, projectID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []Workspace
for rows.Next() {
var i Workspace
if err := rows.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const resetStuckSyncStatuses = `-- name: ResetStuckSyncStatuses :exec
UPDATE workspaces
SET sync_status = 'error',
last_sync_error = 'process_restarted_during_' || sync_status,
updated_at = now()
WHERE sync_status IN ('cloning', 'syncing')
`
func (q *Queries) ResetStuckSyncStatuses(ctx context.Context) error {
_, err := q.db.Exec(ctx, resetStuckSyncStatuses)
return err
}
const updateWorkspaceCore = `-- name: UpdateWorkspaceCore :one
UPDATE workspaces
SET name = $2, description = $3, default_branch = $4, updated_at = now()
WHERE id = $1
RETURNING id, project_id, slug, name, description, git_remote_url, default_branch, main_path, sync_status, last_synced_at, last_sync_error, created_at, updated_at
`
type UpdateWorkspaceCoreParams struct {
ID pgtype.UUID `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
DefaultBranch string `json:"default_branch"`
}
func (q *Queries) UpdateWorkspaceCore(ctx context.Context, arg UpdateWorkspaceCoreParams) (Workspace, error) {
row := q.db.QueryRow(ctx, updateWorkspaceCore,
arg.ID,
arg.Name,
arg.Description,
arg.DefaultBranch,
)
var i Workspace
err := row.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const updateWorkspaceSyncStatus = `-- name: UpdateWorkspaceSyncStatus :one
UPDATE workspaces
SET sync_status = $2,
last_synced_at = $3,
last_sync_error = $4,
updated_at = now()
WHERE id = $1
RETURNING id, project_id, slug, name, description, git_remote_url, default_branch, main_path, sync_status, last_synced_at, last_sync_error, created_at, updated_at
`
type UpdateWorkspaceSyncStatusParams struct {
ID pgtype.UUID `json:"id"`
SyncStatus string `json:"sync_status"`
LastSyncedAt pgtype.Timestamptz `json:"last_synced_at"`
LastSyncError *string `json:"last_sync_error"`
}
func (q *Queries) UpdateWorkspaceSyncStatus(ctx context.Context, arg UpdateWorkspaceSyncStatusParams) (Workspace, error) {
row := q.db.QueryRow(ctx, updateWorkspaceSyncStatus,
arg.ID,
arg.SyncStatus,
arg.LastSyncedAt,
arg.LastSyncError,
)
var i Workspace
err := row.Scan(
&i.ID,
&i.ProjectID,
&i.Slug,
&i.Name,
&i.Description,
&i.GitRemoteUrl,
&i.DefaultBranch,
&i.MainPath,
&i.SyncStatus,
&i.LastSyncedAt,
&i.LastSyncError,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
+225
View File
@@ -0,0 +1,225 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: worktrees.sql
package workspacesqlc
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const createWorktree = `-- name: CreateWorktree :one
INSERT INTO workspace_worktrees (
id, workspace_id, branch, path, status, active_holder, acquired_at
) VALUES ($1,$2,$3,$4,$5,$6,$7)
RETURNING id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at
`
type CreateWorktreeParams struct {
ID pgtype.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Branch string `json:"branch"`
Path string `json:"path"`
Status string `json:"status"`
ActiveHolder *string `json:"active_holder"`
AcquiredAt pgtype.Timestamptz `json:"acquired_at"`
}
func (q *Queries) CreateWorktree(ctx context.Context, arg CreateWorktreeParams) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, createWorktree,
arg.ID,
arg.WorkspaceID,
arg.Branch,
arg.Path,
arg.Status,
arg.ActiveHolder,
arg.AcquiredAt,
)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
const deleteWorktree = `-- name: DeleteWorktree :exec
DELETE FROM workspace_worktrees WHERE id = $1
`
func (q *Queries) DeleteWorktree(ctx context.Context, id pgtype.UUID) error {
_, err := q.db.Exec(ctx, deleteWorktree, id)
return err
}
const getWorktreeByBranchForUpdate = `-- name: GetWorktreeByBranchForUpdate :one
SELECT id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at FROM workspace_worktrees
WHERE workspace_id = $1 AND branch = $2
FOR UPDATE
`
type GetWorktreeByBranchForUpdateParams struct {
WorkspaceID pgtype.UUID `json:"workspace_id"`
Branch string `json:"branch"`
}
func (q *Queries) GetWorktreeByBranchForUpdate(ctx context.Context, arg GetWorktreeByBranchForUpdateParams) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, getWorktreeByBranchForUpdate, arg.WorkspaceID, arg.Branch)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
const getWorktreeByID = `-- name: GetWorktreeByID :one
SELECT id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at FROM workspace_worktrees WHERE id = $1
`
func (q *Queries) GetWorktreeByID(ctx context.Context, id pgtype.UUID) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, getWorktreeByID, id)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
const listWorktreesByWorkspace = `-- name: ListWorktreesByWorkspace :many
SELECT id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at FROM workspace_worktrees
WHERE workspace_id = $1
ORDER BY created_at DESC
`
func (q *Queries) ListWorktreesByWorkspace(ctx context.Context, workspaceID pgtype.UUID) ([]WorkspaceWorktree, error) {
rows, err := q.db.Query(ctx, listWorktreesByWorkspace, workspaceID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []WorkspaceWorktree
for rows.Next() {
var i WorkspaceWorktree
if err := rows.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const setWorktreeActive = `-- name: SetWorktreeActive :one
UPDATE workspace_worktrees
SET status = 'active', active_holder = $2, acquired_at = now(), last_used_at = now()
WHERE id = $1
RETURNING id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at
`
type SetWorktreeActiveParams struct {
ID pgtype.UUID `json:"id"`
ActiveHolder *string `json:"active_holder"`
}
func (q *Queries) SetWorktreeActive(ctx context.Context, arg SetWorktreeActiveParams) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, setWorktreeActive, arg.ID, arg.ActiveHolder)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
const setWorktreeIdle = `-- name: SetWorktreeIdle :one
UPDATE workspace_worktrees
SET status = 'idle', active_holder = NULL, acquired_at = NULL, last_used_at = now()
WHERE id = $1
RETURNING id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at
`
func (q *Queries) SetWorktreeIdle(ctx context.Context, id pgtype.UUID) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, setWorktreeIdle, id)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
const setWorktreePruning = `-- name: SetWorktreePruning :one
UPDATE workspace_worktrees
SET status = 'pruning', last_used_at = now()
WHERE id = $1
RETURNING id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at
`
func (q *Queries) SetWorktreePruning(ctx context.Context, id pgtype.UUID) (WorkspaceWorktree, error) {
row := q.db.QueryRow(ctx, setWorktreePruning, id)
var i WorkspaceWorktree
err := row.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
)
return i, err
}
+10
View File
@@ -40,3 +40,13 @@ sql:
sql_package: pgx/v5 sql_package: pgx/v5
emit_pointers_for_null_types: true emit_pointers_for_null_types: true
emit_json_tags: true emit_json_tags: true
- engine: postgresql
queries: internal/workspace/queries
schema: migrations
gen:
go:
package: workspacesqlc
out: internal/workspace/sqlc
sql_package: pgx/v5
emit_pointers_for_null_types: true
emit_json_tags: true