Archived
1

/find_user moved to custom SQL query

Now it's much, MUCH faster.
This commit is contained in:
2017-12-23 18:49:09 +04:00
parent 9a10a6884b
commit 24e4904807
3 changed files with 36 additions and 26 deletions

View File

@@ -31,19 +31,17 @@ func (u *Users) FindByName(update *tgbotapi.Update) string {
message := "*Найденные игроки:*\n"
for i := range usersArray {
message += "#" + strconv.Itoa(usersArray[i].Player.ID)
message += " " + usersArray[i].League.Symbol
message += " " + usersArray[i].Profile.Nickname
if usersArray[i].Profile.TelegramNickname != "" {
message += " (@" + u.FormatUsername(usersArray[i].Profile.TelegramNickname) + ")"
message += "#" + strconv.Itoa(usersArray[i].PlayerID)
message += " " + usersArray[i].LeagueSymbol
message += " " + usersArray[i].Nickname
if usersArray[i].TelegramNickname != "" {
message += " (@" + u.FormatUsername(usersArray[i].TelegramNickname) + ")"
}
message += " /profile" + strconv.Itoa(usersArray[i].Player.ID) + "\n"
message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n"
message += "Последнее обновление: " + usersArray[i].Profile.CreatedAt.Format("02.01.2006 15:04:05") + "\n"
message += " /profile" + strconv.Itoa(usersArray[i].PlayerID) + "\n"
message += "Telegram ID: " + strconv.Itoa(usersArray[i].TelegramID) + "\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.ParseMode = "Markdown"

View File

@@ -7,7 +7,6 @@ import (
"github.com/go-telegram-bot-api/telegram-bot-api"
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
"strconv"
"strings"
)
// Internal functions for Users package
@@ -48,21 +47,13 @@ func (u *Users) getUsersWithProfiles() ([]dbmapping.PlayerProfile, bool) {
return usersArray, true
}
func (u *Users) findUserByName(pattern string) ([]dbmapping.PlayerProfile, bool) {
allUsers, ok := u.getUsersWithProfiles()
if !ok {
return allUsers, ok
}
func (u *Users) findUserByName(pattern string) ([]dbmapping.ProfileWithAddons, bool) {
selectedUsers := []dbmapping.ProfileWithAddons{}
selectedUsers := []dbmapping.PlayerProfile{}
for i := range allUsers {
user := allUsers[i]
if user.HaveProfile {
if strings.Contains(user.Profile.TelegramNickname, pattern) || strings.Contains(user.Profile.Nickname, pattern) {
selectedUsers = append(selectedUsers, user)
}
}
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 {
c.Log.Error(err.Error())
return selectedUsers, false
}
return selectedUsers, true