|
|
|
@ -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) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|