(ctx context.Context, serviceId string, input *subscribe_dto.AddSubscriber)
| 214 | } |
| 215 | |
| 216 | func (i *imlSubscribeModule) AddSubscriber(ctx context.Context, serviceId string, input *subscribe_dto.AddSubscriber) error { |
| 217 | _, err := i.serviceService.Get(ctx, serviceId) |
| 218 | if err != nil { |
| 219 | return err |
| 220 | } |
| 221 | clusters, err := i.clusterService.List(ctx) |
| 222 | if err != nil { |
| 223 | return err |
| 224 | } |
| 225 | sub := &gateway.SubscribeRelease{ |
| 226 | Service: serviceId, |
| 227 | Application: input.Application, |
| 228 | Expired: "0", |
| 229 | } |
| 230 | return i.transaction.Transaction(ctx, func(ctx context.Context) error { |
| 231 | info, err := i.subscribeService.GetByServiceAndApplication(ctx, serviceId, input.Application) |
| 232 | if err == nil { |
| 233 | // 订阅方已存在 |
| 234 | if info.ApplyStatus != subscribe.ApplyStatusSubscribe { |
| 235 | // 更新订阅方状态 |
| 236 | status := subscribe.ApplyStatusSubscribe |
| 237 | from := subscribe.FromUser |
| 238 | err = i.subscribeService.Save(ctx, info.Id, &subscribe.UpdateSubscribe{ |
| 239 | ApplyStatus: &status, |
| 240 | From: &from, |
| 241 | }) |
| 242 | if err != nil { |
| 243 | return err |
| 244 | } |
| 245 | } else { |
| 246 | return nil |
| 247 | } |
| 248 | } else { |
| 249 | err = i.subscribeService.Create(ctx, &subscribe.CreateSubscribe{ |
| 250 | Uuid: uuid.New().String(), |
| 251 | Service: serviceId, |
| 252 | Application: input.Application, |
| 253 | ApplyStatus: subscribe.ApplyStatusSubscribe, |
| 254 | From: subscribe.FromUser, |
| 255 | }) |
| 256 | if err != nil { |
| 257 | return err |
| 258 | } |
| 259 | } |
| 260 | |
| 261 | for _, c := range clusters { |
| 262 | err = i.onlineSubscriber(ctx, c.Uuid, sub) |
| 263 | if err != nil { |
| 264 | return fmt.Errorf("add subscriber for cluster[%s] %v", c.Uuid, err) |
| 265 | } |
| 266 | } |
| 267 | |
| 268 | return nil |
| 269 | }) |
| 270 | |
| 271 | } |
| 272 | |
| 273 | func (i *imlSubscribeModule) onlineSubscriber(ctx context.Context, clusterId string, subscriber *gateway.SubscribeRelease) error { |
nothing calls this directly
no test coverage detected