|
|
@@ -20,7 +20,14 @@ func init() {
|
|
|
func AddOrgUser(cmd *m.AddOrgUserCommand) error {
|
|
|
return inTransaction(func(sess *DBSession) error {
|
|
|
// check if user exists
|
|
|
- if res, err := sess.Query("SELECT 1 from org_user WHERE org_id=? and user_id=?", cmd.OrgId, cmd.UserId); err != nil {
|
|
|
+ var user m.User
|
|
|
+ if exists, err := sess.Id(cmd.UserId).Get(&user); err != nil {
|
|
|
+ return err
|
|
|
+ } else if !exists {
|
|
|
+ return m.ErrUserNotFound
|
|
|
+ }
|
|
|
+
|
|
|
+ if res, err := sess.Query("SELECT 1 from org_user WHERE org_id=? and user_id=?", cmd.OrgId, user.Id); err != nil {
|
|
|
return err
|
|
|
} else if len(res) == 1 {
|
|
|
return m.ErrOrgUserAlreadyAdded
|
|
|
@@ -41,7 +48,26 @@ func AddOrgUser(cmd *m.AddOrgUserCommand) error {
|
|
|
}
|
|
|
|
|
|
_, err := sess.Insert(&entity)
|
|
|
- return err
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var userOrgs []*m.UserOrgDTO
|
|
|
+ sess.Table("org_user")
|
|
|
+ sess.Join("INNER", "org", "org_user.org_id=org.id")
|
|
|
+ sess.Where("org_user.user_id=? AND org_user.org_id=?", user.Id, user.OrgId)
|
|
|
+ sess.Cols("org.name", "org_user.role", "org_user.org_id")
|
|
|
+ err = sess.Find(&userOrgs)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(userOrgs) == 0 {
|
|
|
+ return setUsingOrgInTransaction(sess, user.Id, cmd.OrgId)
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
})
|
|
|
}
|
|
|
|
|
|
@@ -110,6 +136,14 @@ func GetOrgUsers(query *m.GetOrgUsersQuery) error {
|
|
|
|
|
|
func RemoveOrgUser(cmd *m.RemoveOrgUserCommand) error {
|
|
|
return inTransaction(func(sess *DBSession) error {
|
|
|
+ // check if user exists
|
|
|
+ var user m.User
|
|
|
+ if exists, err := sess.Id(cmd.UserId).Get(&user); err != nil {
|
|
|
+ return err
|
|
|
+ } else if !exists {
|
|
|
+ return m.ErrUserNotFound
|
|
|
+ }
|
|
|
+
|
|
|
deletes := []string{
|
|
|
"DELETE FROM org_user WHERE org_id=? and user_id=?",
|
|
|
"DELETE FROM dashboard_acl WHERE org_id=? and user_id = ?",
|
|
|
@@ -123,6 +157,32 @@ func RemoveOrgUser(cmd *m.RemoveOrgUserCommand) error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ var userOrgs []*m.UserOrgDTO
|
|
|
+ sess.Table("org_user")
|
|
|
+ sess.Join("INNER", "org", "org_user.org_id=org.id")
|
|
|
+ sess.Where("org_user.user_id=?", user.Id)
|
|
|
+ sess.Cols("org.name", "org_user.role", "org_user.org_id")
|
|
|
+ err := sess.Find(&userOrgs)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ hasCurrentOrgSet := false
|
|
|
+ for _, userOrg := range userOrgs {
|
|
|
+ if user.OrgId == userOrg.OrgId {
|
|
|
+ hasCurrentOrgSet = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if !hasCurrentOrgSet && len(userOrgs) > 0 {
|
|
|
+ err = setUsingOrgInTransaction(sess, user.Id, userOrgs[0].OrgId)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return validateOneAdminLeftInOrg(cmd.OrgId, sess)
|
|
|
})
|
|
|
}
|