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

Method SortAfter

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

Source from the content-addressed store, hash-verified

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)
162 if err != nil {
163 return nil, fmt.Errorf("get key error: %v,id is %s", err, originID)
164 }
165 targetKey, err := i.store.GetByUUID(ctx, targetID)
166 if err != nil {
167 return nil, fmt.Errorf("get key error: %v,id is %s", err, targetID)
168 }
169 originKeySort, targetKeySort := originKey.Sort, targetKey.Sort
170 // 初始化顺序,假设原始Key在目标Key之后,中间的Key往后移动,原始Key移动到`targetKeySort + 1`位置
171 originKey.Sort = targetKeySort + 1
172 fn := func(priority int) int {
173 return priority + 1
174 }
175 sql := "provider = ? and sort < ? and sort > ?"
176 if originKeySort < targetKeySort {
177 // 如果原始Key在目标Key之前,中间的Key往前移动,原始Key移动到`targetKeySort`位置
178 sql = "provider = ? and sort > ? and sort <= ?"
179 originKey.Sort = targetKeySort
180 fn = func(priority int) int {
181 return priority - 1
182 }
183 }
184 list, err := i.store.ListQuery(ctx, sql, []interface{}{provider, originKeySort, targetKeySort}, "sort asc")
185 if err != nil {
186 return nil, err
187 }
188 result := make([]*Key, 0, len(list)+1)
189 err = i.transaction.Transaction(ctx, func(txCtx context.Context) error {
190 for _, l := range list {
191 l.Sort = fn(l.Sort)
192 _, err := i.store.Update(ctx, l)
193 if err != nil {
194 return err
195 }
196 result = append(result, FromEntity(l))
197 }
198 _, err = i.store.Update(ctx, originKey)
199 return err
200 })
201 if err != nil {
202 return nil, err
203 }
204 result = append(result, FromEntity(originKey))
205 sort.Slice(list, func(i, j int) bool { return list[i].Sort < list[j].Sort })
206 return result, nil
207}
208
209func (i *imlAIKeyService) OnComplete() {
210 i.IServiceGet = universally.NewGet[Key, ai.Key](i.store, FromEntity)

Callers

nothing calls this directly

Calls 2

FromEntityFunction · 0.70
UpdateMethod · 0.65

Tested by

no test coverage detected