From 1c9c5c6f6a804c34537c3d0433b5160f38fe840d Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Thu, 6 May 2021 14:55:51 +0200 Subject: [PATCH] delete dev.sh and helpers from the models package, use gopgutil to build conditions in filters --- dev.sh | 3 --- discord/discord.go | 12 ++++++------ discord/public_commands.go | 2 +- go.mod | 1 + main.go | 11 +++++++---- models/helpers.go | 16 ---------------- models/observation.go | 28 ++++++++++++---------------- models/server.go | 14 ++++++-------- 8 files changed, 33 insertions(+), 54 deletions(-) delete mode 100755 dev.sh delete mode 100644 models/helpers.go diff --git a/dev.sh b/dev.sh deleted file mode 100755 index 16b66ca..0000000 --- a/dev.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -export MODE=development -go run main.go \ No newline at end of file diff --git a/discord/discord.go b/discord/discord.go index fc1c72e..2c1510b 100644 --- a/discord/discord.go +++ b/discord/discord.go @@ -2,7 +2,7 @@ package discord import ( "context" - "fmt" + "github.com/pkg/errors" "strings" "github.com/sirupsen/logrus" @@ -147,7 +147,7 @@ func (s *Session) init() error { err := s.dg.Open() if err != nil { - return fmt.Errorf("error opening ws connection: %s", err.Error()) + return errors.Wrap(err, "error opening ws connection") } if err := s.UpdateStatus(s.cfg.Status); err != nil { @@ -176,7 +176,7 @@ func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) e baseNumberOfCharacters += len(message.Footer.Text) } - splittedFields := [][]*discordgo.MessageEmbedField{} + var splittedFields [][]*discordgo.MessageEmbedField characters := baseNumberOfCharacters fromIndex := 0 fieldsLen := len(fields) @@ -231,8 +231,8 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre return } - splitted := strings.Split(m.Content, " ") - args := splitted[1:] + parts := strings.Split(m.Content, " ") + args := parts[1:] svr := &models.Server{ ID: m.GuildID, Lang: message.GetDefaultLanguage().String(), @@ -247,7 +247,7 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre localizer: message.NewLocalizer(svr.Lang), } - cmd := Command(splitted[0]) + cmd := Command(parts[0]) h := s.handlers.find(cmd) if h != nil { if h.requireAdmPermissions { diff --git a/discord/public_commands.go b/discord/public_commands.go index 5c657cb..9ba2473 100644 --- a/discord/public_commands.go +++ b/discord/public_commands.go @@ -255,7 +255,7 @@ func (s *Session) handleHelpCommand(ctx *commandCtx, m *discordgo.MessageCreate, SetURL("https://dcbot.tribalwarshelp.com/"). SetDescription(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ MessageID: message.HelpDescription, - DefaultMessage: message.FallbackMsg(message.HelpDescription, "Commands offered by bot"), + DefaultMessage: message.FallbackMsg(message.HelpDescription, "Commands offered by the bot"), })). AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ MessageID: message.HelpForAllUsers, diff --git a/go.mod b/go.mod index 6f8769d..e48407a 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( github.com/Kichiyaki/appmode v0.0.0-20210502105643-0a26207c548d github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210428180109-fb97298564d9 + github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7 github.com/bwmarrin/discordgo v0.22.0 github.com/dustin/go-humanize v1.0.0 diff --git a/main.go b/main.go index e10128b..bf34a61 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,6 @@ package main import ( "github.com/Kichiyaki/appmode" "github.com/Kichiyaki/goutil/envutil" - "log" "os" "os/signal" "path" @@ -107,9 +106,13 @@ func main() { } defer sess.Close() - c := cron.New(cron.WithChain( - cron.SkipIfStillRunning(cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))), - )) + c := cron.New( + cron.WithChain( + cron.SkipIfStillRunning( + cron.PrintfLogger(logrus.StandardLogger()), + ), + ), + ) _cron.Attach(c, _cron.Config{ ServerRepo: serverRepo, ObservationRepo: observationRepo, diff --git a/models/helpers.go b/models/helpers.go deleted file mode 100644 index e3f9f2f..0000000 --- a/models/helpers.go +++ /dev/null @@ -1,16 +0,0 @@ -package models - -import "strings" - -func addPrefixToColumnName(column, prefix string) string { - if prefix != "" && !strings.HasPrefix(column, prefix+".") { - column = wrapStringInDoubleQuotes(prefix) + "." + wrapStringInDoubleQuotes(column) - } else { - column = wrapStringInDoubleQuotes(column) - } - return column -} - -func wrapStringInDoubleQuotes(str string) string { - return `"` + str + `"` -} diff --git a/models/observation.go b/models/observation.go index c5b5342..0f5575d 100644 --- a/models/observation.go +++ b/models/observation.go @@ -1,6 +1,7 @@ package models import ( + "github.com/Kichiyaki/gopgutil/v10" "github.com/tribalwarshelp/shared/tw/twmodel" "time" @@ -38,24 +39,19 @@ type ObservationFilter struct { DefaultFilter } -func (f *ObservationFilter) ApplyWithPrefix(prefix string) func(q *orm.Query) (*orm.Query, error) { - return func(q *orm.Query) (*orm.Query, error) { - if len(f.ID) > 0 { - column := addPrefixToColumnName("id", prefix) - q = q.Where(column+" = ANY(?)", pg.Array(f.ID)) - } - if len(f.Server) > 0 { - column := addPrefixToColumnName("server", prefix) - q = q.Where(column+" = ANY(?)", pg.Array(f.Server)) - } - if len(f.GroupID) > 0 { - column := addPrefixToColumnName("group_id", prefix) - q = q.Where(column+" = ANY(?)", pg.Array(f.GroupID)) - } - return f.DefaultFilter.Apply(q) +func (f *ObservationFilter) ApplyWithPrefix(q *orm.Query, alias string) (*orm.Query, error) { + if len(f.ID) > 0 { + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } + if len(f.Server) > 0 { + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("server", alias), pg.Array(f.Server)) + } + if len(f.GroupID) > 0 { + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("group_id", alias), pg.Array(f.GroupID)) + } + return f.DefaultFilter.Apply(q) } func (f *ObservationFilter) Apply(q *orm.Query) (*orm.Query, error) { - return f.ApplyWithPrefix("observation")(q) + return f.ApplyWithPrefix(q, "observation") } diff --git a/models/server.go b/models/server.go index 2a99bf5..b953180 100644 --- a/models/server.go +++ b/models/server.go @@ -1,6 +1,7 @@ package models import ( + "github.com/Kichiyaki/gopgutil/v10" "github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10/orm" ) @@ -19,16 +20,13 @@ type ServerFilter struct { DefaultFilter } -func (f *ServerFilter) ApplyWithPrefix(prefix string) func(q *orm.Query) (*orm.Query, error) { - return func(q *orm.Query) (*orm.Query, error) { - if len(f.ID) > 0 { - column := addPrefixToColumnName("id", prefix) - q = q.Where(column+" = ANY(?)", pg.Array(f.ID)) - } - return f.DefaultFilter.Apply(q) +func (f *ServerFilter) ApplyWithPrefix(q *orm.Query, alias string) (*orm.Query, error) { + if len(f.ID) > 0 { + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } + return f.DefaultFilter.Apply(q) } func (f *ServerFilter) Apply(q *orm.Query) (*orm.Query, error) { - return f.ApplyWithPrefix("server")(q) + return f.ApplyWithPrefix(q, "server") }