MCPcopy Create free account
hub / github.com/APIParkLab/APIPark / SaveDefine

Method SaveDefine

service/plugin-cluster/iml.go:24–83  ·  view source on GitHub ↗
(ctx context.Context, defines []*plugin_model.Define)

Source from the content-addressed store, hash-verified

22}
23
24func (i *imlPluginService) SaveDefine(ctx context.Context, defines []*plugin_model.Define) error {
25 return i.defineStore.Transaction(ctx, func(txCtx context.Context) error {
26 ov, err := i.defineStore.List(ctx, map[string]interface{}{})
27 if err != nil {
28 return err
29 }
30
31 ovm := utils.SliceToMap(ov, func(v *plugin.Define) string {
32 return v.Name
33 })
34
35 vsInsert := make([]*plugin.Define, 0, len(defines))
36 vsUpdate := make([]*plugin.Define, 0, len(defines))
37 for sort, dv := range defines {
38 ev := &plugin.Define{
39 Id: 0,
40 Extend: dv.Extend,
41 Name: dv.Name,
42 Cname: dv.Cname,
43 Description: dv.Desc,
44 Kind: dv.Kind,
45 Status: dv.Status,
46 Render: dv.Render,
47 Config: dv.Config,
48 Sort: sort,
49 UpdateTime: time.Now(),
50 }
51 if oev, ok := ovm[dv.Name]; ok {
52 ev.Id = oev.Id
53
54 delete(ovm, dv.Name)
55 vsUpdate = append(vsUpdate, ev)
56 } else {
57 vsInsert = append(vsInsert, ev)
58 }
59 }
60 // 删除多余的
61 _, err = i.defineStore.Delete(ctx, utils.MapToSlice(ovm, func(n string, v *plugin.Define) int64 {
62 return v.Id
63 })...)
64 if err != nil {
65 return err
66 }
67 if len(vsInsert) > 0 {
68 err = i.defineStore.Insert(ctx, vsInsert...)
69 if err != nil {
70 return err
71 }
72 }
73
74 for _, v := range vsUpdate {
75 _, err := i.defineStore.Update(ctx, v)
76 if err != nil {
77 return err
78 }
79 }
80
81 return nil

Callers

nothing calls this directly

Calls 3

ListMethod · 0.65
DeleteMethod · 0.65
UpdateMethod · 0.65

Tested by

no test coverage detected