ListSettings returns a list of settings.
(ctx context.Context, find *FindSettingMessage)
| 257 | |
| 258 | // ListSettings returns a list of settings. |
| 259 | func (s *Store) ListSettings(ctx context.Context, find *FindSettingMessage) ([]*SettingMessage, error) { |
| 260 | q := qb.Q().Space(` |
| 261 | SELECT |
| 262 | name, |
| 263 | workspace, |
| 264 | value |
| 265 | FROM setting |
| 266 | WHERE workspace = ? |
| 267 | `, find.Workspace) |
| 268 | |
| 269 | if find.Name != nil { |
| 270 | q.And("name = ?", find.Name.String()) |
| 271 | } |
| 272 | query, args, err := q.ToSQL() |
| 273 | if err != nil { |
| 274 | return nil, errors.Wrapf(err, "failed to build sql") |
| 275 | } |
| 276 | rows, err := s.GetDB().QueryContext(ctx, query, args...) |
| 277 | if err != nil { |
| 278 | return nil, err |
| 279 | } |
| 280 | defer rows.Close() |
| 281 | |
| 282 | var settingMessages []*SettingMessage |
| 283 | for rows.Next() { |
| 284 | var settingMessage SettingMessage |
| 285 | var nameString string |
| 286 | var valueString string |
| 287 | if err := rows.Scan( |
| 288 | &nameString, |
| 289 | &settingMessage.Workspace, |
| 290 | &valueString, |
| 291 | ); err != nil { |
| 292 | return nil, err |
| 293 | } |
| 294 | value, ok := storepb.SettingName_value[nameString] |
| 295 | if !ok { |
| 296 | return nil, errors.Errorf("invalid setting name string: %s", nameString) |
| 297 | } |
| 298 | settingMessage.Name = storepb.SettingName(value) |
| 299 | |
| 300 | msg, err := getSettingMessage(settingMessage.Name) |
| 301 | if err != nil { |
| 302 | return nil, err |
| 303 | } |
| 304 | if err := common.ProtojsonUnmarshaler.Unmarshal([]byte(valueString), msg); err != nil { |
| 305 | return nil, err |
| 306 | } |
| 307 | settingMessage.Value = msg |
| 308 | |
| 309 | settingMessages = append(settingMessages, &settingMessage) |
| 310 | } |
| 311 | if err := rows.Err(); err != nil { |
| 312 | return nil, err |
| 313 | } |
| 314 | |
| 315 | for _, setting := range settingMessages { |
| 316 | s.settingCache.Add(getSettingCacheKey(setting.Workspace, setting.Name), setting) |
no test coverage detected