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

Method SortBefore

service/ai-key/iml.go:111–158  ·  view source on GitHub ↗
(ctx context.Context, provider string, originID string, targetID string)

Source from the content-addressed store, hash-verified

109}
110
111func (i *imlAIKeyService) SortBefore(ctx context.Context, provider string, originID string, targetID string) ([]*Key, error) {
112 originKey, err := i.store.GetByUUID(ctx, originID)
113 if err != nil {
114 return nil, fmt.Errorf("get key error: %v,id is %s", err, originID)
115 }
116 targetKey, err := i.store.GetByUUID(ctx, targetID)
117 if err != nil {
118 return nil, fmt.Errorf("get key error: %v,id is %s", err, targetID)
119 }
120 originKeySort, targetKeySort := originKey.Sort, targetKey.Sort
121 // 初始化顺序,假设原始Key在目标Key之后,中间的key往后移动,原始Key移动到`targetKeySort`位置
122 originKey.Sort = targetKeySort
123 fn := func(priority int) int {
124 return priority + 1
125 }
126 sql := "provider = ? and sort < ? and sort >= ?"
127 if originKeySort < targetKeySort {
128 // 如果原始Key在目标Key之前,中间的key往前移动,原始Key移动到`targetKeySort - 1`位置
129 sql = "provider = ? and sort > ? and sort < ?"
130 originKey.Sort = targetKeySort - 1
131 fn = func(priority int) int {
132 return priority - 1
133 }
134 }
135 list, err := i.store.ListQuery(ctx, sql, []interface{}{provider, originKeySort, targetKeySort}, "sort asc")
136 if err != nil {
137 return nil, err
138 }
139 result := make([]*Key, 0, len(list)+1)
140 err = i.transaction.Transaction(ctx, func(txCtx context.Context) error {
141 for _, l := range list {
142 l.Sort = fn(l.Sort)
143 _, err := i.store.Update(ctx, l)
144 if err != nil {
145 return err
146 }
147 result = append(result, FromEntity(l))
148 }
149 _, err = i.store.Update(ctx, originKey)
150 return err
151 })
152 if err != nil {
153 return nil, err
154 }
155 result = append(result, FromEntity(originKey))
156 sort.Slice(list, func(i, j int) bool { return list[i].Sort < list[j].Sort })
157 return result, nil
158}
159
160func (i *imlAIKeyService) SortAfter(ctx context.Context, provider string, originID string, targetID string) ([]*Key, error) {
161 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