Query history: Create API to star and unstar query in query history (#45077)
* Query history: Add starring and unstarring API * Return dto with starred info when commenting * Add documentation for starring and unstarring of query * Return dto when starring/unstarring * Update documentation * Update deleting with unstarring * Check queryUID length in queryhistory * Fix linting issues * Update docs/sources/http_api/query_history.md Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com> * Update docs/sources/http_api/query_history.md Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com> Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
This commit is contained in:
co-authored by
Piotr Jamróz
parent
3cfbbbdbf2
commit
a3a852be81
@@ -43,13 +43,24 @@ func (s QueryHistoryService) createQuery(ctx context.Context, user *models.Signe
|
||||
|
||||
func (s QueryHistoryService) deleteQuery(ctx context.Context, user *models.SignedInUser, UID string) (int64, error) {
|
||||
var queryID int64
|
||||
err := s.SQLStore.WithDbSession(ctx, func(session *sqlstore.DBSession) error {
|
||||
err := s.SQLStore.WithTransactionalDbSession(ctx, func(session *sqlstore.DBSession) error {
|
||||
// Try to unstar the query first
|
||||
_, err := session.Table("query_history_star").Where("user_id = ? AND query_uid = ?", user.UserId, UID).Delete(QueryHistoryStar{})
|
||||
if err != nil {
|
||||
s.log.Error("Failed to unstar query while deleting it from query history", "query", UID, "user", user.UserId, "error", err)
|
||||
}
|
||||
|
||||
// Then delete it
|
||||
id, err := session.Where("org_id = ? AND created_by = ? AND uid = ?", user.OrgId, user.UserId, UID).Delete(QueryHistory{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if id == 0 {
|
||||
return ErrQueryNotFound
|
||||
}
|
||||
|
||||
queryID = id
|
||||
return err
|
||||
return nil
|
||||
})
|
||||
|
||||
return queryID, err
|
||||
@@ -57,6 +68,8 @@ func (s QueryHistoryService) deleteQuery(ctx context.Context, user *models.Signe
|
||||
|
||||
func (s QueryHistoryService) patchQueryComment(ctx context.Context, user *models.SignedInUser, UID string, cmd PatchQueryCommentInQueryHistoryCommand) (QueryHistoryDTO, error) {
|
||||
var queryHistory QueryHistory
|
||||
var isStarred bool
|
||||
|
||||
err := s.SQLStore.WithTransactionalDbSession(ctx, func(session *sqlstore.DBSession) error {
|
||||
exists, err := session.Where("org_id = ? AND created_by = ? AND uid = ?", user.OrgId, user.UserId, UID).Get(&queryHistory)
|
||||
if err != nil {
|
||||
@@ -72,6 +85,11 @@ func (s QueryHistoryService) patchQueryComment(ctx context.Context, user *models
|
||||
return err
|
||||
}
|
||||
|
||||
starred, err := session.Table("query_history_star").Where("user_id = ? AND query_uid = ?", user.UserId, UID).Exist()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
isStarred = starred
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -86,7 +104,98 @@ func (s QueryHistoryService) patchQueryComment(ctx context.Context, user *models
|
||||
CreatedAt: queryHistory.CreatedAt,
|
||||
Comment: queryHistory.Comment,
|
||||
Queries: queryHistory.Queries,
|
||||
Starred: false,
|
||||
Starred: isStarred,
|
||||
}
|
||||
|
||||
return dto, nil
|
||||
}
|
||||
|
||||
func (s QueryHistoryService) starQuery(ctx context.Context, user *models.SignedInUser, UID string) (QueryHistoryDTO, error) {
|
||||
var queryHistory QueryHistory
|
||||
var isStarred bool
|
||||
|
||||
err := s.SQLStore.WithTransactionalDbSession(ctx, func(session *sqlstore.DBSession) error {
|
||||
// Check if query exists as we want to star only existing queries
|
||||
exists, err := session.Table("query_history").Where("org_id = ? AND created_by = ? AND uid = ?", user.OrgId, user.UserId, UID).Get(&queryHistory)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !exists {
|
||||
return ErrQueryNotFound
|
||||
}
|
||||
|
||||
// If query exists then star it
|
||||
queryHistoryStar := QueryHistoryStar{
|
||||
UserID: user.UserId,
|
||||
QueryUID: UID,
|
||||
}
|
||||
|
||||
_, err = session.Insert(&queryHistoryStar)
|
||||
if err != nil {
|
||||
if s.SQLStore.Dialect.IsUniqueConstraintViolation(err) {
|
||||
return ErrQueryAlreadyStarred
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
isStarred = true
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return QueryHistoryDTO{}, err
|
||||
}
|
||||
|
||||
dto := QueryHistoryDTO{
|
||||
UID: queryHistory.UID,
|
||||
DatasourceUID: queryHistory.DatasourceUID,
|
||||
CreatedBy: queryHistory.CreatedBy,
|
||||
CreatedAt: queryHistory.CreatedAt,
|
||||
Comment: queryHistory.Comment,
|
||||
Queries: queryHistory.Queries,
|
||||
Starred: isStarred,
|
||||
}
|
||||
|
||||
return dto, nil
|
||||
}
|
||||
|
||||
func (s QueryHistoryService) unstarQuery(ctx context.Context, user *models.SignedInUser, UID string) (QueryHistoryDTO, error) {
|
||||
var queryHistory QueryHistory
|
||||
var isStarred bool
|
||||
|
||||
err := s.SQLStore.WithTransactionalDbSession(ctx, func(session *sqlstore.DBSession) error {
|
||||
exists, err := session.Table("query_history").Where("org_id = ? AND created_by = ? AND uid = ?", user.OrgId, user.UserId, UID).Get(&queryHistory)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !exists {
|
||||
return ErrQueryNotFound
|
||||
}
|
||||
|
||||
id, err := session.Table("query_history_star").Where("user_id = ? AND query_uid = ?", user.UserId, UID).Delete(QueryHistoryStar{})
|
||||
if id == 0 {
|
||||
return ErrStarredQueryNotFound
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
isStarred = false
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return QueryHistoryDTO{}, err
|
||||
}
|
||||
|
||||
dto := QueryHistoryDTO{
|
||||
UID: queryHistory.UID,
|
||||
DatasourceUID: queryHistory.DatasourceUID,
|
||||
CreatedBy: queryHistory.CreatedBy,
|
||||
CreatedAt: queryHistory.CreatedAt,
|
||||
Comment: queryHistory.Comment,
|
||||
Queries: queryHistory.Queries,
|
||||
Starred: isStarred,
|
||||
}
|
||||
|
||||
return dto, nil
|
||||
|
||||
Reference in New Issue
Block a user