From f16e93469a907c7aec122ec045bbb3edefe0b621 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Thu, 18 Jun 2020 14:51:31 +0200 Subject: [PATCH] rename tribe model -> observation, cron is checking now bot membership on servers and is detecting closed tribalwars worlds --- cron/cron.go | 24 +++-- cron/ennoblements.go | 4 +- cron/handler.go | 92 ++++++++++++++++--- cron/helpers.go | 3 +- discord/commands.go | 26 +++--- discord/discord.go | 28 ++++-- go.sum | 4 - main.go | 24 ++--- models/{tribe.go => observation.go} | 13 +-- models/server.go | 8 +- observation/repository.go | 16 ++++ .../repository/observation_pg_repo.go | 30 +++--- server/repository/server_pg_repo.go | 2 +- tribe/repository.go | 16 ---- 14 files changed, 182 insertions(+), 108 deletions(-) rename models/{tribe.go => observation.go} (67%) create mode 100644 observation/repository.go rename tribe/repository/tribe_pg_repo.go => observation/repository/observation_pg_repo.go (55%) delete mode 100644 tribe/repository.go diff --git a/cron/cron.go b/cron/cron.go index 035a505..072965c 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -6,26 +6,30 @@ import ( "github.com/tribalwarshelp/golang-sdk/sdk" "github.com/tribalwarshelp/dcbot/discord" + "github.com/tribalwarshelp/dcbot/observation" "github.com/tribalwarshelp/dcbot/server" - "github.com/tribalwarshelp/dcbot/tribe" "github.com/robfig/cron/v3" ) type Config struct { - ServerRepo server.Repository - TribeRepo tribe.Repository - Discord *discord.Session - API *sdk.SDK + ServerRepo server.Repository + ObservationRepo observation.Repository + Discord *discord.Session + API *sdk.SDK } func Attach(c *cron.Cron, cfg Config) { h := &handler{ - lastEnnobledAt: make(map[string]time.Time), - serverRepo: cfg.ServerRepo, - tribeRepo: cfg.TribeRepo, - discord: cfg.Discord, - api: cfg.API, + lastEnnobledAt: make(map[string]time.Time), + serverRepo: cfg.ServerRepo, + observationRepo: cfg.ObservationRepo, + discord: cfg.Discord, + api: cfg.API, } c.AddFunc("@every 1m", h.checkLastEnnoblements) + go h.checkBotMembershipOnServers() + c.AddFunc("@every 30m", h.checkBotMembershipOnServers) + go h.deleteClosedTribalwarsWorlds() + c.AddFunc("@every 2h", h.deleteClosedTribalwarsWorlds) } diff --git a/cron/ennoblements.go b/cron/ennoblements.go index e934b7d..7e72a2c 100644 --- a/cron/ennoblements.go +++ b/cron/ennoblements.go @@ -14,7 +14,7 @@ func (e ennoblements) getLastEnnoblement() *shared_models.Ennoblement { return e[length-1] } -func (e ennoblements) tribeLostVillages(tribeID int) ennoblements { +func (e ennoblements) getLostVillagesByTribe(tribeID int) ennoblements { filtered := ennoblements{} for _, ennoblement := range e { if (!isPlayerTribeNil(ennoblement.NewOwner) && ennoblement.NewOwner.Tribe.ID == tribeID) || @@ -27,7 +27,7 @@ func (e ennoblements) tribeLostVillages(tribeID int) ennoblements { return filtered } -func (e ennoblements) tribeConqueredVillages(tribeID int) ennoblements { +func (e ennoblements) getConqueredVillagesByTribe(tribeID int) ennoblements { filtered := ennoblements{} for _, ennoblement := range e { if isPlayerTribeNil(ennoblement.NewOwner) || diff --git a/cron/handler.go b/cron/handler.go index 555e4b2..b8da665 100644 --- a/cron/handler.go +++ b/cron/handler.go @@ -8,18 +8,19 @@ import ( shared_models "github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/dcbot/discord" + "github.com/tribalwarshelp/dcbot/models" + "github.com/tribalwarshelp/dcbot/observation" "github.com/tribalwarshelp/dcbot/server" - "github.com/tribalwarshelp/dcbot/tribe" "github.com/tribalwarshelp/dcbot/utils" "github.com/tribalwarshelp/golang-sdk/sdk" ) type handler struct { - lastEnnobledAt map[string]time.Time - serverRepo server.Repository - tribeRepo tribe.Repository - discord *discord.Session - api *sdk.SDK + lastEnnobledAt map[string]time.Time + serverRepo server.Repository + observationRepo observation.Repository + discord *discord.Session + api *sdk.SDK } func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements { @@ -44,7 +45,7 @@ func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements { lastEnnobledAt, ok := h.lastEnnobledAt[w] if !ok { - lastEnnobledAt = time.Now() + lastEnnobledAt = time.Now().Add(-1 * time.Minute) } m[w] = filterEnnoblements(es, lastEnnobledAt) @@ -86,7 +87,7 @@ func (h *handler) loadLangVersions(worlds []string) map[shared_models.LanguageTa } func (h *handler) checkLastEnnoblements() { - worlds, err := h.tribeRepo.FetchWorlds(context.Background()) + worlds, err := h.observationRepo.FetchWorlds(context.Background()) if err != nil { log.Print("checkLastEnnoblements: " + err.Error()) return @@ -95,10 +96,10 @@ func (h *handler) checkLastEnnoblements() { servers, total, err := h.serverRepo.Fetch(context.Background(), nil) if err != nil { - log.Print("checkLastEnnoblements: " + err.Error()) + log.Print("checkLastEnnoblements error: " + err.Error()) return } - log.Print("checkLastEnnoblements: total number of discord servers: ", total) + log.Print("checkLastEnnoblements: total number of loaded discord servers: ", total) langVersions := h.loadLangVersions(worlds) @@ -109,14 +110,14 @@ func (h *handler) checkLastEnnoblements() { if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" { continue } - for _, tribe := range server.Tribes { + for _, tribe := range server.Observations { es, ok := ennoblements[tribe.World] langVersion, ok2 := langVersions[utils.LanguageCodeFromWorldName(tribe.World)] if ok && ok2 { if server.LostVillagesChannelID != "" { - for _, ennoblement := range es.tribeLostVillages(tribe.TribeID) { + for _, ennoblement := range es.getLostVillagesByTribe(tribe.TribeID) { if !isPlayerTribeNil(ennoblement.NewOwner) && - server.Tribes.Contains(tribe.World, ennoblement.NewOwner.Tribe.ID) { + server.Observations.Contains(tribe.World, ennoblement.NewOwner.Tribe.ID) { continue } newMsgDataConfig := newMessageDataConfig{ @@ -136,9 +137,9 @@ func (h *handler) checkLastEnnoblements() { } if server.ConqueredVillagesChannelID != "" { - for _, ennoblement := range es.tribeConqueredVillages(tribe.TribeID) { + for _, ennoblement := range es.getConqueredVillagesByTribe(tribe.TribeID) { if !isPlayerTribeNil(ennoblement.OldOwner) && - server.Tribes.Contains(tribe.World, ennoblement.OldOwner.Tribe.ID) { + server.Observations.Contains(tribe.World, ennoblement.OldOwner.Tribe.ID) { continue } newMsgDataConfig := newMessageDataConfig{ @@ -160,3 +161,64 @@ func (h *handler) checkLastEnnoblements() { } } } + +func (h *handler) checkBotMembershipOnServers() { + servers, total, err := h.serverRepo.Fetch(context.Background(), nil) + if err != nil { + log.Print("checkBotMembershipOnServers error: " + err.Error()) + return + } + log.Print("checkBotMembershipOnServers: total number of loaded discord servers: ", total) + + idsToDelete := []string{} + for _, server := range servers { + if isGuildMember, _ := h.discord.IsGuildMember(server.ID); !isGuildMember { + idsToDelete = append(idsToDelete, server.ID) + } + } + + if len(idsToDelete) > 0 { + deleted, err := h.serverRepo.Delete(context.Background(), &models.ServerFilter{ + ID: idsToDelete, + }) + if err != nil { + log.Print("checkBotMembershipOnServers error: " + err.Error()) + } else { + log.Printf("checkBotMembershipOnServers: total number of deleted discord servers: %d", len(deleted)) + } + } +} + +func (h *handler) deleteClosedTribalwarsWorlds() { + worlds, err := h.observationRepo.FetchWorlds(context.Background()) + if err != nil { + log.Print("deleteClosedTribalwarsWorlds: " + err.Error()) + return + } + log.Print("deleteClosedTribalwarsWorlds: worlds: ", worlds) + + list, err := h.api.Servers.Browse(&shared_models.ServerFilter{ + Key: worlds, + Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed}, + }) + if err != nil { + log.Print("deleteClosedTribalwarsWorlds: " + err.Error()) + return + } + + keys := []string{} + for _, server := range list.Items { + keys = append(keys, server.Key) + } + + if len(keys) > 0 { + deleted, err := h.observationRepo.Delete(context.Background(), &models.ObservationFilter{ + World: keys, + }) + if err != nil { + log.Print("deleteClosedTribalwarsWorlds error: " + err.Error()) + } else { + log.Printf("deleteClosedTribalwarsWorlds: total number of deleted observations: %d", len(deleted)) + } + } +} diff --git a/cron/helpers.go b/cron/helpers.go index c7c74bf..38783e9 100644 --- a/cron/helpers.go +++ b/cron/helpers.go @@ -9,7 +9,8 @@ import ( func filterEnnoblements(ennoblements []*shared_models.Ennoblement, t time.Time) []*shared_models.Ennoblement { filtered := []*shared_models.Ennoblement{} for _, ennoblement := range ennoblements { - if ennoblement.EnnobledAt.In(time.UTC).Before(t) { + utc := ennoblement.EnnobledAt.In(time.UTC) + if utc.Before(t) || utc.Equal(t) { continue } filtered = append(filtered, ennoblement) diff --git a/discord/commands.go b/discord/commands.go index 339754d..03db915 100644 --- a/discord/commands.go +++ b/discord/commands.go @@ -15,14 +15,14 @@ import ( ) const ( - TribesPerServer = 10 + ObservationsPerServer = 10 ) type Command string const ( HelpCommand Command = "help" - AddCommand Command = "add" + ObserveCommand Command = "observe" ListCommand Command = "list" DeleteCommand Command = "delete" LostVillagesCommand Command = "lostvillages" @@ -70,7 +70,7 @@ func (s *Session) handleHelpCommand(m *discordgo.MessageCreate) { - %s - ustawia kanał na którym będą wyświetlać się informacje o straconych wioskach - %s - ustawia kanał na którym będą wyświetlać się informacje o podbitych wioskach `, - AddCommand.WithPrefix(s.cfg.CommandPrefix), + ObserveCommand.WithPrefix(s.cfg.CommandPrefix), ListCommand.WithPrefix(s.cfg.CommandPrefix), DeleteCommand.WithPrefix(s.cfg.CommandPrefix), ListCommand.WithPrefix(s.cfg.CommandPrefix), @@ -255,7 +255,7 @@ func (s *Session) handleConqueredVillagesCommand(m *discordgo.MessageCreate) { fmt.Sprintf("%s Pomyślnie zmieniono kanał na którym będą się wyświetlać informacje o podbitych wioskach.", m.Author.Mention())) } -func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { +func (s *Session) handleObserveCommand(m *discordgo.MessageCreate, args ...string) { if m.GuildID == "" { return } @@ -271,7 +271,7 @@ func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { s.SendMessage(m.ChannelID, fmt.Sprintf("%s %s [świat] [id plemienia]", m.Author.Mention(), - AddCommand.WithPrefix(s.cfg.CommandPrefix))) + ObserveCommand.WithPrefix(s.cfg.CommandPrefix))) return } @@ -281,7 +281,7 @@ func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { s.SendMessage(m.ChannelID, fmt.Sprintf("%s %s [świat] [id plemienia]", m.Author.Mention(), - AddCommand.WithPrefix(s.cfg.CommandPrefix))) + ObserveCommand.WithPrefix(s.cfg.CommandPrefix))) return } @@ -310,12 +310,12 @@ func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { return } - if len(dcServer.Tribes) >= TribesPerServer { - s.SendMessage(m.ChannelID, m.Author.Mention()+fmt.Sprintf(` Osiągnięto limit plemion (%d/%d).`, TribesPerServer, TribesPerServer)) + if len(dcServer.Observations) >= ObservationsPerServer { + s.SendMessage(m.ChannelID, m.Author.Mention()+fmt.Sprintf(` Osiągnięto limit plemion (%d/%d).`, ObservationsPerServer, ObservationsPerServer)) return } - err = s.cfg.TribeRepository.Store(context.Background(), &models.Tribe{ + err = s.cfg.ObservationRepository.Store(context.Background(), &models.Observation{ World: world, TribeID: id, ServerID: dcServer.ID, @@ -357,7 +357,7 @@ func (s *Session) handleDeleteCommand(m *discordgo.MessageCreate, args ...string return } - go s.cfg.TribeRepository.Delete(context.Background(), &models.TribeFilter{ + go s.cfg.ObservationRepository.Delete(context.Background(), &models.ObservationFilter{ ServerID: []string{m.GuildID}, ID: []int{id}, }) @@ -373,7 +373,7 @@ func (s *Session) handleListCommand(m *discordgo.MessageCreate) { return } - tribes, _, err := s.cfg.TribeRepository.Fetch(context.Background(), &models.TribeFilter{ + observations, _, err := s.cfg.ObservationRepository.Fetch(context.Background(), &models.ObservationFilter{ ServerID: []string{m.GuildID}, }) if err != nil { @@ -381,8 +381,8 @@ func (s *Session) handleListCommand(m *discordgo.MessageCreate) { } msg := "" - for i, tribe := range tribes { - msg += fmt.Sprintf("**%d**. %d - %s - %d\n", i+1, tribe.ID, tribe.World, tribe.TribeID) + for i, observation := range observations { + msg += fmt.Sprintf("**%d**. %d - %s - %d\n", i+1, observation.ID, observation.World, observation.TribeID) } s.SendEmbed(m.ChannelID, NewEmbed(). diff --git a/discord/discord.go b/discord/discord.go index 0790289..fd544c5 100644 --- a/discord/discord.go +++ b/discord/discord.go @@ -4,20 +4,20 @@ import ( "fmt" "strings" + "github.com/tribalwarshelp/dcbot/observation" "github.com/tribalwarshelp/dcbot/server" - "github.com/tribalwarshelp/dcbot/tribe" "github.com/tribalwarshelp/golang-sdk/sdk" "github.com/bwmarrin/discordgo" ) type SessionConfig struct { - Token string - CommandPrefix string - Status string - ServerRepository server.Repository - TribeRepository tribe.Repository - API *sdk.SDK + Token string + CommandPrefix string + Status string + ServerRepository server.Repository + ObservationRepository observation.Repository + API *sdk.SDK } type Session struct { @@ -79,8 +79,8 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre switch splitted[0] { case HelpCommand.WithPrefix(s.cfg.CommandPrefix): s.handleHelpCommand(m) - case AddCommand.WithPrefix(s.cfg.CommandPrefix): - s.handleAddCommand(m, args...) + case ObserveCommand.WithPrefix(s.cfg.CommandPrefix): + s.handleObserveCommand(m, args...) case DeleteCommand.WithPrefix(s.cfg.CommandPrefix): s.handleDeleteCommand(m, args...) case ListCommand.WithPrefix(s.cfg.CommandPrefix): @@ -131,3 +131,13 @@ func (s *Session) memberHasPermission(guildID string, userID string, permission func (s *Session) sendUnknownCommandError(mention, channelID string, command ...string) { s.SendMessage(channelID, mention+` Nieznana komenda: `+strings.Join(command, " ")) } + +func (s *Session) IsGuildMember(guildID string) (bool, error) { + _, err := s.dg.State.Guild(guildID) + if err != nil { + if _, err = s.dg.Guild(guildID); err != nil { + return false, err + } + } + return true, nil +} diff --git a/go.sum b/go.sum index 057424f..c72a8b0 100644 --- a/go.sum +++ b/go.sum @@ -99,14 +99,10 @@ github.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgh github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= -github.com/tribalwarshelp/golang-sdk v0.0.0-20200604163817-64920bab73bb h1:3arC78RszJkHTskhfPg/X4TXzlxHJFpF8FvDdFaavL8= -github.com/tribalwarshelp/golang-sdk v0.0.0-20200604163817-64920bab73bb/go.mod h1:8ALIvjiYLt0RVXz8TwDTJ3X5KAHv3M7+iYF/SvcA+1A= github.com/tribalwarshelp/golang-sdk v0.0.0-20200607150457-971c5e02b4df h1:nki0kQ7MyZnChZ7QDKyCc441rPEHBIZC8D3WWY0L+LM= github.com/tribalwarshelp/golang-sdk v0.0.0-20200607150457-971c5e02b4df/go.mod h1:8ALIvjiYLt0RVXz8TwDTJ3X5KAHv3M7+iYF/SvcA+1A= github.com/tribalwarshelp/shared v0.0.0-20200604161459-deeeccf99815 h1:c+BTJgJyif/HDt8bRxqNaK7zQReI59ho9yWdk7a/gNo= github.com/tribalwarshelp/shared v0.0.0-20200604161459-deeeccf99815/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y= -github.com/tribalwarshelp/shared v0.0.0-20200607152720-fcd5cd5455a3 h1:mMarqvZbHGPTg63QxB9BTgKgYfnBx6nePywslMJ1M4s= -github.com/tribalwarshelp/shared v0.0.0-20200607152720-fcd5cd5455a3/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y= github.com/tribalwarshelp/shared v0.0.0-20200607152914-8ab83c6d1364 h1:Pi3n/0FkrHrBO0oW9Lp6kRAEc4qKe7p8lohrEv4GOXE= github.com/tribalwarshelp/shared v0.0.0-20200607152914-8ab83c6d1364/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y= github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk= diff --git a/main.go b/main.go index 4d0631d..a4e8d77 100644 --- a/main.go +++ b/main.go @@ -10,8 +10,8 @@ import ( _cron "github.com/tribalwarshelp/dcbot/cron" "github.com/tribalwarshelp/dcbot/discord" + observation_repository "github.com/tribalwarshelp/dcbot/observation/repository" server_repository "github.com/tribalwarshelp/dcbot/server/repository" - tribe_repository "github.com/tribalwarshelp/dcbot/tribe/repository" "github.com/tribalwarshelp/shared/mode" @@ -46,17 +46,17 @@ func main() { if err != nil { log.Fatal(err) } - tribeRepo, err := tribe_repository.NewPgRepo(db) + observationRepo, err := observation_repository.NewPgRepo(db) if err != nil { log.Fatal(err) } sess, err := discord.New(discord.SessionConfig{ - Token: os.Getenv("BOT_TOKEN"), - CommandPrefix: "tw!", - Status: "Tribalwars | tw!help", - TribeRepository: tribeRepo, - ServerRepository: serverRepo, - API: api, + Token: os.Getenv("BOT_TOKEN"), + CommandPrefix: "tw!", + Status: "Tribalwars | tw!help", + ObservationRepository: observationRepo, + ServerRepository: serverRepo, + API: api, }) if err != nil { log.Fatal(err) @@ -67,10 +67,10 @@ func main() { cron.SkipIfStillRunning(cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))), )) _cron.Attach(c, _cron.Config{ - ServerRepo: serverRepo, - TribeRepo: tribeRepo, - Discord: sess, - API: api, + ServerRepo: serverRepo, + ObservationRepo: observationRepo, + Discord: sess, + API: api, }) go func() { c.Run() diff --git a/models/tribe.go b/models/observation.go similarity index 67% rename from models/tribe.go rename to models/observation.go index f0e6257..d4308c8 100644 --- a/models/tribe.go +++ b/models/observation.go @@ -1,6 +1,6 @@ package models -type Tribe struct { +type Observation struct { ID int `json:"id" gqlgen:"id"` World string `pg:"unique:group_1" json:"world" gqlgen:"world"` TribeID int `pg:"unique:group_1" json:"TribeID" gqlgen:"TribeID"` @@ -8,19 +8,20 @@ type Tribe struct { Server *Server `json:"server,omitempty" gqlgen:"server"` } -type Tribes []*Tribe +type Observations []*Observation -func (t Tribes) Contains(world string, id int) bool { - for _, tribe := range t { - if tribe.TribeID == id && tribe.World == world { +func (o Observations) Contains(world string, id int) bool { + for _, observation := range o { + if observation.TribeID == id && observation.World == world { return true } } return false } -type TribeFilter struct { +type ObservationFilter struct { ID []int + World []string ServerID []string Limit int `urlstruct:",nowhere"` Offset int `urlstruct:",nowhere"` diff --git a/models/server.go b/models/server.go index 1885eb7..eb88f2f 100644 --- a/models/server.go +++ b/models/server.go @@ -1,10 +1,10 @@ package models type Server struct { - ID string `pg:",pk" json:"id" gqlgen:"id"` - ConqueredVillagesChannelID string `json:"conqueredVillagesChannelID" gqlgen:"conqueredVillagesChannelID"` - LostVillagesChannelID string `json:"lostVillagesChannelID" gqlgen:"lostVillagesChannelID"` - Tribes Tribes `json:"tribes,omitempty" gqlgen:"tribes"` + ID string `pg:",pk" json:"id" gqlgen:"id"` + ConqueredVillagesChannelID string `json:"conqueredVillagesChannelID" gqlgen:"conqueredVillagesChannelID"` + LostVillagesChannelID string `json:"lostVillagesChannelID" gqlgen:"lostVillagesChannelID"` + Observations Observations `json:"observation,omitempty" gqlgen:"observation"` } type ServerFilter struct { diff --git a/observation/repository.go b/observation/repository.go new file mode 100644 index 0000000..df3c2e5 --- /dev/null +++ b/observation/repository.go @@ -0,0 +1,16 @@ +package observation + +import ( + "context" + + "github.com/tribalwarshelp/dcbot/models" +) + +type Repository interface { + Store(ctx context.Context, observation *models.Observation) error + StoreMany(ctx context.Context, observations []*models.Observation) error + Update(ctx context.Context, observation *models.Observation) error + Delete(ctx context.Context, filter *models.ObservationFilter) ([]*models.Observation, error) + Fetch(ctx context.Context, filter *models.ObservationFilter) ([]*models.Observation, int, error) + FetchWorlds(ctx context.Context) ([]string, error) +} diff --git a/tribe/repository/tribe_pg_repo.go b/observation/repository/observation_pg_repo.go similarity index 55% rename from tribe/repository/tribe_pg_repo.go rename to observation/repository/observation_pg_repo.go index 0ae84be..ac4ab75 100644 --- a/tribe/repository/tribe_pg_repo.go +++ b/observation/repository/observation_pg_repo.go @@ -4,7 +4,7 @@ import ( "context" "github.com/tribalwarshelp/dcbot/models" - "github.com/tribalwarshelp/dcbot/tribe" + "github.com/tribalwarshelp/dcbot/observation" "github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10/orm" @@ -15,33 +15,33 @@ type pgRepo struct { *pg.DB } -func NewPgRepo(db *pg.DB) (tribe.Repository, error) { - if err := db.CreateTable((*models.Tribe)(nil), &orm.CreateTableOptions{ +func NewPgRepo(db *pg.DB) (observation.Repository, error) { + if err := db.CreateTable((*models.Observation)(nil), &orm.CreateTableOptions{ IfNotExists: true, FKConstraints: true, }); err != nil { - return nil, errors.Wrap(err, "Cannot create 'tribes' table") + return nil, errors.Wrap(err, "Cannot create 'observations' table") } return &pgRepo{db}, nil } -func (repo *pgRepo) Store(ctx context.Context, tribe *models.Tribe) error { - if _, err := repo.Model(tribe).Returning("*").Context(ctx).Insert(); err != nil { +func (repo *pgRepo) Store(ctx context.Context, observation *models.Observation) error { + if _, err := repo.Model(observation).Returning("*").Context(ctx).Insert(); err != nil { return err } return nil } -func (repo *pgRepo) StoreMany(ctx context.Context, tribes []*models.Tribe) error { - if _, err := repo.Model(&tribes).Returning("*").Context(ctx).Insert(); err != nil { +func (repo *pgRepo) StoreMany(ctx context.Context, observations []*models.Observation) error { + if _, err := repo.Model(&observations).Returning("*").Context(ctx).Insert(); err != nil { return err } return nil } -func (repo *pgRepo) Update(ctx context.Context, tribe *models.Tribe) error { +func (repo *pgRepo) Update(ctx context.Context, observation *models.Observation) error { if _, err := repo. - Model(tribe). + Model(observation). WherePK(). Returning("*"). Context(ctx). @@ -51,9 +51,9 @@ func (repo *pgRepo) Update(ctx context.Context, tribe *models.Tribe) error { return nil } -func (repo *pgRepo) Fetch(ctx context.Context, f *models.TribeFilter) ([]*models.Tribe, int, error) { +func (repo *pgRepo) Fetch(ctx context.Context, f *models.ObservationFilter) ([]*models.Observation, int, error) { var err error - data := []*models.Tribe{} + data := []*models.Observation{} query := repo.Model(&data).Context(ctx) if f != nil { @@ -76,7 +76,7 @@ func (repo *pgRepo) Fetch(ctx context.Context, f *models.TribeFilter) ([]*models } func (repo *pgRepo) FetchWorlds(ctx context.Context) ([]string, error) { - data := []*models.Tribe{} + data := []*models.Observation{} res := []string{} err := repo. Model(&data). @@ -88,8 +88,8 @@ func (repo *pgRepo) FetchWorlds(ctx context.Context) ([]string, error) { return res, err } -func (repo *pgRepo) Delete(ctx context.Context, f *models.TribeFilter) ([]*models.Tribe, error) { - data := []*models.Tribe{} +func (repo *pgRepo) Delete(ctx context.Context, f *models.ObservationFilter) ([]*models.Observation, error) { + data := []*models.Observation{} query := repo.Model(&data).Context(ctx) if f != nil { diff --git a/server/repository/server_pg_repo.go b/server/repository/server_pg_repo.go index 77d6f9e..5fe81db 100644 --- a/server/repository/server_pg_repo.go +++ b/server/repository/server_pg_repo.go @@ -52,7 +52,7 @@ func (repo *pgRepo) Update(ctx context.Context, server *models.Server) error { func (repo *pgRepo) Fetch(ctx context.Context, f *models.ServerFilter) ([]*models.Server, int, error) { var err error data := []*models.Server{} - query := repo.Model(&data).Context(ctx).Relation("Tribes") + query := repo.Model(&data).Context(ctx).Relation("Observations") if f != nil { query = query. diff --git a/tribe/repository.go b/tribe/repository.go deleted file mode 100644 index f32809d..0000000 --- a/tribe/repository.go +++ /dev/null @@ -1,16 +0,0 @@ -package tribe - -import ( - "context" - - "github.com/tribalwarshelp/dcbot/models" -) - -type Repository interface { - Store(ctx context.Context, tribe *models.Tribe) error - StoreMany(ctx context.Context, tribes []*models.Tribe) error - Update(ctx context.Context, tribe *models.Tribe) error - Delete(ctx context.Context, filter *models.TribeFilter) ([]*models.Tribe, error) - Fetch(ctx context.Context, filter *models.TribeFilter) ([]*models.Tribe, int, error) - FetchWorlds(ctx context.Context) ([]string, error) -}