the useWaveObject() setter now writes back to the DB. make metadata setting generic

This commit is contained in:
sawka
2024-05-28 15:41:03 -07:00
parent f184723354
commit 609f2ec85c
8 changed files with 467 additions and 314 deletions
+37 -3
View File
@@ -180,13 +180,47 @@ func (svc *ObjectService) CloseTab(uiContext wstore.UIContext, tabId string) (an
return updatesRtn(ctx, nil)
}
func (svc *ObjectService) UpdateBlockMeta(uiContext wstore.UIContext, blockId string, meta map[string]any) (any, error) {
func (svc *ObjectService) UpdateObjectMeta(uiContext wstore.UIContext, orefStr string, meta map[string]any) (any, error) {
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
defer cancelFn()
ctx = wstore.ContextWithUpdates(ctx)
err := wstore.UpdateBlockMeta(ctx, blockId, meta)
oref, err := parseORef(orefStr)
if err != nil {
return nil, fmt.Errorf("error merging block meta: %w", err)
return nil, fmt.Errorf("error parsing object reference: %w", err)
}
err = wstore.UpdateObjectMeta(ctx, *oref, meta)
if err != nil {
return nil, fmt.Errorf("error updateing %q meta: %w", orefStr, err)
}
return updatesRtn(ctx, nil)
}
func (svc *ObjectService) UpdateObject(uiContext wstore.UIContext, objData map[string]any, returnUpdates bool) (any, error) {
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
defer cancelFn()
ctx = wstore.ContextWithUpdates(ctx)
oref, err := waveobj.ORefFromMap(objData)
if err != nil {
return nil, fmt.Errorf("objData is not a valid object, requires otype and oid: %w", err)
}
found, err := wstore.DBExistsORef(ctx, *oref)
if err != nil {
return nil, fmt.Errorf("error getting object: %w", err)
}
if !found {
return nil, fmt.Errorf("object not found: %s", oref)
}
newObj, err := waveobj.FromJsonMap(objData)
if err != nil {
return nil, fmt.Errorf("error converting data to valid wave object: %w", err)
}
err = wstore.DBUpdate(ctx, newObj)
if err != nil {
return nil, fmt.Errorf("error updating object: %w", err)
}
if returnUpdates {
return updatesRtn(ctx, nil)
}
return nil, nil
}