summaryrefslogtreecommitdiffstats
path: root/models/organization/team_user.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
commitdd136858f1ea40ad3c94191d647487fa4f31926c (patch)
tree58fec94a7b2a12510c9664b21793f1ed560c6518 /models/organization/team_user.go
parentInitial commit. (diff)
downloadforgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.tar.xz
forgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.zip
Adding upstream version 9.0.0.HEADupstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to '')
-rw-r--r--models/organization/team_user.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/models/organization/team_user.go b/models/organization/team_user.go
new file mode 100644
index 0000000..ab767db
--- /dev/null
+++ b/models/organization/team_user.go
@@ -0,0 +1,89 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package organization
+
+import (
+ "context"
+
+ "code.gitea.io/gitea/models/db"
+ user_model "code.gitea.io/gitea/models/user"
+
+ "xorm.io/builder"
+)
+
+// TeamUser represents an team-user relation.
+type TeamUser struct {
+ ID int64 `xorm:"pk autoincr"`
+ OrgID int64 `xorm:"INDEX"`
+ TeamID int64 `xorm:"UNIQUE(s)"`
+ UID int64 `xorm:"UNIQUE(s)"`
+}
+
+// IsTeamMember returns true if given user is a member of team.
+func IsTeamMember(ctx context.Context, orgID, teamID, userID int64) (bool, error) {
+ return db.GetEngine(ctx).
+ Where("org_id=?", orgID).
+ And("team_id=?", teamID).
+ And("uid=?", userID).
+ Table("team_user").
+ Exist()
+}
+
+// GetTeamUsersByTeamID returns team users for a team
+func GetTeamUsersByTeamID(ctx context.Context, teamID int64) ([]*TeamUser, error) {
+ teamUsers := make([]*TeamUser, 0, 10)
+ return teamUsers, db.GetEngine(ctx).
+ Where("team_id=?", teamID).
+ Find(&teamUsers)
+}
+
+// SearchMembersOptions holds the search options
+type SearchMembersOptions struct {
+ db.ListOptions
+ TeamID int64
+}
+
+func (opts SearchMembersOptions) ToConds() builder.Cond {
+ cond := builder.NewCond()
+ if opts.TeamID > 0 {
+ cond = cond.And(builder.Eq{"": opts.TeamID})
+ }
+ return cond
+}
+
+// GetTeamMembers returns all members in given team of organization.
+func GetTeamMembers(ctx context.Context, opts *SearchMembersOptions) ([]*user_model.User, error) {
+ var members []*user_model.User
+ sess := db.GetEngine(ctx)
+ if opts.TeamID > 0 {
+ sess = sess.In("id",
+ builder.Select("uid").
+ From("team_user").
+ Where(builder.Eq{"team_id": opts.TeamID}),
+ )
+ }
+ if opts.PageSize > 0 && opts.Page > 0 {
+ sess = sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
+ }
+ if err := sess.OrderBy("full_name, name").Find(&members); err != nil {
+ return nil, err
+ }
+ return members, nil
+}
+
+// IsUserInTeams returns if a user in some teams
+func IsUserInTeams(ctx context.Context, userID int64, teamIDs []int64) (bool, error) {
+ return db.GetEngine(ctx).Where("uid=?", userID).In("team_id", teamIDs).Exist(new(TeamUser))
+}
+
+// UsersInTeamsCount counts the number of users which are in userIDs and teamIDs
+func UsersInTeamsCount(ctx context.Context, userIDs, teamIDs []int64) (int64, error) {
+ var ids []int64
+ if err := db.GetEngine(ctx).In("uid", userIDs).In("team_id", teamIDs).
+ Table("team_user").
+ Cols("uid").GroupBy("uid").Find(&ids); err != nil {
+ return 0, err
+ }
+ return int64(len(ids)), nil
+}