updateELORate 更新 elo 等级分 当数据库中没有玩家的等级分信息时, 自动新建一条记录
(whiteUin, blackUin int64, whiteName, blackName string, whiteScore, blackScore float64, dbService *chessDBService)
| 575 | // updateELORate 更新 elo 等级分 |
| 576 | // 当数据库中没有玩家的等级分信息时, 自动新建一条记录 |
| 577 | func updateELORate(whiteUin, blackUin int64, whiteName, blackName string, whiteScore, blackScore float64, dbService *chessDBService) error { |
| 578 | whiteRate, err := dbService.getELORateByUin(whiteUin) |
| 579 | if err != nil { |
| 580 | if err != gorm.ErrRecordNotFound { |
| 581 | return err |
| 582 | } |
| 583 | // create white elo |
| 584 | if err := dbService.createELO(whiteUin, whiteName, eloDefault); err != nil { |
| 585 | return err |
| 586 | } |
| 587 | whiteRate = eloDefault |
| 588 | } |
| 589 | blackRate, err := dbService.getELORateByUin(blackUin) |
| 590 | if err != nil { |
| 591 | if err != gorm.ErrRecordNotFound { |
| 592 | return err |
| 593 | } |
| 594 | // create black elo |
| 595 | if err := dbService.createELO(blackUin, blackName, eloDefault); err != nil { |
| 596 | return err |
| 597 | } |
| 598 | blackRate = eloDefault |
| 599 | } |
| 600 | whiteRate, blackRate = calculateNewRate(whiteRate, blackRate, whiteScore, blackScore) |
| 601 | // 更新白棋玩家的 ELO 等级分 |
| 602 | if err := dbService.updateELOByUin(whiteUin, whiteName, whiteRate); err != nil { |
| 603 | return err |
| 604 | } |
| 605 | // 更新黑棋玩家的 ELO 等级分 |
| 606 | return dbService.updateELOByUin(blackUin, blackName, blackRate) |
| 607 | } |
| 608 | |
| 609 | // getChessString 获取 PGN 字符串 |
| 610 | func getChessString(room chessRoom) string { |
no test coverage detected