feat: migrate state and complete live systems

- replace the Haskell bridge with transactional SQLite state and validation

- centralize versions and harden resource, capture, and release tooling

- complete active gacha schedules, point exchange, and mail grants

- add equipment refinement, presets, and ordinary formation workflows

- improve client plugins, request timing, and normalized persistence
This commit is contained in:
2026-09-24 22:43:03 +08:00
parent 113e941bef
commit f94cfa1cf3
162 changed files with 13714 additions and 12632 deletions
+16
View File
@@ -0,0 +1,16 @@
package main
import (
"fmt"
"strings"
"bd2server/internal/accountstate"
)
func stateProblemsError(prefix string, problems []accountstate.Problem) error {
parts := make([]string, 0, len(problems))
for _, problem := range problems {
parts = append(parts, problem.Code+": "+problem.Message)
}
return fmt.Errorf("%s: %s", prefix, strings.Join(parts, "; "))
}