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"
"errors"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/services/sqlstore/session"
"github.com/grafana/grafana/pkg/services/star"
)
type sqlxStore struct {
sess *session.SessionDB
db db.DB
}
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,
}
_, 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 {
return err
}

View File

@ -11,6 +11,6 @@ func TestIntegrationSQLxUserStarsDataAccess(t *testing.T) {
t.Skip("skipping integration test")
}
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{
store: &sqlxStore{
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)
if s.db.GetDialect().IsUniqueConstraintViolation(err) {
return nil
}
return err
})
}