/find_user moved to custom SQL query
Now it's much, MUCH faster.
This commit is contained in:
parent
9a10a6884b
commit
24e4904807
@ -7,7 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Profile is a struct, which represents `profiles` table item in databse.
|
// Profile is a struct, which represents `profiles` table item in database.
|
||||||
type Profile struct {
|
type Profile struct {
|
||||||
ID int `db:"id"`
|
ID int `db:"id"`
|
||||||
PlayerID int `db:"player_id"`
|
PlayerID int `db:"player_id"`
|
||||||
@ -24,3 +24,24 @@ type Profile struct {
|
|||||||
Crystalls int `db:"crystalls"`
|
Crystalls int `db:"crystalls"`
|
||||||
CreatedAt time.Time `db:"created_at"`
|
CreatedAt time.Time `db:"created_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProfileWithAddons is a struct, which represents `profiles` table item in database and some good external fields.
|
||||||
|
type ProfileWithAddons struct {
|
||||||
|
ID int `db:"id"`
|
||||||
|
PlayerID int `db:"player_id"`
|
||||||
|
TelegramID int `db:"telegram_id"`
|
||||||
|
LeagueID int `db:"league_id"`
|
||||||
|
LeagueSymbol string `db:"league_symbol"`
|
||||||
|
Nickname string `db:"nickname"`
|
||||||
|
TelegramNickname string `db:"telegram_nickname"`
|
||||||
|
LevelID int `db:"level_id"`
|
||||||
|
Pokeballs int `db:"pokeballs"`
|
||||||
|
Wealth int `db:"wealth"`
|
||||||
|
PokememesWealth int `db:"pokememes_wealth"`
|
||||||
|
Exp int `db:"exp"`
|
||||||
|
EggExp int `db:"egg_exp"`
|
||||||
|
Power int `db:"power"`
|
||||||
|
WeaponID int `db:"weapon_id"`
|
||||||
|
Crystalls int `db:"crystalls"`
|
||||||
|
CreatedAt time.Time `db:"created_at"`
|
||||||
|
}
|
||||||
|
@ -31,19 +31,17 @@ func (u *Users) FindByName(update *tgbotapi.Update) string {
|
|||||||
message := "*Найденные игроки:*\n"
|
message := "*Найденные игроки:*\n"
|
||||||
|
|
||||||
for i := range usersArray {
|
for i := range usersArray {
|
||||||
message += "#" + strconv.Itoa(usersArray[i].Player.ID)
|
message += "#" + strconv.Itoa(usersArray[i].PlayerID)
|
||||||
message += " " + usersArray[i].League.Symbol
|
message += " " + usersArray[i].LeagueSymbol
|
||||||
message += " " + usersArray[i].Profile.Nickname
|
message += " " + usersArray[i].Nickname
|
||||||
if usersArray[i].Profile.TelegramNickname != "" {
|
if usersArray[i].TelegramNickname != "" {
|
||||||
message += " (@" + u.FormatUsername(usersArray[i].Profile.TelegramNickname) + ")"
|
message += " (@" + u.FormatUsername(usersArray[i].TelegramNickname) + ")"
|
||||||
}
|
}
|
||||||
message += " /profile" + strconv.Itoa(usersArray[i].Player.ID) + "\n"
|
message += " /profile" + strconv.Itoa(usersArray[i].PlayerID) + "\n"
|
||||||
message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n"
|
message += "Telegram ID: " + strconv.Itoa(usersArray[i].TelegramID) + "\n"
|
||||||
message += "Последнее обновление: " + usersArray[i].Profile.CreatedAt.Format("02.01.2006 15:04:05") + "\n"
|
message += "Последнее обновление: " + usersArray[i].CreatedAt.Format("02.01.2006 15:04:05") + "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Log.Debug(message)
|
|
||||||
|
|
||||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
|
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
|
||||||
msg.ParseMode = "Markdown"
|
msg.ParseMode = "Markdown"
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"github.com/go-telegram-bot-api/telegram-bot-api"
|
"github.com/go-telegram-bot-api/telegram-bot-api"
|
||||||
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
|
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Internal functions for Users package
|
// Internal functions for Users package
|
||||||
@ -48,21 +47,13 @@ func (u *Users) getUsersWithProfiles() ([]dbmapping.PlayerProfile, bool) {
|
|||||||
return usersArray, true
|
return usersArray, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *Users) findUserByName(pattern string) ([]dbmapping.PlayerProfile, bool) {
|
func (u *Users) findUserByName(pattern string) ([]dbmapping.ProfileWithAddons, bool) {
|
||||||
allUsers, ok := u.getUsersWithProfiles()
|
selectedUsers := []dbmapping.ProfileWithAddons{}
|
||||||
if !ok {
|
|
||||||
return allUsers, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedUsers := []dbmapping.PlayerProfile{}
|
err := c.Db.Select(&selectedUsers, c.Db.Rebind("SELECT * FROM (SELECT p.*, l.symbol AS league_symbol, l.id AS league_id, pl.telegram_id FROM players pl, profiles p, leagues l WHERE p.player_id = pl.id AND l.id = pl.league_id AND (p.nickname LIKE ? OR p.telegram_nickname LIKE ?) ORDER BY p.id desc LIMIT 100000) AS find_users_table GROUP BY player_id"), "%"+pattern+"%", "%"+pattern+"%")
|
||||||
|
if err != nil {
|
||||||
for i := range allUsers {
|
c.Log.Error(err.Error())
|
||||||
user := allUsers[i]
|
return selectedUsers, false
|
||||||
if user.HaveProfile {
|
|
||||||
if strings.Contains(user.Profile.TelegramNickname, pattern) || strings.Contains(user.Profile.Nickname, pattern) {
|
|
||||||
selectedUsers = append(selectedUsers, user)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return selectedUsers, true
|
return selectedUsers, true
|
||||||
|
Reference in New Issue
Block a user