@@ -275,6 +275,19 @@ func (db SQLiteDB) Migrate() error {
275275 _ = tx .Rollback ()
276276 return errors .Wrap (err , "2021-06 INSERT failed" )
277277 }
278+ } else if err .Error () == "table battle_record has no column named result" {
279+ // NOTE: A column removed. battle_record.result
280+ var validColumns []string
281+ for _ , col := range columns {
282+ if col != "result" {
283+ validColumns = append (validColumns , col )
284+ }
285+ }
286+ _ , err = tx .Exec (`INSERT INTO ` + table + `(` + strings .Join (validColumns , "," ) + `) SELECT ` + strings .Join (validColumns , "," ) + ` FROM ` + tmp )
287+ if err != nil {
288+ _ = tx .Rollback ()
289+ return errors .Wrap (err , "2026-02 result removal INSERT failed" )
290+ }
278291 } else {
279292 _ = tx .Rollback ()
280293 return errors .Wrap (err , "INSERT failed" )
@@ -549,15 +562,24 @@ WHERE
549562 return err
550563}
551564
552- func (db SQLiteDB ) SaveBattleRoundData (battleCode string , usedMsMask int , usedMsList string , roundWin string ) error {
565+ func (db SQLiteDB ) SaveBattleRoundWin (battleCode string , roundWin string ) error {
553566 _ , err := db .Exec (`
554567UPDATE battle_record
555568SET
556- used_ms_mask = ?,
557- used_ms_list = ?,
558569 round_win = ?
559570WHERE
560- battle_code = ?` , usedMsMask , usedMsList , roundWin , battleCode )
571+ battle_code = ?` , roundWin , battleCode )
572+ return err
573+ }
574+
575+ func (db SQLiteDB ) SaveUserUsedMs (battleCode string , userID string , usedMsMask int , usedMsList string ) error {
576+ _ , err := db .Exec (`
577+ UPDATE battle_record
578+ SET
579+ used_ms_mask = ?,
580+ used_ms_list = ?
581+ WHERE
582+ battle_code = ? AND user_id = ?` , usedMsMask , usedMsList , battleCode , userID )
561583 return err
562584}
563585
@@ -933,6 +955,32 @@ GROUP BY battle_code ORDER BY created `+order, q)
933955 continue
934956 }
935957
958+ // Calculate wins from winList first
959+ for i := 0 ; i < n ; i ++ {
960+ team , _ := strconv .Atoi (teamList [i ])
961+ win , _ := strconv .Atoi (winList [i ])
962+ if team == TeamRenpo && replay .RenpoWin < win {
963+ replay .RenpoWin = win
964+ }
965+ if team == TeamZeon && replay .ZeonWin < win {
966+ replay .ZeonWin = win
967+ }
968+ }
969+
970+ // If winList was all 0, try to use RoundWin ("1,2,1" etc)
971+ if replay .RenpoWin == 0 && replay .ZeonWin == 0 && r .RoundWin != "" {
972+ rounds := strings .Split (r .RoundWin , "," )
973+ for _ , roundWinStr := range rounds {
974+ winTeam , _ := strconv .Atoi (roundWinStr )
975+ switch winTeam {
976+ case TeamRenpo :
977+ replay .RenpoWin ++
978+ case TeamZeon :
979+ replay .ZeonWin ++
980+ }
981+ }
982+ }
983+
936984 for i := 0 ; i < n ; i ++ {
937985 team , err := strconv .Atoi (teamList [i ])
938986 if err != nil {
@@ -944,20 +992,6 @@ GROUP BY battle_code ORDER BY created `+order, q)
944992 return nil , err
945993 }
946994
947- if team == TeamRenpo && replay .RenpoWin == 0 {
948- replay .RenpoWin , err = strconv .Atoi (winList [i ])
949- if err != nil {
950- return nil , err
951- }
952- }
953-
954- if team == TeamZeon && replay .ZeonWin == 0 {
955- replay .ZeonWin , err = strconv .Atoi (winList [i ])
956- if err != nil {
957- return nil , err
958- }
959- }
960-
961995 usedMsList := ""
962996 if i < len (usedMsListList ) {
963997 usedMsList = usedMsListList [i ]
0 commit comments