This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user