2021-04-25 17:20:38 +00:00
|
|
|
package tasks
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/tribalwarshelp/shared/models"
|
|
|
|
"github.com/tribalwarshelp/shared/tw/dataloader"
|
|
|
|
)
|
|
|
|
|
|
|
|
type taskUpdateServerEnnoblements struct {
|
|
|
|
*task
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t *taskUpdateServerEnnoblements) execute(url string, server *models.Server) error {
|
|
|
|
if err := t.validatePayload(server); err != nil {
|
|
|
|
log.Debug(err)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
entry := log.WithField("key", server.Key)
|
|
|
|
entry.Debugf("%s: update of the ennoblements has started...", server.Key)
|
|
|
|
err := (&workerUpdateServerEnnoblements{
|
2021-04-25 18:24:26 +00:00
|
|
|
db: t.db.WithParam("SERVER", pg.Safe(server.Key)),
|
|
|
|
dataloader: newDataloader(url),
|
2021-04-25 17:20:38 +00:00
|
|
|
}).update()
|
|
|
|
if err != nil {
|
|
|
|
err = errors.Wrap(err, "taskUpdateServerEnnoblements.execute")
|
|
|
|
entry.Error(err)
|
|
|
|
return err
|
|
|
|
}
|
2021-05-01 05:43:34 +00:00
|
|
|
entry.Debugf("%s: ennoblements have been updated", server.Key)
|
2021-04-25 17:20:38 +00:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t *taskUpdateServerEnnoblements) validatePayload(server *models.Server) error {
|
|
|
|
if server == nil {
|
2021-04-25 17:58:33 +00:00
|
|
|
return errors.Errorf("taskUpdateServerEnnoblements.validatePayload: Expected *models.Server, got nil")
|
2021-04-25 17:20:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type workerUpdateServerEnnoblements struct {
|
|
|
|
db *pg.DB
|
|
|
|
dataloader dataloader.DataLoader
|
|
|
|
}
|
|
|
|
|
|
|
|
func (w *workerUpdateServerEnnoblements) loadEnnoblements() ([]*models.Ennoblement, error) {
|
|
|
|
lastEnnoblement := &models.Ennoblement{}
|
|
|
|
if err := w.db.
|
|
|
|
Model(lastEnnoblement).
|
|
|
|
Limit(1).
|
|
|
|
Order("ennobled_at DESC").
|
|
|
|
Select(); err != nil && err != pg.ErrNoRows {
|
|
|
|
return nil, errors.Wrapf(err, "couldn't load last ennoblement")
|
|
|
|
}
|
|
|
|
|
|
|
|
return w.dataloader.LoadEnnoblements(&dataloader.LoadEnnoblementsConfig{
|
|
|
|
EnnobledAtGT: lastEnnoblement.EnnobledAt,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func (w *workerUpdateServerEnnoblements) update() error {
|
|
|
|
ennoblements, err := w.loadEnnoblements()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(ennoblements) > 0 {
|
|
|
|
if _, err := w.db.Model(&ennoblements).Insert(); err != nil {
|
|
|
|
return errors.Wrap(err, "couldn't insert ennoblements")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|