delete dev.sh and helpers from the models package, use gopgutil to build conditions in filters

This commit is contained in:
Dawid Wysokiński 2021-05-06 14:55:51 +02:00
parent ab6bbfa9c2
commit 1c9c5c6f6a
8 changed files with 33 additions and 54 deletions

3
dev.sh
View File

@ -1,3 +0,0 @@
#!/bin/sh
export MODE=development
go run main.go

View File

@ -2,7 +2,7 @@ package discord
import ( import (
"context" "context"
"fmt" "github.com/pkg/errors"
"strings" "strings"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -147,7 +147,7 @@ func (s *Session) init() error {
err := s.dg.Open() err := s.dg.Open()
if err != nil { 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 { 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) baseNumberOfCharacters += len(message.Footer.Text)
} }
splittedFields := [][]*discordgo.MessageEmbedField{} var splittedFields [][]*discordgo.MessageEmbedField
characters := baseNumberOfCharacters characters := baseNumberOfCharacters
fromIndex := 0 fromIndex := 0
fieldsLen := len(fields) fieldsLen := len(fields)
@ -231,8 +231,8 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
return return
} }
splitted := strings.Split(m.Content, " ") parts := strings.Split(m.Content, " ")
args := splitted[1:] args := parts[1:]
svr := &models.Server{ svr := &models.Server{
ID: m.GuildID, ID: m.GuildID,
Lang: message.GetDefaultLanguage().String(), Lang: message.GetDefaultLanguage().String(),
@ -247,7 +247,7 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
localizer: message.NewLocalizer(svr.Lang), localizer: message.NewLocalizer(svr.Lang),
} }
cmd := Command(splitted[0]) cmd := Command(parts[0])
h := s.handlers.find(cmd) h := s.handlers.find(cmd)
if h != nil { if h != nil {
if h.requireAdmPermissions { if h.requireAdmPermissions {

View File

@ -255,7 +255,7 @@ func (s *Session) handleHelpCommand(ctx *commandCtx, m *discordgo.MessageCreate,
SetURL("https://dcbot.tribalwarshelp.com/"). SetURL("https://dcbot.tribalwarshelp.com/").
SetDescription(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ SetDescription(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpDescription, 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{ AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpForAllUsers, MessageID: message.HelpForAllUsers,

1
go.mod
View File

@ -5,6 +5,7 @@ go 1.16
require ( require (
github.com/Kichiyaki/appmode v0.0.0-20210502105643-0a26207c548d 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/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/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7
github.com/bwmarrin/discordgo v0.22.0 github.com/bwmarrin/discordgo v0.22.0
github.com/dustin/go-humanize v1.0.0 github.com/dustin/go-humanize v1.0.0

11
main.go
View File

@ -3,7 +3,6 @@ package main
import ( import (
"github.com/Kichiyaki/appmode" "github.com/Kichiyaki/appmode"
"github.com/Kichiyaki/goutil/envutil" "github.com/Kichiyaki/goutil/envutil"
"log"
"os" "os"
"os/signal" "os/signal"
"path" "path"
@ -107,9 +106,13 @@ func main() {
} }
defer sess.Close() defer sess.Close()
c := cron.New(cron.WithChain( c := cron.New(
cron.SkipIfStillRunning(cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))), cron.WithChain(
)) cron.SkipIfStillRunning(
cron.PrintfLogger(logrus.StandardLogger()),
),
),
)
_cron.Attach(c, _cron.Config{ _cron.Attach(c, _cron.Config{
ServerRepo: serverRepo, ServerRepo: serverRepo,
ObservationRepo: observationRepo, ObservationRepo: observationRepo,

View File

@ -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 + `"`
}

View File

@ -1,6 +1,7 @@
package models package models
import ( import (
"github.com/Kichiyaki/gopgutil/v10"
"github.com/tribalwarshelp/shared/tw/twmodel" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
@ -38,24 +39,19 @@ type ObservationFilter struct {
DefaultFilter DefaultFilter
} }
func (f *ObservationFilter) ApplyWithPrefix(prefix string) func(q *orm.Query) (*orm.Query, error) { func (f *ObservationFilter) ApplyWithPrefix(q *orm.Query, alias string) (*orm.Query, error) {
return func(q *orm.Query) (*orm.Query, error) { if len(f.ID) > 0 {
if len(f.ID) > 0 { q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID))
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)
} }
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) { func (f *ObservationFilter) Apply(q *orm.Query) (*orm.Query, error) {
return f.ApplyWithPrefix("observation")(q) return f.ApplyWithPrefix(q, "observation")
} }

View File

@ -1,6 +1,7 @@
package models package models
import ( import (
"github.com/Kichiyaki/gopgutil/v10"
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm" "github.com/go-pg/pg/v10/orm"
) )
@ -19,16 +20,13 @@ type ServerFilter struct {
DefaultFilter DefaultFilter
} }
func (f *ServerFilter) ApplyWithPrefix(prefix string) func(q *orm.Query) (*orm.Query, error) { func (f *ServerFilter) ApplyWithPrefix(q *orm.Query, alias string) (*orm.Query, error) {
return func(q *orm.Query) (*orm.Query, error) { if len(f.ID) > 0 {
if len(f.ID) > 0 { q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID))
column := addPrefixToColumnName("id", prefix)
q = q.Where(column+" = ANY(?)", pg.Array(f.ID))
}
return f.DefaultFilter.Apply(q)
} }
return f.DefaultFilter.Apply(q)
} }
func (f *ServerFilter) Apply(q *orm.Query) (*orm.Query, error) { func (f *ServerFilter) Apply(q *orm.Query) (*orm.Query, error) {
return f.ApplyWithPrefix("server")(q) return f.ApplyWithPrefix(q, "server")
} }