2020-06-20 18:16:27 +00:00
|
|
|
package cron
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/tribalwarshelp/shared/models"
|
|
|
|
)
|
|
|
|
|
2020-10-10 06:43:52 +00:00
|
|
|
type updateServerHistoryWorker struct {
|
2020-12-31 13:33:56 +00:00
|
|
|
db *pg.DB
|
|
|
|
server *models.Server
|
|
|
|
location *time.Location
|
2020-06-20 18:16:27 +00:00
|
|
|
}
|
|
|
|
|
2020-10-10 06:43:52 +00:00
|
|
|
func (h *updateServerHistoryWorker) update() error {
|
2020-06-20 18:16:27 +00:00
|
|
|
players := []*models.Player{}
|
2020-06-25 12:58:12 +00:00
|
|
|
if err := h.db.Model(&players).Where("exists = true").Select(); err != nil {
|
2020-10-24 18:49:02 +00:00
|
|
|
return errors.Wrap(err, "couldnt load players")
|
2020-06-20 18:16:27 +00:00
|
|
|
}
|
2020-06-25 12:58:12 +00:00
|
|
|
|
2020-12-31 13:33:56 +00:00
|
|
|
now := time.Now().In(h.location)
|
|
|
|
createDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC)
|
2020-06-20 18:16:27 +00:00
|
|
|
ph := []*models.PlayerHistory{}
|
|
|
|
for _, player := range players {
|
|
|
|
ph = append(ph, &models.PlayerHistory{
|
|
|
|
OpponentsDefeated: player.OpponentsDefeated,
|
|
|
|
PlayerID: player.ID,
|
|
|
|
TotalVillages: player.TotalVillages,
|
|
|
|
Points: player.Points,
|
|
|
|
Rank: player.Rank,
|
|
|
|
TribeID: player.TribeID,
|
2020-07-15 08:19:11 +00:00
|
|
|
CreateDate: createDate,
|
2020-06-20 18:16:27 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
tribes := []*models.Tribe{}
|
2020-06-25 12:58:12 +00:00
|
|
|
if err := h.db.Model(&tribes).Where("exists = true").Select(); err != nil {
|
2020-10-24 18:49:02 +00:00
|
|
|
return errors.Wrap(err, "couldnt load tribes")
|
2020-06-20 18:16:27 +00:00
|
|
|
}
|
|
|
|
th := []*models.TribeHistory{}
|
|
|
|
for _, tribe := range tribes {
|
|
|
|
th = append(th, &models.TribeHistory{
|
|
|
|
OpponentsDefeated: tribe.OpponentsDefeated,
|
|
|
|
TribeID: tribe.ID,
|
|
|
|
TotalMembers: tribe.TotalMembers,
|
|
|
|
TotalVillages: tribe.TotalVillages,
|
|
|
|
Points: tribe.Points,
|
|
|
|
AllPoints: tribe.AllPoints,
|
|
|
|
Rank: tribe.Rank,
|
2020-06-21 09:27:56 +00:00
|
|
|
Dominance: tribe.Dominance,
|
2020-07-15 08:19:11 +00:00
|
|
|
CreateDate: createDate,
|
2020-06-20 18:16:27 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
tx, err := h.db.Begin()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer tx.Close()
|
|
|
|
|
|
|
|
if len(ph) > 0 {
|
|
|
|
if _, err := h.db.Model(&ph).Insert(); err != nil {
|
2020-10-24 18:49:02 +00:00
|
|
|
return errors.Wrap(err, "couldnt insert players history")
|
2020-06-20 18:16:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(th) > 0 {
|
|
|
|
if _, err := h.db.Model(&th).Insert(); err != nil {
|
2020-10-24 18:49:02 +00:00
|
|
|
return errors.Wrap(err, "couldnt insert tribes history")
|
2020-06-20 18:16:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, err := tx.Model(h.server).
|
|
|
|
Set("history_updated_at = ?", time.Now()).
|
|
|
|
WherePK().
|
|
|
|
Returning("*").
|
|
|
|
Update(); err != nil {
|
2020-10-24 18:49:02 +00:00
|
|
|
return errors.Wrap(err, "couldnt update server")
|
2020-06-20 18:16:27 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return tx.Commit()
|
|
|
|
}
|