This commit is contained in:
Dawid Wysokiński 2020-06-25 14:58:12 +02:00 committed by Kichiyaki
parent 15bc841486
commit b0244869d1
8 changed files with 95 additions and 22 deletions

View File

@ -285,7 +285,7 @@ func (h *handler) updateServersStats(t time.Time) error {
servers := []*models.Server{}
err := h.db.
Model(&servers).
Where("status = ? AND (stats_updated_at < ? OR stats_updated_at IS NULL)", models.ServerStatusOpen, t).
Where("status = ? AND (stats_updated_at < ? OR stats_updated_at IS NULL)", models.ServerStatusOpen, t).
Select()
if err != nil {
return errors.Wrap(err, "updateServersStats")

View File

@ -61,7 +61,7 @@ const (
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.exist = false THEN
IF NEW.exists = false THEN
NEW.daily_growth = 0;
END IF;
@ -74,10 +74,10 @@ const (
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.exist = false AND OLD.exist = true THEN
IF NEW.exists = false AND OLD.exists = true THEN
NEW.deleted_at = now();
END IF;
IF NEW.exist = true THEN
IF NEW.exists = true THEN
NEW.deleted_at = null;
END IF;
@ -90,7 +90,7 @@ const (
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.exist = false THEN
IF NEW.exists = false THEN
NEW.dominance = 0;
END IF;
@ -99,6 +99,50 @@ const (
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION check_most_points_most_villages_best_rank_values()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.most_points IS null OR NEW.points > NEW.most_points THEN
NEW.most_points = NEW.points;
NEW.most_points_at = now();
END IF;
IF NEW.most_villages IS null OR NEW.total_villages > NEW.most_villages THEN
NEW.most_villages = NEW.total_villages;
NEW.most_villages_at = now();
END IF;
IF NEW.best_rank IS null OR NEW.rank > NEW.best_rank THEN
NEW.best_rank = NEW.rank;
NEW.best_rank_at = now();
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION update_most_points_most_villages_best_rank()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.most_points IS null OR NEW.points > OLD.most_points THEN
NEW.most_points = NEW.points;
NEW.most_points_at = now();
END IF;
IF NEW.most_villages IS null OR NEW.total_villages > OLD.most_villages THEN
NEW.most_villages = NEW.total_villages;
NEW.most_villages_at = now();
END IF;
IF NEW.best_rank IS null OR NEW.rank > OLD.best_rank THEN
NEW.best_rank = NEW.rank;
NEW.best_rank_at = now();
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ?0.insert_to_player_to_servers()
RETURNS trigger AS
$BODY$
@ -168,5 +212,33 @@ const (
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE ?0.insert_to_player_to_servers();
DROP TRIGGER IF EXISTS ?0_update_most_points_most_villages_best_rank ON ?0.players;
CREATE TRIGGER ?0_update_most_points_most_villages_best_rank
BEFORE UPDATE
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE update_most_points_most_villages_best_rank();
DROP TRIGGER IF EXISTS ?0_check_points_villages_rank ON ?0.players;
CREATE TRIGGER ?0_check_points_villages_rank
BEFORE INSERT
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE check_most_points_most_villages_best_rank_values();
DROP TRIGGER IF EXISTS ?0_update_most_points_most_villages_best_rank ON ?0.tribes;
CREATE TRIGGER ?0_update_most_points_most_villages_best_rank
BEFORE UPDATE
ON ?0.tribes
FOR EACH ROW
EXECUTE PROCEDURE update_most_points_most_villages_best_rank();
DROP TRIGGER IF EXISTS ?0_check_points_villages_rank ON ?0.tribes;
CREATE TRIGGER ?0_check_points_villages_rank
BEFORE INSERT
ON ?0.tribes
FOR EACH ROW
EXECUTE PROCEDURE check_most_points_most_villages_best_rank_values();
`
)

View File

@ -122,7 +122,7 @@ func (h *updateServerDataHandler) parsePlayerLine(line []string) (*models.Player
var err error
ex := true
player := &models.Player{
Exist: &ex,
Exists: &ex,
}
player.ID, err = strconv.Atoi(line[0])
if err != nil {
@ -190,7 +190,7 @@ func (h *updateServerDataHandler) parseTribeLine(line []string) (*models.Tribe,
var err error
ex := true
tribe := &models.Tribe{
Exist: &ex,
Exists: &ex,
}
tribe.ID, err = strconv.Atoi(line[0])
if err != nil {
@ -531,7 +531,7 @@ func (h *updateServerDataHandler) update() error {
Set("points = EXCLUDED.points").
Set("all_points = EXCLUDED.all_points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Set("exists = EXCLUDED.exists").
Set("dominance = EXCLUDED.dominance").
Apply(attachODSetClauses).
Insert(); err != nil {
@ -544,7 +544,7 @@ func (h *updateServerDataHandler) update() error {
}
if _, err := tx.Model(&models.Tribe{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Set("exists = false").
Update(); err != nil && err != pg.ErrNoRows {
return errors.Wrap(err, "cannot update not exist tribes")
}
@ -583,7 +583,7 @@ func (h *updateServerDataHandler) update() error {
Set("total_villages = EXCLUDED.total_villages").
Set("points = EXCLUDED.points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Set("exists = EXCLUDED.exists").
Set("tribe_id = EXCLUDED.tribe_id").
Set("daily_growth = EXCLUDED.daily_growth").
Apply(attachODSetClauses).
@ -597,7 +597,7 @@ func (h *updateServerDataHandler) update() error {
}
if _, err := tx.Model(&models.Player{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Set("exists = false").
Update(); err != nil && err != pg.ErrNoRows {
return errors.Wrap(err, "cannot update not exist players")
}

View File

@ -15,9 +15,10 @@ type updateServerHistoryHandler struct {
func (h *updateServerHistoryHandler) update() error {
players := []*models.Player{}
if err := h.db.Model(&players).Where("exist = true").Select(); err != nil {
if err := h.db.Model(&players).Where("exists = true").Select(); err != nil {
return errors.Wrap(err, "cannot load players")
}
ph := []*models.PlayerHistory{}
for _, player := range players {
ph = append(ph, &models.PlayerHistory{
@ -31,7 +32,7 @@ func (h *updateServerHistoryHandler) update() error {
}
tribes := []*models.Tribe{}
if err := h.db.Model(&tribes).Where("exist = true").Select(); err != nil {
if err := h.db.Model(&tribes).Where("exists = true").Select(); err != nil {
return errors.Wrap(err, "cannot load tribes")
}
th := []*models.TribeHistory{}

View File

@ -14,21 +14,21 @@ type updateServerStatsHandler struct {
}
func (h *updateServerStatsHandler) prepare() (*models.ServerStats, error) {
activePlayers, err := h.db.Model(&models.Player{}).Where("exist = true").Count()
activePlayers, err := h.db.Model(&models.Player{}).Where("exists = true").Count()
if err != nil {
return nil, errors.Wrap(err, "cannot count active players")
}
inactivePlayers, err := h.db.Model(&models.Player{}).Where("exist = false").Count()
inactivePlayers, err := h.db.Model(&models.Player{}).Where("exists = false").Count()
if err != nil {
return nil, errors.Wrap(err, "cannot count inactive players")
}
players := activePlayers + inactivePlayers
activeTribes, err := h.db.Model(&models.Tribe{}).Where("exist = true").Count()
activeTribes, err := h.db.Model(&models.Tribe{}).Where("exists = true").Count()
if err != nil {
return nil, errors.Wrap(err, "cannot count active tribes")
}
inactiveTribes, err := h.db.Model(&models.Tribe{}).Where("exist = false").Count()
inactiveTribes, err := h.db.Model(&models.Tribe{}).Where("exists = false").Count()
if err != nil {
return nil, errors.Wrap(err, "cannot count inactive tribes")
}

View File

@ -19,8 +19,8 @@ func (h *vacuumServerDBHandler) vacuum() error {
}
defer tx.Close()
withNotExitedPlayers := h.db.Model(&models.Player{}).Where("exist = false")
withNotExitedTribes := h.db.Model(&models.Tribe{}).Where("exist = false")
withNotExitedPlayers := h.db.Model(&models.Player{}).Where("exists = false")
withNotExitedTribes := h.db.Model(&models.Tribe{}).Where("exists = false")
_, err = tx.Model(&models.PlayerHistory{}).
With("players", withNotExitedPlayers).

2
go.mod
View File

@ -9,7 +9,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1
github.com/segmentio/encoding v0.1.14 // indirect
github.com/tribalwarshelp/shared v0.0.0-20200625103607-9768e416aea9
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662
golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 // indirect
google.golang.org/grpc v1.30.0 // indirect

4
go.sum
View File

@ -92,8 +92,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
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/shared v0.0.0-20200625103607-9768e416aea9 h1:CHeznuISvmlW1pYpnA7Bz3nVdQ6kc9ORtGtIKEKH8M8=
github.com/tribalwarshelp/shared v0.0.0-20200625103607-9768e416aea9/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662 h1:GBCpdHQsOrbz7xz+bTsZlFQJzKi1wsxgAeVFsNIZiH4=
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=