From 1f0b695cd3bd9f2b3135321be3588268ac7f197a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 7 Jun 2021 23:40:48 +0800 Subject: [PATCH 1/5] Improve performance of dashboard list orgs --- models/org.go | 19 +++++++++++++++++++ routers/web/user/home.go | 5 +++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/models/org.go b/models/org.go index 3474988efc9cf..ee21a58d84390 100644 --- a/models/org.go +++ b/models/org.go @@ -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}) +} + +// SimpleOrg represents a simple orgnization with only needed columns +type SimpleOrg = User + +// GetUserOrgsList returns one user's all orgs list +func GetUserOrgsList(uid int64) ([]*SimpleOrg, error) { + var orgs = make([]*SimpleOrg, 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. diff --git a/routers/web/user/home.go b/routers/web/user/home.go index acf73f82fe362..f0661e278c1b7 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -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 { + orgs, err := models.GetUserOrgsList(ctx.User.ID) + if err != nil { ctx.ServerError("GetOrganizations", err) return nil } - ctx.Data["Orgs"] = ctx.User.Orgs + ctx.Data["Orgs"] = orgs return ctxUser } From 4885e37d263ee5dea9ed33b12d15cf01feeac61b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 14 Jun 2021 18:09:14 +0800 Subject: [PATCH 2/5] Fix wrong error description --- routers/web/user/home.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/web/user/home.go b/routers/web/user/home.go index f0661e278c1b7..d3fc36c73012e 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -51,7 +51,7 @@ func getDashboardContextUser(ctx *context.Context) *models.User { orgs, err := models.GetUserOrgsList(ctx.User.ID) if err != nil { - ctx.ServerError("GetOrganizations", err) + ctx.ServerError("GetUserOrgsList", err) return nil } ctx.Data["Orgs"] = orgs From 474c950cb72a3d78365ba6ec65ce5e8ed35a8906 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 14 Jun 2021 18:19:26 +0800 Subject: [PATCH 3/5] unexport queryUserOrgIDs method --- models/org.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/models/org.go b/models/org.go index ee21a58d84390..3610fbaa795f8 100644 --- a/models/org.go +++ b/models/org.go @@ -425,8 +425,8 @@ 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 { +// 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}) @@ -440,7 +440,7 @@ func GetUserOrgsList(uid int64) ([]*SimpleOrg, error) { var orgs = make([]*SimpleOrg, 0, 20) return orgs, x.Select("id, name, full_name, visibility, avatar, avatar_email, use_custom_avatar"). Table("user"). - In("id", QueryUserOrgIDs(uid)). + In("id", queryUserOrgIDs(uid)). Find(&orgs) } From d7f2e216b96e0fe6ea46e6d05459f7d875ca66c2 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 14 Jun 2021 13:02:44 +0200 Subject: [PATCH 4/5] SimpleOrg -> MinimalOrg --- models/org.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/models/org.go b/models/org.go index 3610fbaa795f8..4ce64685f97b3 100644 --- a/models/org.go +++ b/models/org.go @@ -432,11 +432,11 @@ func queryUserOrgIDs(uid int64) *builder.Builder { Where(builder.Eq{"team_user.uid": uid}) } -// SimpleOrg represents a simple orgnization with only needed columns -type SimpleOrg = User +// MinimalOrg represents a simple orgnization with only needed columns +type MinimalOrg = User // GetUserOrgsList returns one user's all orgs list -func GetUserOrgsList(uid int64) ([]*SimpleOrg, error) { +func GetUserOrgsList(uid int64) ([]*MinimalOrg, error) { var orgs = make([]*SimpleOrg, 0, 20) return orgs, x.Select("id, name, full_name, visibility, avatar, avatar_email, use_custom_avatar"). Table("user"). From a50b2e17f4bf2afe4fe4ccae738fb187ade5f350 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 14 Jun 2021 13:04:04 +0200 Subject: [PATCH 5/5] . --- models/org.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/org.go b/models/org.go index 4ce64685f97b3..7f9e3cce5b624 100644 --- a/models/org.go +++ b/models/org.go @@ -437,7 +437,7 @@ type MinimalOrg = User // GetUserOrgsList returns one user's all orgs list func GetUserOrgsList(uid int64) ([]*MinimalOrg, error) { - var orgs = make([]*SimpleOrg, 0, 20) + 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)).