diff --git a/pkg/models/events.go b/pkg/models/events.go index fddd80ded..fff1662fb 100644 --- a/pkg/models/events.go +++ b/pkg/models/events.go @@ -129,3 +129,23 @@ type ListSharedWithTeamEvent struct { func (l *ListSharedWithTeamEvent) TopicName() string { return "list.shared.team" } + +type NamespaceSharedWithUserEvent struct { + Namespace *Namespace + User *user.User + Doer *user.User +} + +func (n *NamespaceSharedWithUserEvent) TopicName() string { + return "namespace.shared.user" +} + +type NamespaceSharedWithTeamEvent struct { + Namespace *Namespace + Team *Team + Doer *user.User +} + +func (n *NamespaceSharedWithTeamEvent) TopicName() string { + return "namespace.shared.team" +} diff --git a/pkg/models/namespace_team.go b/pkg/models/namespace_team.go index 3a1e5f139..445c490e9 100644 --- a/pkg/models/namespace_team.go +++ b/pkg/models/namespace_team.go @@ -17,6 +17,8 @@ package models import ( + "code.vikunja.io/api/pkg/events" + user2 "code.vikunja.io/api/pkg/user" "time" "code.vikunja.io/web" @@ -71,15 +73,15 @@ func (tn *TeamNamespace) Create(s *xorm.Session, a web.Auth) (err error) { } // Check if the team exists - _, err = GetTeamByID(s, tn.TeamID) + team, err := GetTeamByID(s, tn.TeamID) if err != nil { - return + return err } // Check if the namespace exists - _, err = GetNamespaceByID(s, tn.NamespaceID) + namespace, err := GetNamespaceByID(s, tn.NamespaceID) if err != nil { - return + return err } // Check if the team already has access to the namespace @@ -96,7 +98,19 @@ func (tn *TeamNamespace) Create(s *xorm.Session, a web.Auth) (err error) { // Insert the new team _, err = s.Insert(tn) - return + if err != nil { + return err + } + + doer, err := user2.GetFromAuth(a) + if err != nil { + return err + } + return events.Publish(&NamespaceSharedWithTeamEvent{ + Namespace: namespace, + Team: team, + Doer: doer, + }) } // Delete deletes a team <-> namespace relation based on the namespace & team id diff --git a/pkg/models/namespace_users.go b/pkg/models/namespace_users.go index 89be44839..af78e38ce 100644 --- a/pkg/models/namespace_users.go +++ b/pkg/models/namespace_users.go @@ -17,6 +17,7 @@ package models import ( + "code.vikunja.io/api/pkg/events" "time" user2 "code.vikunja.io/api/pkg/user" @@ -75,7 +76,7 @@ func (nu *NamespaceUser) Create(s *xorm.Session, a web.Auth) (err error) { } // Check if the namespace exists - l, err := GetNamespaceByID(s, nu.NamespaceID) + n, err := GetNamespaceByID(s, nu.NamespaceID) if err != nil { return } @@ -89,7 +90,7 @@ func (nu *NamespaceUser) Create(s *xorm.Session, a web.Auth) (err error) { // Check if the user already has access or is owner of that namespace // We explicitly DO NOT check for teams here - if l.OwnerID == nu.UserID { + if n.OwnerID == nu.UserID { return ErrUserAlreadyHasNamespaceAccess{UserID: nu.UserID, NamespaceID: nu.NamespaceID} } @@ -105,8 +106,19 @@ func (nu *NamespaceUser) Create(s *xorm.Session, a web.Auth) (err error) { // Insert user <-> namespace relation _, err = s.Insert(nu) + if err != nil { + return err + } - return + doer, err := user2.GetFromAuth(a) + if err != nil { + return err + } + return events.Publish(&NamespaceSharedWithUserEvent{ + Namespace: n, + User: user, + Doer: doer, + }) } // Delete deletes a namespace <-> user relation