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

Method SortBefore

service/ai-balance/iml.go:55–102  ·  view source on GitHub ↗
(ctx context.Context, originID string, targetID string)

Source from the content-addressed store, hash-verified

53}
54
55func (i *imlBalanceService) SortBefore(ctx context.Context, originID string, targetID string) ([]*Balance, error) {
56 originKey, err := i.store.GetByUUID(ctx, originID)
57 if err != nil {
58 return nil, fmt.Errorf("get key error: %v,id is %s", err, originID)
59 }
60 targetKey, err := i.store.GetByUUID(ctx, targetID)
61 if err != nil {
62 return nil, fmt.Errorf("get key error: %v,id is %s", err, targetID)
63 }
64 originKeySort, targetKeySort := originKey.Priority, targetKey.Priority
65 // 初始化顺序,假设原始Key在目标Key之后,中间的key往后移动,原始Key移动到`targetKeySort`位置
66 originKey.Priority = targetKeySort
67 fn := func(priority int) int {
68 return priority + 1
69 }
70 sql := "priority < ? and priority >= ?"
71 if originKeySort < targetKeySort {
72 // 如果原始Key在目标Key之前,中间的key往前移动,原始Key移动到`targetKeySort - 1`位置
73 sql = "priority > ? and priority < ?"
74 originKey.Priority = targetKeySort - 1
75 fn = func(priority int) int {
76 return priority - 1
77 }
78 }
79 list, err := i.store.ListQuery(ctx, sql, []interface{}{originKeySort, targetKeySort}, "priority asc")
80 if err != nil {
81 return nil, err
82 }
83 result := make([]*Balance, 0, len(list)+1)
84 err = i.transaction.Transaction(ctx, func(txCtx context.Context) error {
85 for _, l := range list {
86 l.Priority = fn(l.Priority)
87 _, err := i.store.Update(ctx, l)
88 if err != nil {
89 return err
90 }
91 result = append(result, FromEntity(l))
92 }
93 _, err = i.store.Update(ctx, originKey)
94 return err
95 })
96 if err != nil {
97 return nil, err
98 }
99 result = append(result, FromEntity(originKey))
100 sort.Slice(list, func(i, j int) bool { return list[i].Priority < list[j].Priority })
101 return result, nil
102}
103
104func (i *imlBalanceService) SortAfter(ctx context.Context, originID string, targetID string) ([]*Balance, error) {
105 originKey, err := i.store.GetByUUID(ctx, originID)

Callers

nothing calls this directly

Calls 2

FromEntityFunction · 0.70
UpdateMethod · 0.65

Tested by

no test coverage detected