package dashboard import ( "context" "encoding/json" "errors" "github.com/jackc/pgx/v5" ) func (r Repository) GetVersion(ctx context.Context, id, actor string, number int) (Version, error) { var v Version var raw []byte err := r.Pool.QueryRow(ctx, `SELECT v.id,v.dashboard_id,v.version_number,v.schema_version,v.document,v.change_summary,COALESCE(v.created_by::text,''),v.created_at FROM dashboard_versions v JOIN dashboards d ON d.id=v.dashboard_id WHERE v.dashboard_id=$1 AND v.version_number=$2 AND (d.scope IN ('shared','system') OR d.owner_user_id=(SELECT id FROM users WHERE external_subject=$3))`, id, number, actor).Scan(&v.ID, &v.DashboardID, &v.Number, &v.SchemaVersion, &raw, &v.ChangeSummary, &v.CreatedBy, &v.CreatedAt) if errors.Is(err, pgx.ErrNoRows) { return Version{}, ErrNotFound } if err != nil { return Version{}, err } if err := json.Unmarshal(raw, &v.Document); err != nil { return Version{}, errors.New("invalid stored dashboard document") } return v, nil }