add 2 new triggers, one logs player name change, second sets deleted_at | bump github.com/tribalwarshelp/shared

This commit is contained in:
Dawid Wysokiński 2020-06-24 16:44:10 +02:00 committed by Kichiyaki
parent bf958c88b6
commit 7bca0d25e5
3 changed files with 76 additions and 12 deletions

View File

@ -35,6 +35,22 @@ const (
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE OR REPLACE FUNCTION ?0.log_player_name_change()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.name <> OLD.name THEN
INSERT INTO player_name_changes(lang_version_tag,player_id,old_name,new_name,changed_on)
VALUES(?1,NEW.id,OLD.name,NEW.name,CURRENT_DATE)
ON CONFLICT DO NOTHING;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE OR REPLACE FUNCTION ?0.get_old_and_new_owner_tribe_id()
RETURNS trigger AS
$BODY$
@ -60,6 +76,7 @@ const (
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE OR REPLACE FUNCTION check_daily_growth()
RETURNS trigger AS
$BODY$
@ -72,6 +89,23 @@ const (
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION check_existence()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.exist = false AND OLD.exist = true THEN
NEW.deleted_at = now();
END IF;
IF NEW.exist = true THEN
NEW.deleted_at = null;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION check_dominance()
RETURNS trigger AS
$BODY$
@ -84,6 +118,7 @@ const (
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ?0.insert_to_player_to_servers()
RETURNS trigger AS
$BODY$
@ -104,24 +139,49 @@ const (
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE ?0.log_tribe_change();
DROP TRIGGER IF EXISTS ?0_name_change ON ?0.players;
CREATE TRIGGER ?0_name_change
AFTER UPDATE
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE ?0.log_player_name_change();
DROP TRIGGER IF EXISTS ?0_check_daily_growth ON ?0.players;
CREATE TRIGGER ?0_check_daily_growth
BEFORE UPDATE
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE check_daily_growth();
DROP TRIGGER IF EXISTS ?0_check_player_existence ON ?0.players;
CREATE TRIGGER ?0_check_player_existence
BEFORE UPDATE
ON ?0.players
FOR EACH ROW
EXECUTE PROCEDURE check_existence();
DROP TRIGGER IF EXISTS ?0_check_tribe_existence ON ?0.tribes;
CREATE TRIGGER ?0_check_tribe_existence
BEFORE UPDATE
ON ?0.tribes
FOR EACH ROW
EXECUTE PROCEDURE check_existence();
DROP TRIGGER IF EXISTS ?0_check_dominance ON ?0.tribes;
CREATE TRIGGER ?0_check_dominance
BEFORE UPDATE
ON ?0.tribes
FOR EACH ROW
EXECUTE PROCEDURE check_dominance();
DROP TRIGGER IF EXISTS ?0_update_ennoblement_old_and_new_owner_tribe_id ON ?0.ennoblements;
CREATE TRIGGER ?0_update_ennoblement_old_and_new_owner_tribe_id
BEFORE INSERT
ON ?0.ennoblements
FOR EACH ROW
EXECUTE PROCEDURE ?0.get_old_and_new_owner_tribe_id();
DROP TRIGGER IF EXISTS ?0_insert_to_player_to_servers ON ?0.players;
CREATE TRIGGER ?0_insert_to_player_to_servers
AFTER INSERT
@ -171,6 +231,7 @@ func (h *handler) init() error {
(*models.Server)(nil),
(*models.LangVersion)(nil),
(*models.PlayerToServer)(nil),
(*models.PlayerNameChange)(nil),
}
for _, model := range models {
@ -185,14 +246,14 @@ func (h *handler) init() error {
return tx.Commit()
}
func (h *handler) createSchema(key string) error {
tx, err := h.db.WithParam("SERVER", pg.Safe(key)).Begin()
func (h *handler) createSchema(server *models.Server) error {
tx, err := h.db.WithParam("SERVER", pg.Safe(server.Key)).Begin()
if err != nil {
return err
}
defer tx.Close()
if _, err := tx.Exec(fmt.Sprintf("CREATE SCHEMA IF NOT EXISTS %s", key)); err != nil {
if _, err := tx.Exec(fmt.Sprintf("CREATE SCHEMA IF NOT EXISTS %s", server.Key)); err != nil {
return err
}
@ -220,7 +281,7 @@ func (h *handler) createSchema(key string) error {
serverPGFunctions,
serverPGTriggers,
} {
if _, err := tx.Exec(statement, pg.Safe(key)); err != nil {
if _, err := tx.Exec(statement, pg.Safe(server.Key), server.LangVersionTag); err != nil {
return err
}
}
@ -259,18 +320,19 @@ func (h *handler) getServers() ([]*models.Server, map[string]string, error) {
if langVersion.SpecialServers.Contains(serverKeyStr) {
continue
}
if err := h.createSchema(serverKeyStr); err != nil {
server := &models.Server{
Key: serverKeyStr,
Status: models.ServerStatusOpen,
LangVersionTag: langVersion.Tag,
LangVersion: langVersion,
}
if err := h.createSchema(server); err != nil {
log.Print(errors.Wrapf(err, "Cannot create schema for %s", serverKey))
continue
}
serverKeys = append(serverKeys, serverKeyStr)
urls[serverKeyStr] = url.(string)
servers = append(servers, &models.Server{
Key: serverKeyStr,
Status: models.ServerStatusOpen,
LangVersionTag: langVersion.Tag,
LangVersion: langVersion,
})
servers = append(servers, server)
}
}

2
go.mod
View File

@ -8,6 +8,6 @@ require (
github.com/joho/godotenv v1.3.0
github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6
github.com/tribalwarshelp/shared v0.0.0-20200624134544-636239c5fd17
golang.org/x/net v0.0.0-20200528225125-3c3fba18258b // indirect
)

2
go.sum
View File

@ -92,6 +92,8 @@ github.com/tribalwarshelp/shared v0.0.0-20200623082627-128bf01a6570 h1:W2cBKRRvr
github.com/tribalwarshelp/shared v0.0.0-20200623082627-128bf01a6570/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6 h1:WZ1oxHysFtiPjHa2ADUqiGrzwcN3j0YpiVg/V2e/74o=
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200624134544-636239c5fd17 h1:DUMz3ROe2nYRszZuu97LVIgdPrt8QBWAVouFlrucL8c=
github.com/tribalwarshelp/shared v0.0.0-20200624134544-636239c5fd17/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=