Files
multica/server/internal/issueposition/position.go
2026-05-28 14:20:20 +08:00

27 lines
760 B
Go

package issueposition
import (
"context"
"fmt"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgtype"
)
type queryRower interface {
QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
}
// NextTopPosition returns a position that sorts before every existing issue in
// the workspace/status column when manual sorting orders by position ASC.
func NextTopPosition(ctx context.Context, q queryRower, workspaceID pgtype.UUID, status string) (float64, error) {
var minPos float64
if err := q.QueryRow(ctx,
`SELECT COALESCE(MIN(position), 0) FROM issue WHERE workspace_id = $1 AND status = $2`,
workspaceID, status,
).Scan(&minPos); err != nil {
return 0, fmt.Errorf("query min issue position: %w", err)
}
return minPos - 1, nil
}