diff --git a/pkg/models/events.go b/pkg/models/events.go index 1cd8e341c..a17c6b98f 100644 --- a/pkg/models/events.go +++ b/pkg/models/events.go @@ -194,3 +194,25 @@ type TeamMemberAddedEvent struct { func (t *TeamMemberAddedEvent) TopicName() string { return "team.member.added" } + +// TeamCreatedEvent represents a TeamCreatedEvent event +type TeamCreatedEvent struct { + Team *Team + Doer *user.User +} + +// TopicName defines the name for TeamCreatedEvent +func (t *TeamCreatedEvent) TopicName() string { + return "team.created" +} + +// TeamDeletedEvent represents a TeamDeletedEvent event +type TeamDeletedEvent struct { + Team *Team + Doer *user.User +} + +// TopicName defines the name for TeamDeletedEvent +func (t *TeamDeletedEvent) TopicName() string { + return "team.deleted" +} diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index 02ffab457..0874f869b 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -29,6 +29,8 @@ func RegisterListeners() { events.RegisterListener((&NamespaceDeletedEvent{}).TopicName(), &DecreaseNamespaceCounter{}) events.RegisterListener((&TaskCreatedEvent{}).TopicName(), &IncreaseTaskCounter{}) events.RegisterListener((&TaskDeletedEvent{}).TopicName(), &DecreaseTaskCounter{}) + events.RegisterListener((&TeamDeletedEvent{}).TopicName(), &DecreaseTeamCounter{}) + events.RegisterListener((&TeamCreatedEvent{}).TopicName(), &IncreaseTeamCounter{}) } ////// @@ -123,3 +125,36 @@ func (s *DecreaseNamespaceCounter) Handle(payload message.Payload) (err error) { metrics.UpdateCount(-1, metrics.NamespaceCountKey) return nil } + +/////// +// Team Events + +// IncreaseTeamCounter represents a listener +type IncreaseTeamCounter struct { +} + +// Name defines the name for the IncreaseTeamCounter listener +func (s *IncreaseTeamCounter) Name() string { + return "team.counter.increase" +} + +// Hanlde is executed when the event IncreaseTeamCounter listens on is fired +func (s *IncreaseTeamCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(1, metrics.TeamCountKey) + return nil +} + +// DecreaseTeamCounter represents a listener +type DecreaseTeamCounter struct { +} + +// Name defines the name for the DecreaseTeamCounter listener +func (s *DecreaseTeamCounter) Name() string { + return "team.counter.decrease" +} + +// Hanlde is executed when the event DecreaseTeamCounter listens on is fired +func (s *DecreaseTeamCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(-1, metrics.TeamCountKey) + return nil +} diff --git a/pkg/models/teams.go b/pkg/models/teams.go index 39a877177..49798ac7d 100644 --- a/pkg/models/teams.go +++ b/pkg/models/teams.go @@ -17,11 +17,11 @@ package models import ( + "code.vikunja.io/api/pkg/events" "time" "xorm.io/xorm" - "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/user" "code.vikunja.io/web" "xorm.io/builder" @@ -270,8 +270,10 @@ func (t *Team) Create(s *xorm.Session, a web.Auth) (err error) { return err } - metrics.UpdateCount(1, metrics.TeamCountKey) - return + return events.Publish(&TeamCreatedEvent{ + Team: t, + Doer: doer, + }) } // Delete deletes a team @@ -311,8 +313,14 @@ func (t *Team) Delete(s *xorm.Session, a web.Auth) (err error) { return } - metrics.UpdateCount(-1, metrics.TeamCountKey) - return + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + return events.Publish(&TeamDeletedEvent{ + Team: t, + Doer: doer, + }) } // Update is the handler to create a team