MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / FixAbility

Function FixAbility

model/ability.go:317–356  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

315var fixLock = sync.Mutex{}
316
317func FixAbility() (int, int, error) {
318 lock := fixLock.TryLock()
319 if !lock {
320 return 0, 0, errors.New("已经有一个修复任务在运行中,请稍后再试")
321 }
322 defer fixLock.Unlock()
323 var channels []*Channel
324 // Find all channels
325 err := DB.Model(&Channel{}).Find(&channels).Error
326 if err != nil {
327 return 0, 0, err
328 }
329 if len(channels) == 0 {
330 return 0, 0, nil
331 }
332 successCount := 0
333 failCount := 0
334 for _, chunk := range lo.Chunk(channels, 50) {
335 ids := lo.Map(chunk, func(c *Channel, _ int) int { return c.Id })
336 // Delete all abilities of this channel
337 err = DB.Where("channel_id IN ?", ids).Delete(&Ability{}).Error
338 if err != nil {
339 common.SysError(fmt.Sprintf("Delete abilities failed: %s", err.Error()))
340 failCount += len(chunk)
341 continue
342 }
343 // Then add new abilities
344 for _, channel := range chunk {
345 err = channel.AddAbilities()
346 if err != nil {
347 common.SysError(fmt.Sprintf("Add abilities for channel %d failed: %s", channel.Id, err.Error()))
348 failCount++
349 } else {
350 successCount++
351 }
352 }
353 }
354 InitChannelCache()
355 return successCount, failCount, nil
356}

Callers 2

mainFunction · 0.92
FixChannelsAbilitiesFunction · 0.92

Calls 5

SysErrorFunction · 0.92
InitChannelCacheFunction · 0.85
ErrorMethod · 0.80
AddAbilitiesMethod · 0.80
DeleteMethod · 0.45

Tested by

no test coverage detected