API: Fix status code when starring already starred dashboard (#63478)

Fixes #63133
This commit is contained in:
Sanghyuk Chris Lee 2023-05-11 04:37:36 -04:00 committed by GitHub
parent c3a0b75357
commit b10b290213
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 1 deletions

View File

@ -5,12 +5,14 @@ import (
"database/sql" "database/sql"
"errors" "errors"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/services/sqlstore/session" "github.com/grafana/grafana/pkg/services/sqlstore/session"
"github.com/grafana/grafana/pkg/services/star" "github.com/grafana/grafana/pkg/services/star"
) )
type sqlxStore struct { type sqlxStore struct {
sess *session.SessionDB sess *session.SessionDB
db db.DB
} }
func (s *sqlxStore) Get(ctx context.Context, query *star.IsStarredByUserQuery) (bool, error) { func (s *sqlxStore) Get(ctx context.Context, query *star.IsStarredByUserQuery) (bool, error) {
@ -31,6 +33,9 @@ func (s *sqlxStore) Insert(ctx context.Context, cmd *star.StarDashboardCommand)
DashboardID: cmd.DashboardID, DashboardID: cmd.DashboardID,
} }
_, err := s.sess.NamedExec(ctx, `INSERT INTO star (user_id, dashboard_id) VALUES (:user_id, :dashboard_id)`, entity) _, err := s.sess.NamedExec(ctx, `INSERT INTO star (user_id, dashboard_id) VALUES (:user_id, :dashboard_id)`, entity)
if s.db.GetDialect().IsUniqueConstraintViolation(err) {
return nil
}
if err != nil { if err != nil {
return err return err
} }

View File

@ -11,6 +11,6 @@ func TestIntegrationSQLxUserStarsDataAccess(t *testing.T) {
t.Skip("skipping integration test") t.Skip("skipping integration test")
} }
testIntegrationUserStarsDataAccess(t, func(ss db.DB) store { testIntegrationUserStarsDataAccess(t, func(ss db.DB) store {
return &sqlxStore{sess: ss.GetSqlxSession()} return &sqlxStore{sess: ss.GetSqlxSession(), db: ss}
}) })
} }

View File

@ -18,6 +18,7 @@ func ProvideService(db db.DB, cfg *setting.Cfg) star.Service {
return &Service{ return &Service{
store: &sqlxStore{ store: &sqlxStore{
sess: db.GetSqlxSession(), sess: db.GetSqlxSession(),
db: db,
}, },
} }
} }

View File

@ -35,6 +35,10 @@ func (s *sqlStore) Insert(ctx context.Context, cmd *star.StarDashboardCommand) e
} }
_, err := sess.Insert(&entity) _, err := sess.Insert(&entity)
if s.db.GetDialect().IsUniqueConstraintViolation(err) {
return nil
}
return err return err
}) })
} }