]> source.dussan.org Git - gitea.git/commitdiff
Improve performance of dashboard list orgs (#16099)
authorLunny Xiao <xiaolunwen@gmail.com>
Mon, 14 Jun 2021 12:18:09 +0000 (20:18 +0800)
committerGitHub <noreply@github.com>
Mon, 14 Jun 2021 12:18:09 +0000 (20:18 +0800)
* Improve performance of dashboard list orgs

* Fix wrong error description

* unexport queryUserOrgIDs method

* SimpleOrg -> MinimalOrg

* .

Co-authored-by: 6543 <6543@obermui.de>
models/org.go
routers/web/user/home.go

index 3474988efc9cf10e672ddb46de17babbe5a62acf..7f9e3cce5b6247858307f9c51c5d679566addbd8 100644 (file)
@@ -425,6 +425,25 @@ func GetOrgsByUserID(userID int64, showAll bool) ([]*User, error) {
        return getOrgsByUserID(sess, userID, showAll)
 }
 
+// queryUserOrgIDs returns a condition to return user's organization id
+func queryUserOrgIDs(uid int64) *builder.Builder {
+       return builder.Select("team.org_id").
+               From("team_user").InnerJoin("team", "team.id = team_user.team_id").
+               Where(builder.Eq{"team_user.uid": uid})
+}
+
+// MinimalOrg represents a simple orgnization with only needed columns
+type MinimalOrg = User
+
+// GetUserOrgsList returns one user's all orgs list
+func GetUserOrgsList(uid int64) ([]*MinimalOrg, error) {
+       var orgs = make([]*MinimalOrg, 0, 20)
+       return orgs, x.Select("id, name, full_name, visibility, avatar, avatar_email, use_custom_avatar").
+               Table("user").
+               In("id", queryUserOrgIDs(uid)).
+               Find(&orgs)
+}
+
 func getOwnedOrgsByUserID(sess *xorm.Session, userID int64) ([]*User, error) {
        orgs := make([]*User, 0, 10)
        return orgs, sess.
index acf73f82fe3620010a70f9bc401faad077e7031e..d3fc36c73012e82400cefd64ccf05b7d0c505200 100644 (file)
@@ -49,11 +49,12 @@ func getDashboardContextUser(ctx *context.Context) *models.User {
        }
        ctx.Data["ContextUser"] = ctxUser
 
-       if err := ctx.User.GetOrganizations(&models.SearchOrganizationsOptions{All: true}); err != nil {
-               ctx.ServerError("GetOrganizations", err)
+       orgs, err := models.GetUserOrgsList(ctx.User.ID)
+       if err != nil {
+               ctx.ServerError("GetUserOrgsList", err)
                return nil
        }
-       ctx.Data["Orgs"] = ctx.User.Orgs
+       ctx.Data["Orgs"] = orgs
 
        return ctxUser
 }