From 5bb8e6e766d62a6adf2deafe91c85f2242d5e875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=99=E2=97=A6=20The=20Tablet=20=E2=9D=80=20GamerGirla?= =?UTF-8?q?ndCo=20=E2=97=A6=E2=9D=A7?= Date: Fri, 27 Dec 2024 21:30:59 -0500 Subject: [PATCH] add `GroupTeam` and `GroupUnit` structs and helpers --- models/group/group_team.go | 42 ++++++++++++++++++++++++++++++++++++++ models/group/group_unit.go | 25 +++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 models/group/group_team.go create mode 100644 models/group/group_unit.go diff --git a/models/group/group_team.go b/models/group/group_team.go new file mode 100644 index 0000000000..7080832146 --- /dev/null +++ b/models/group/group_team.go @@ -0,0 +1,42 @@ +package group + +import ( + "code.gitea.io/gitea/models/db" + "context" +) + +// GroupTeam represents a relation for a team's access to a group +type GroupTeam struct { + ID int64 `xorm:"pk autoincr"` + OrgID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + GroupID int64 `xorm:"UNIQUE(s)"` +} + +// HasTeamGroup returns true if the given group belongs to team. +func HasTeamGroup(ctx context.Context, orgID, teamID, groupID int64) bool { + has, _ := db.GetEngine(ctx). + Where("org_id=?", orgID). + And("team_id=?", teamID). + And("group_id=?", groupID). + Get(new(GroupTeam)) + return has +} + +func AddTeamGroup(ctx context.Context, orgID, teamID, groupID int64) error { + _, err := db.GetEngine(ctx).Insert(&GroupTeam{ + OrgID: orgID, + GroupID: groupID, + TeamID: teamID, + }) + return err +} + +func RemoveTeamGroup(ctx context.Context, orgID, teamID, groupID int64) error { + _, err := db.DeleteByBean(ctx, &GroupTeam{ + TeamID: teamID, + GroupID: groupID, + OrgID: orgID, + }) + return err +} diff --git a/models/group/group_unit.go b/models/group/group_unit.go new file mode 100644 index 0000000000..89b3c131cf --- /dev/null +++ b/models/group/group_unit.go @@ -0,0 +1,25 @@ +package group + +import ( + "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/perm" + "code.gitea.io/gitea/models/unit" + "context" +) + +// GroupUnit describes all units of a repository group +type GroupUnit struct { + ID int64 `xorm:"pk autoincr"` + GroupID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + Type unit.Type `xorm:"UNIQUE(s)"` + AccessMode perm.AccessMode +} + +func (g *GroupUnit) Unit() unit.Unit { + return unit.Units[g.Type] +} + +func getUnitsByGroupID(ctx context.Context, groupID int64) (units []*GroupUnit, err error) { + return units, db.GetEngine(ctx).Where("group_id = ?", groupID).Find(&units) +}