Initial commit.

This commit is contained in:
genxium
2022-09-20 23:50:01 +08:00
commit e90a335c56
432 changed files with 101884 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
package env_tools
import (
sq "github.com/Masterminds/squirrel"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
"go.uber.org/zap"
. "server/common"
"server/common/utils"
"server/models"
"server/storage"
)
func LoadPreConf() {
Logger.Info(`Merging PreConfSQLite data into MySQL`,
zap.String("PreConfSQLitePath", Conf.General.PreConfSQLitePath))
db, err := sqlx.Connect("sqlite3", Conf.General.PreConfSQLitePath)
ErrFatal(err)
defer db.Close()
loadPreConfToMysql(db)
// --kobako
maybeCreateNewPlayerFromBotTable(db, "bot_player")
}
type dbBotPlayer struct {
Name string `db:"name"`
MagicPhoneCountryCode string `db:"magic_phone_country_code"`
MagicPhoneNum string `db:"magic_phone_num"`
DisplayName string `db:"display_name"`
}
func loadPreConfToMysql(db *sqlx.DB) {
tbs := []string{}
loadSqlite(db, tbs)
}
func loadSqlite(db *sqlx.DB, tbs []string) {
for _, v := range tbs {
result, err := storage.MySQLManagerIns.Exec("truncate " + v)
ErrFatal(err)
Logger.Info("truncate", zap.Any("truncate "+v, result))
query, args, err := sq.Select("*").From(v).ToSql()
if err != nil {
Logger.Info("loadSql ToSql error", zap.Any("err", err))
}
rows, err := db.Queryx(query, args...)
if err != nil {
Logger.Info("loadSql query error", zap.Any("err", err))
}
createMysqlData(rows, v)
}
}
func createMysqlData(rows *sqlx.Rows, v string) {
tx := storage.MySQLManagerIns.MustBegin()
defer Logger.Info("Loaded table " + v + " from PreConfSQLite successfully.")
switch v {
// TODO
}
err := tx.Commit()
if err != nil {
defer tx.Rollback()
Logger.Info(v+" load", zap.Any("tx.commit error", err))
}
}
//加上tableName参数, 用于pre_conf_data.sqlite里bot_player表的复用 --kobako
func maybeCreateNewPlayerFromBotTable(db *sqlx.DB, tableName string) {
var ls []*dbBotPlayer
err := db.Select(&ls, "SELECT name, magic_phone_country_code, magic_phone_num, display_name FROM "+tableName)
ErrFatal(err)
names := make([]string, len(ls), len(ls))
for i, v := range ls {
names[i] = v.Name
}
sql := "SELECT name FROM `player` WHERE name in (?)"
query, args, err := sqlx.In(sql, names)
ErrFatal(err)
query = storage.MySQLManagerIns.Rebind(query)
// existNames := make([]string, len(ls), len(ls))
var existPlayers []*models.Player
err = storage.MySQLManagerIns.Select(&existPlayers, query, args...)
ErrFatal(err)
for _, botPlayer := range ls {
var flag bool
for _, v := range existPlayers {
if botPlayer.Name == v.Name {
// 已有数据,合并处理
flag = true
break
}
}
if !flag {
// 找不到,新增
Logger.Debug("create", zap.Any(tableName, botPlayer))
err := createNewBotPlayer(botPlayer)
if err != nil {
Logger.Warn("createNewPlayer from"+tableName, zap.NamedError("createNewPlayerErr", err))
}
}
}
}
func createNewBotPlayer(p *dbBotPlayer) error {
tx := storage.MySQLManagerIns.MustBegin()
defer tx.Rollback()
now := utils.UnixtimeMilli()
player := models.Player{
CreatedAt: now,
UpdatedAt: now,
Name: p.Name,
DisplayName: p.DisplayName,
}
err := player.Insert(tx)
if err != nil {
return err
}
playerAuthBinding := models.PlayerAuthBinding{
CreatedAt: now,
UpdatedAt: now,
Channel: int(Constants.AuthChannel.Sms),
ExtAuthID: p.MagicPhoneCountryCode + p.MagicPhoneNum,
PlayerID: int(player.Id),
}
err = playerAuthBinding.Insert(tx)
if err != nil {
return err
}
wallet := models.PlayerWallet{
CreatedAt: now,
UpdatedAt: now,
ID: int(player.Id),
}
err = wallet.Insert(tx)
if err != nil {
return err
}
tx.Commit()
return nil
}

View File

@@ -0,0 +1,102 @@
package env_tools
import (
. "server/common"
"server/common/utils"
"server/models"
"server/storage"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
"go.uber.org/zap"
)
func MergeTestPlayerAccounts() {
fp := Conf.General.TestEnvSQLitePath
Logger.Info(`Initializing TestPlayerAccounts in runtime MySQLServer from SQLite file:`, zap.String("fp", fp))
db, err := sqlx.Connect("sqlite3", fp)
ErrFatal(err)
defer db.Close()
maybeCreateNewPlayer(db, "test_player")
}
type dbTestPlayer struct {
Name string `db:"name"`
MagicPhoneCountryCode string `db:"magic_phone_country_code"`
MagicPhoneNum string `db:"magic_phone_num"`
}
func maybeCreateNewPlayer(db *sqlx.DB, tableName string) {
var ls []*dbTestPlayer
err := db.Select(&ls, "SELECT name, magic_phone_country_code, magic_phone_num FROM "+tableName)
ErrFatal(err)
names := make([]string, len(ls), len(ls))
for i, v := range ls {
names[i] = v.Name
}
sql := "SELECT name FROM `player` WHERE name in (?)"
query, args, err := sqlx.In(sql, names)
ErrFatal(err)
query = storage.MySQLManagerIns.Rebind(query)
// existNames := make([]string, len(ls), len(ls))
var existPlayers []*models.Player
err = storage.MySQLManagerIns.Select(&existPlayers, query, args...)
ErrFatal(err)
for _, testPlayer := range ls {
var flag bool
for _, v := range existPlayers {
if testPlayer.Name == v.Name {
// 已有数据,合并处理
flag = true
break
}
}
if !flag {
// 找不到,新增
Logger.Debug("create", zap.Any(tableName, testPlayer))
err := createNewPlayer(testPlayer)
if err != nil {
Logger.Warn("createNewPlayer from"+tableName, zap.NamedError("createNewPlayerErr", err))
}
}
}
}
func createNewPlayer(p *dbTestPlayer) error {
tx := storage.MySQLManagerIns.MustBegin()
defer tx.Rollback()
now := utils.UnixtimeMilli()
player := models.Player{
CreatedAt: now,
UpdatedAt: now,
Name: p.Name,
}
err := player.Insert(tx)
if err != nil {
return err
}
playerAuthBinding := models.PlayerAuthBinding{
CreatedAt: now,
UpdatedAt: now,
Channel: int(Constants.AuthChannel.Sms),
ExtAuthID: p.MagicPhoneCountryCode + p.MagicPhoneNum,
PlayerID: int(player.Id),
}
err = playerAuthBinding.Insert(tx)
if err != nil {
return err
}
wallet := models.PlayerWallet{
CreatedAt: now,
UpdatedAt: now,
ID: int(player.Id),
}
err = wallet.Insert(tx)
if err != nil {
return err
}
tx.Commit()
return nil
}