(ctx context.Context, originID string, targetID string)
| 53 | } |
| 54 | |
| 55 | func (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 | |
| 104 | func (i *imlBalanceService) SortAfter(ctx context.Context, originID string, targetID string) ([]*Balance, error) { |
| 105 | originKey, err := i.store.GetByUUID(ctx, originID) |
nothing calls this directly
no test coverage detected