in api/internal/core/store/store.go [288:323]
func (s *GenericStore) Update(ctx context.Context, obj interface{}, createIfNotExist bool) (interface{}, error) {
if err := s.ingestValidate(obj); err != nil {
return nil, err
}
key := s.opt.KeyFunc(obj)
if key == "" {
return nil, fmt.Errorf("key is required")
}
storedObj, ok := s.cache.Load(key)
if !ok {
if createIfNotExist {
return s.Create(ctx, obj)
}
log.Warnf("key: %s is not found", key)
return nil, fmt.Errorf("key: %s is not found", key)
}
if setter, ok := obj.(entity.GetBaseInfo); ok {
storedGetter := storedObj.(entity.GetBaseInfo)
storedInfo := storedGetter.GetBaseInfo()
info := setter.GetBaseInfo()
info.Updating(storedInfo)
}
bs, err := json.Marshal(obj)
if err != nil {
log.Errorf("json marshal failed: %s", err)
return nil, fmt.Errorf("json marshal failed: %s", err)
}
if err := s.Stg.Update(ctx, s.GetObjStorageKey(obj), string(bs)); err != nil {
return nil, err
}
return obj, nil
}