(ctx context.Context, provider string, originID string, targetID string)
| 109 | } |
| 110 | |
| 111 | func (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 | |
| 160 | func (i *imlAIKeyService) SortAfter(ctx context.Context, provider string, originID string, targetID string) ([]*Key, error) { |
| 161 | originKey, err := i.store.GetByUUID(ctx, originID) |
nothing calls this directly
no test coverage detected