This repository has been archived on 2022-09-04. You can view files and clone it, but cannot push or open issues or pull requests.
dataupdater/queue/task_update_server_ennoblem...

77 lines
2.0 KiB
Go

package queue
import (
"github.com/go-pg/pg/v10"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/tw/twdataloader"
"github.com/tribalwarshelp/shared/tw/twmodel"
)
type taskUpdateServerEnnoblements struct {
*task
}
func (t *taskUpdateServerEnnoblements) execute(url string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil {
log.Debug(errors.Wrap(err, "taskUpdateServerEnnoblements.execute"))
return nil
}
entry := log.WithField("key", server.Key)
entry.Debugf("%s: update of the ennoblements has started...", server.Key)
err := (&workerUpdateServerEnnoblements{
db: t.db.WithParam("SERVER", pg.Safe(server.Key)),
dataloader: newServerDataLoader(url),
}).update()
if err != nil {
err = errors.Wrap(err, "taskUpdateServerEnnoblements.execute")
entry.Error(err)
return err
}
entry.Debugf("%s: the ennoblements have been updated", server.Key)
return nil
}
func (t *taskUpdateServerEnnoblements) validatePayload(server *twmodel.Server) error {
if server == nil {
return errors.Errorf("expected *twmodel.Server, got nil")
}
return nil
}
type workerUpdateServerEnnoblements struct {
db *pg.DB
dataloader *twdataloader.ServerDataLoader
}
func (w *workerUpdateServerEnnoblements) loadEnnoblements() ([]*twmodel.Ennoblement, error) {
lastEnnoblement := &twmodel.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(&twdataloader.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).Returning("NULL").Insert(); err != nil {
return errors.Wrap(err, "couldn't insert ennoblements")
}
}
return nil
}