2020-06-25 11:24:06 +00:00
|
|
|
package cron
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/tribalwarshelp/shared/models"
|
|
|
|
)
|
|
|
|
|
2020-10-10 09:45:52 +00:00
|
|
|
const (
|
|
|
|
day = 24 * time.Hour
|
|
|
|
)
|
|
|
|
|
2020-10-10 06:43:52 +00:00
|
|
|
type vacuumServerDBWorker struct {
|
2020-06-25 11:24:06 +00:00
|
|
|
db *pg.DB
|
|
|
|
}
|
|
|
|
|
2020-10-10 06:43:52 +00:00
|
|
|
func (h *vacuumServerDBWorker) vacuum() error {
|
2020-06-25 11:24:06 +00:00
|
|
|
tx, err := h.db.Begin()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer tx.Close()
|
|
|
|
|
2020-12-28 12:09:54 +00:00
|
|
|
withNonExistentPlayers := h.db.Model(&models.Player{}).Column("id").Where("exists = false and NOW() - deleted_at > '14 days'")
|
2020-12-28 12:10:07 +00:00
|
|
|
withNonExistentTribes := h.db.Model(&models.Tribe{}).Column("id").Where("exists = false and NOW() - deleted_at > '1 days'")
|
2020-06-25 11:24:06 +00:00
|
|
|
|
|
|
|
_, err = tx.Model(&models.PlayerHistory{}).
|
2020-10-10 09:45:52 +00:00
|
|
|
With("players", withNonExistentPlayers).
|
2020-12-28 12:09:54 +00:00
|
|
|
Where("player_id IN (Select id FROM players) OR player_history.create_date < ?", time.Now().Add(-1*day*180)).
|
2020-06-25 11:24:06 +00:00
|
|
|
Delete()
|
|
|
|
if err != nil {
|
2021-01-13 19:27:20 +00:00
|
|
|
return errors.Wrap(err, "cannot delete old player history records")
|
2020-06-25 11:24:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_, err = tx.Model(&models.TribeHistory{}).
|
2020-10-10 09:45:52 +00:00
|
|
|
With("tribes", withNonExistentTribes).
|
2020-12-28 12:09:54 +00:00
|
|
|
Where("tribe_id IN (Select id FROM tribes) OR tribe_history.create_date < ?", time.Now().Add(-1*day*180)).
|
2020-06-25 11:24:06 +00:00
|
|
|
Delete()
|
|
|
|
if err != nil {
|
2021-01-13 19:27:20 +00:00
|
|
|
return errors.Wrap(err, "cannot delete old tribe history records")
|
2020-06-25 11:24:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_, err = tx.Model(&models.DailyPlayerStats{}).
|
2020-10-10 09:45:52 +00:00
|
|
|
With("players", withNonExistentPlayers).
|
2020-12-28 12:09:54 +00:00
|
|
|
Where("player_id IN (Select id FROM players) OR daily_player_stats.create_date < ?", time.Now().Add(-1*day*180)).
|
2020-06-25 11:24:06 +00:00
|
|
|
Delete()
|
|
|
|
if err != nil {
|
2021-01-13 19:27:20 +00:00
|
|
|
return errors.Wrap(err, "cannot delete old player stats records")
|
2020-06-25 11:24:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_, err = tx.Model(&models.DailyTribeStats{}).
|
2020-10-10 09:45:52 +00:00
|
|
|
With("tribes", withNonExistentTribes).
|
2020-12-28 12:09:54 +00:00
|
|
|
Where("tribe_id IN (Select id FROM tribes) OR daily_tribe_stats.create_date < ?", time.Now().Add(-1*day*180)).
|
2020-06-25 11:24:06 +00:00
|
|
|
Delete()
|
|
|
|
if err != nil {
|
2021-01-13 19:27:20 +00:00
|
|
|
return errors.Wrap(err, "cannot delete old tribe stats records")
|
2020-06-25 11:24:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return tx.Commit()
|
|
|
|
}
|