mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-18 15:40:12 +01:00
🧑💻 Add kernel API /api/av/batchSetAttributeViewBlockAttrs https://github.com/siyuan-note/siyuan/issues/15310
This commit is contained in:
parent
4c2c4b4a72
commit
d7e2d5903a
3 changed files with 68 additions and 9 deletions
|
|
@ -735,3 +735,24 @@ func setAttributeViewBlockAttr(c *gin.Context) {
|
||||||
|
|
||||||
model.ReloadAttrView(avID)
|
model.ReloadAttrView(avID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func batchSetAttributeViewBlockAttrs(c *gin.Context) {
|
||||||
|
ret := gulu.Ret.NewResult()
|
||||||
|
defer c.JSON(http.StatusOK, ret)
|
||||||
|
|
||||||
|
arg, ok := util.JsonArg(c, ret)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
avID := arg["avID"].(string)
|
||||||
|
values := arg["values"].([]interface{})
|
||||||
|
err := model.BatchUpdateAttributeViewCells(nil, avID, values)
|
||||||
|
if err != nil {
|
||||||
|
ret.Code = -1
|
||||||
|
ret.Msg = err.Error()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
model.ReloadAttrView(avID)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -436,6 +436,7 @@ func ServeAPI(ginServer *gin.Engine) {
|
||||||
ginServer.Handle("POST", "/api/av/renderSnapshotAttributeView", model.CheckAuth, model.CheckAdminRole, renderSnapshotAttributeView)
|
ginServer.Handle("POST", "/api/av/renderSnapshotAttributeView", model.CheckAuth, model.CheckAdminRole, renderSnapshotAttributeView)
|
||||||
ginServer.Handle("POST", "/api/av/getAttributeViewKeys", model.CheckAuth, getAttributeViewKeys)
|
ginServer.Handle("POST", "/api/av/getAttributeViewKeys", model.CheckAuth, getAttributeViewKeys)
|
||||||
ginServer.Handle("POST", "/api/av/setAttributeViewBlockAttr", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setAttributeViewBlockAttr)
|
ginServer.Handle("POST", "/api/av/setAttributeViewBlockAttr", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setAttributeViewBlockAttr)
|
||||||
|
ginServer.Handle("POST", "/api/av/batchSetAttributeViewBlockAttrs", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, batchSetAttributeViewBlockAttrs)
|
||||||
ginServer.Handle("POST", "/api/av/searchAttributeView", model.CheckAuth, model.CheckReadonly, searchAttributeView)
|
ginServer.Handle("POST", "/api/av/searchAttributeView", model.CheckAuth, model.CheckReadonly, searchAttributeView)
|
||||||
ginServer.Handle("POST", "/api/av/getAttributeView", model.CheckAuth, model.CheckReadonly, getAttributeView)
|
ginServer.Handle("POST", "/api/av/getAttributeView", model.CheckAuth, model.CheckReadonly, getAttributeView)
|
||||||
ginServer.Handle("POST", "/api/av/searchAttributeViewRelationKey", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, searchAttributeViewRelationKey)
|
ginServer.Handle("POST", "/api/av/searchAttributeViewRelationKey", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, searchAttributeViewRelationKey)
|
||||||
|
|
|
||||||
|
|
@ -3955,12 +3955,58 @@ func updateAttributeViewCell(operation *Operation, tx *Transaction) (err error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BatchUpdateAttributeViewCells(tx *Transaction, avID string, values []interface{}) (err error) {
|
||||||
|
attrView, err := av.ParseAttributeView(avID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, value := range values {
|
||||||
|
v := value.(map[string]interface{})
|
||||||
|
keyID := v["keyID"].(string)
|
||||||
|
rowID := v["rowID"].(string)
|
||||||
|
valueData := v["value"]
|
||||||
|
_, err = updateAttributeViewValue(tx, attrView, keyID, rowID, valueData)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = av.SaveAttributeView(attrView); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
relatedAvIDs := av.GetSrcAvIDs(avID)
|
||||||
|
for _, relatedAvID := range relatedAvIDs {
|
||||||
|
ReloadAttrView(relatedAvID)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID string, valueData interface{}) (val *av.Value, err error) {
|
func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID string, valueData interface{}) (val *av.Value, err error) {
|
||||||
attrView, err := av.ParseAttributeView(avID)
|
attrView, err := av.ParseAttributeView(avID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val, err = updateAttributeViewValue(tx, attrView, keyID, rowID, valueData)
|
||||||
|
if nil != err {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = av.SaveAttributeView(attrView); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
relatedAvIDs := av.GetSrcAvIDs(avID)
|
||||||
|
for _, relatedAvID := range relatedAvIDs {
|
||||||
|
ReloadAttrView(relatedAvID)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateAttributeViewValue(tx *Transaction, attrView *av.AttributeView, keyID, rowID string, valueData interface{}) (val *av.Value, err error) {
|
||||||
|
avID := attrView.ID
|
||||||
var blockVal *av.Value
|
var blockVal *av.Value
|
||||||
for _, kv := range attrView.KeyValues {
|
for _, kv := range attrView.KeyValues {
|
||||||
if av.KeyTypeBlock == kv.Key.Type {
|
if av.KeyTypeBlock == kv.Key.Type {
|
||||||
|
|
@ -4203,15 +4249,6 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID string, valueDa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
relatedAvIDs := av.GetSrcAvIDs(avID)
|
|
||||||
for _, relatedAvID := range relatedAvIDs {
|
|
||||||
ReloadAttrView(relatedAvID)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = av.SaveAttributeView(attrView); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue