2022-03-29 09:29:02 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-03-29 09:29:02 +03:00
package organization
import (
"context"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/perm"
repo_model "code.gitea.io/gitea/models/repo"
2022-03-29 22:13:41 +03:00
2022-03-29 09:29:02 +03:00
"xorm.io/builder"
)
// TeamRepo represents an team-repository relation.
type TeamRepo struct {
ID int64 ` xorm:"pk autoincr" `
OrgID int64 ` xorm:"INDEX" `
TeamID int64 ` xorm:"UNIQUE(s)" `
RepoID int64 ` xorm:"UNIQUE(s)" `
}
// HasTeamRepo returns true if given repository belongs to team.
func HasTeamRepo ( ctx context . Context , orgID , teamID , repoID int64 ) bool {
has , _ := db . GetEngine ( ctx ) .
Where ( "org_id=?" , orgID ) .
And ( "team_id=?" , teamID ) .
And ( "repo_id=?" , repoID ) .
Get ( new ( TeamRepo ) )
return has
}
type SearchTeamRepoOptions struct {
db . ListOptions
TeamID int64
}
// GetRepositories returns paginated repositories in team of organization.
2023-06-05 10:25:47 +03:00
func GetTeamRepositories ( ctx context . Context , opts * SearchTeamRepoOptions ) ( repo_model . RepositoryList , error ) {
2022-03-29 09:29:02 +03:00
sess := db . GetEngine ( ctx )
if opts . TeamID > 0 {
sess = sess . In ( "id" ,
builder . Select ( "repo_id" ) .
From ( "team_repo" ) .
Where ( builder . Eq { "team_id" : opts . TeamID } ) ,
)
}
if opts . PageSize > 0 {
2022-04-20 13:43:26 +03:00
sess . Limit ( opts . PageSize , ( opts . Page - 1 ) * opts . PageSize )
2022-03-29 09:29:02 +03:00
}
var repos [ ] * repo_model . Repository
return repos , sess . OrderBy ( "repository.name" ) .
Find ( & repos )
}
Fix various typos (#20338)
* Fix various typos
Found via `codespell -q 3 -S ./options/locale,./options/license,./public/vendor -L actived,allways,attachements,ba,befores,commiter,pullrequest,pullrequests,readby,splitted,te,unknwon`
Co-authored-by: zeripath <art27@cantab.net>
2022-07-13 00:32:37 +03:00
// AddTeamRepo adds a repo for an organization's team
2022-03-29 09:29:02 +03:00
func AddTeamRepo ( ctx context . Context , orgID , teamID , repoID int64 ) error {
_ , err := db . GetEngine ( ctx ) . Insert ( & TeamRepo {
OrgID : orgID ,
TeamID : teamID ,
RepoID : repoID ,
} )
return err
}
// RemoveTeamRepo remove repository from team
func RemoveTeamRepo ( ctx context . Context , teamID , repoID int64 ) error {
_ , err := db . DeleteByBean ( ctx , & TeamRepo {
TeamID : teamID ,
RepoID : repoID ,
} )
return err
}
// GetTeamsWithAccessToRepo returns all teams in an organization that have given access level to the repository.
2022-04-28 14:48:48 +03:00
func GetTeamsWithAccessToRepo ( ctx context . Context , orgID , repoID int64 , mode perm . AccessMode ) ( [ ] * Team , error ) {
2022-03-29 09:29:02 +03:00
teams := make ( [ ] * Team , 0 , 5 )
2022-04-28 14:48:48 +03:00
return teams , db . GetEngine ( ctx ) . Where ( "team.authorize >= ?" , mode ) .
2022-03-29 09:29:02 +03:00
Join ( "INNER" , "team_repo" , "team_repo.team_id = team.id" ) .
And ( "team_repo.org_id = ?" , orgID ) .
And ( "team_repo.repo_id = ?" , repoID ) .
2022-07-14 19:00:10 +03:00
OrderBy ( "name" ) .
2022-03-29 09:29:02 +03:00
Find ( & teams )
}