Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
d5d0c00e
Commit
d5d0c00e
authored
May 27, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'former03-feature_teams_api'
parents
69d70400
c3ba0ee6
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
863 additions
and
0 deletions
+863
-0
doc/api/README.md
doc/api/README.md
+1
-0
doc/api/user_teams.md
doc/api/user_teams.md
+209
-0
lib/api/api.rb
lib/api/api.rb
+1
-0
lib/api/entities.rb
lib/api/entities.rb
+16
-0
lib/api/user_teams.rb
lib/api/user_teams.rb
+276
-0
spec/requests/api/user_teams_spec.rb
spec/requests/api/user_teams_spec.rb
+360
-0
No files found.
doc/api/README.md
View file @
d5d0c00e
...
@@ -79,3 +79,4 @@ When listing resources you can pass the following parameters:
...
@@ -79,3 +79,4 @@ When listing resources you can pass the following parameters:
+
[
Milestones
](
doc/api/milestones.md
)
+
[
Milestones
](
doc/api/milestones.md
)
+
[
Notes
](
doc/api/notes.md
)
+
[
Notes
](
doc/api/notes.md
)
+
[
System Hooks
](
doc/api/system_hooks.md
)
+
[
System Hooks
](
doc/api/system_hooks.md
)
+
[
User Teams
](
doc/api/user_teams.md
)
doc/api/user_teams.md
0 → 100644
View file @
d5d0c00e
## User teams
### List user teams
Get a list of user teams viewable by the authenticated user.
```
GET /user_teams
```
```
json
[
{
id:
1
,
name:
"User team 1"
,
path:
"user_team1"
,
owner_id:
1
},
{
id:
2
,
name:
"User team 2"
,
path:
"user_team2"
,
owner_id:
1
}
]
```
### Get single user team
Get a specific user team, identified by user team ID, which is viewable by the authenticated user.
```
GET /user_teams/:id
```
Parameters:
+
`id`
(required) - The ID of a user_team
```
json
{
id:
1
,
name:
"User team 1"
,
path:
"user_team1"
,
owner_id:
1
}
```
### Create user team
Creates new user team owned by user. Available only for admins.
```
POST /user_teams
```
Parameters:
+
`name`
(required) - new user team name
+
`path`
(required) - new user team internal name
## User team members
### List user team members
Get a list of project team members.
```
GET /user_teams/:id/members
```
Parameters:
+
`id`
(required) - The ID of a user_team
### Get user team member
Gets a user team member.
```
GET /user_teams/:id/members/:user_id
```
Parameters:
+
`id`
(required) - The ID of a user_team
+
`user_id`
(required) - The ID of a user
```
json
{
id:
2
,
username:
"john_doe"
,
email:
"joh@doe.org"
,
name:
"John Doe"
,
state:
"active"
,
created_at:
"2012-10-22T14:13:35Z"
,
access_level:
30
}
```
### Add user team member
Adds a user to a user team.
```
POST /user_teams/:id/members
```
Parameters:
+
`id`
(required) - The ID of a user team
+
`user_id`
(required) - The ID of a user to add
+
`access_level`
(required) - Project access level
### Remove user team member
Removes user from user team.
```
DELETE /user_teams/:id/members/:user_id
```
Parameters:
+
`id`
(required) - The ID of a user team
+
`user_id`
(required) - The ID of a team member
## User team projects
### List user team projects
Get a list of project team projects.
```
GET /user_teams/:id/projects
```
Parameters:
+
`id`
(required) - The ID of a user_team
### Get user team project
Gets a user team project.
```
GET /user_teams/:id/projects/:project_id
```
Parameters:
+
`id`
(required) - The ID of a user_team
+
`project_id`
(required) - The ID of a user
```
json
{
id:
12
,
name:
"project1"
,
description:
null
,
default_branch:
"develop"
,
public:
false
,
path:
"project1"
,
path_with_namespace:
"group1/project1"
,
issues_enabled:
false
,
merge_requests_enabled:
true
,
wall_enabled:
true
,
wiki_enabled:
false
,
created_at:
"2013-03-11T12:59:08Z"
,
greatest_access_level:
30
}
```
### Add user team project
Adds a project to a user team.
```
POST /user_teams/:id/projects
```
Parameters:
+
`id`
(required) - The ID of a user team
+
`project_id`
(required) - The ID of a project to add
+
`greatest_access_level`
(required) - Maximum project access level
### Remove user team project
Removes project from user team.
```
DELETE /user_teams/:id/projects/:project_id
```
Parameters:
+
`id`
(required) - The ID of a user team
+
`project_id`
(required) - The ID of a team project
lib/api/api.rb
View file @
d5d0c00e
...
@@ -35,5 +35,6 @@ module API
...
@@ -35,5 +35,6 @@ module API
mount
Notes
mount
Notes
mount
Internal
mount
Internal
mount
SystemHooks
mount
SystemHooks
mount
UserTeams
end
end
end
end
lib/api/entities.rb
View file @
d5d0c00e
...
@@ -40,6 +40,18 @@ module API
...
@@ -40,6 +40,18 @@ module API
end
end
end
end
class
TeamMember
<
UserBasic
expose
:permission
,
as: :access_level
do
|
user
,
options
|
options
[
:user_team
].
user_team_user_relationships
.
find_by_user_id
(
user
.
id
).
permission
end
end
class
TeamProject
<
Project
expose
:greatest_access
,
as: :greatest_access_level
do
|
project
,
options
|
options
[
:user_team
].
user_team_project_relationships
.
find_by_project_id
(
project
.
id
).
greatest_access
end
end
class
Group
<
Grape
::
Entity
class
Group
<
Grape
::
Entity
expose
:id
,
:name
,
:path
,
:owner_id
expose
:id
,
:name
,
:path
,
:owner_id
end
end
...
@@ -87,6 +99,10 @@ module API
...
@@ -87,6 +99,10 @@ module API
expose
:id
,
:title
,
:key
,
:created_at
expose
:id
,
:title
,
:key
,
:created_at
end
end
class
UserTeam
<
Grape
::
Entity
expose
:id
,
:name
,
:path
,
:owner_id
end
class
MergeRequest
<
Grape
::
Entity
class
MergeRequest
<
Grape
::
Entity
expose
:id
,
:target_branch
,
:source_branch
,
:project_id
,
:title
,
:state
expose
:id
,
:target_branch
,
:source_branch
,
:project_id
,
:title
,
:state
expose
:author
,
:assignee
,
using:
Entities
::
UserBasic
expose
:author
,
:assignee
,
using:
Entities
::
UserBasic
...
...
lib/api/user_teams.rb
0 → 100644
View file @
d5d0c00e
module
API
# user_teams API
class
UserTeams
<
Grape
::
API
before
{
authenticate!
}
resource
:user_teams
do
helpers
do
def
handle_team_member_errors
(
errors
)
if
errors
[
:permission
].
any?
render_api_error!
(
errors
[
:permission
],
422
)
end
not_found!
end
def
validate_access_level?
(
level
)
[
UsersProject
::
GUEST
,
UsersProject
::
REPORTER
,
UsersProject
::
DEVELOPER
,
UsersProject
::
MASTER
].
include?
level
.
to_i
end
end
# Get a user_teams list
#
# Example Request:
# GET /user_teams
get
do
if
current_user
.
admin
@user_teams
=
paginate
UserTeam
else
@user_teams
=
paginate
current_user
.
user_teams
end
present
@user_teams
,
with:
Entities
::
UserTeam
end
# Create user_team. Available only for admin
#
# Parameters:
# name (required) - The name of the user_team
# path (required) - The path of the user_team
# Example Request:
# POST /user_teams
post
do
authenticated_as_admin!
required_attributes!
[
:name
,
:path
]
attrs
=
attributes_for_keys
[
:name
,
:path
]
@user_team
=
UserTeam
.
new
(
attrs
)
@user_team
.
owner
=
current_user
if
@user_team
.
save
present
@user_team
,
with:
Entities
::
UserTeam
else
not_found!
end
end
# Get a single user_team
#
# Parameters:
# id (required) - The ID of a user_team
# Example Request:
# GET /user_teams/:id
get
":id"
do
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
current_user
.
admin
or
current_user
.
user_teams
.
include?
@user_team
present
@user_team
,
with:
Entities
::
UserTeam
else
not_found!
end
end
# Get user_team members
#
# Parameters:
# id (required) - The ID of a user_team
# Example Request:
# GET /user_teams/:id/members
get
":id/members"
do
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
current_user
.
admin
or
current_user
.
user_teams
.
include?
@user_team
@members
=
paginate
@user_team
.
members
present
@members
,
with:
Entities
::
TeamMember
,
user_team:
@user_team
else
not_found!
end
end
# Add a new user_team member
#
# Parameters:
# id (required) - The ID of a user_team
# user_id (required) - The ID of a user
# access_level (required) - Project access level
# Example Request:
# POST /user_teams/:id/members
post
":id/members"
do
authenticated_as_admin!
required_attributes!
[
:user_id
,
:access_level
]
if
not
validate_access_level?
(
params
[
:access_level
])
render_api_error!
(
"Wrong access level"
,
422
)
end
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
@user_team
team_member
=
@user_team
.
user_team_user_relationships
.
find_by_user_id
(
params
[
:user_id
])
# Not existing member
if
team_member
.
nil?
@user_team
.
add_member
(
params
[
:user_id
],
params
[
:access_level
],
false
)
team_member
=
@user_team
.
user_team_user_relationships
.
find_by_user_id
(
params
[
:user_id
])
if
team_member
.
nil?
render_api_error!
(
"Error creating membership"
,
500
)
else
@member
=
team_member
.
user
present
@member
,
with:
Entities
::
TeamMember
,
user_team:
@user_team
end
else
render_api_error!
(
"Already exists"
,
409
)
end
else
not_found!
end
end
# Get a single team member from user_team
#
# Parameters:
# id (required) - The ID of a user_team
# user_id (required) - The ID of a team member
# Example Request:
# GET /user_teams/:id/members/:user_id
get
":id/members/:user_id"
do
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
current_user
.
admin
or
current_user
.
user_teams
.
include?
@user_team
team_member
=
@user_team
.
user_team_user_relationships
.
find_by_user_id
(
params
[
:user_id
])
unless
team_member
.
nil?
present
team_member
.
user
,
with:
Entities
::
TeamMember
,
user_team:
@user_team
else
not_found!
end
else
not_found!
end
end
# Remove a team member from user_team
#
# Parameters:
# id (required) - The ID of a user_team
# user_id (required) - The ID of a team member
# Example Request:
# DELETE /user_teams/:id/members/:user_id
delete
":id/members/:user_id"
do
authenticated_as_admin!
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
@user_team
team_member
=
@user_team
.
user_team_user_relationships
.
find_by_user_id
(
params
[
:user_id
])
unless
team_member
.
nil?
team_member
.
destroy
else
not_found!
end
else
not_found!
end
end
# Get to user_team assigned projects
#
# Parameters:
# id (required) - The ID of a user_team
# Example Request:
# GET /user_teams/:id/projects
get
":id/projects"
do
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
current_user
.
admin
or
current_user
.
user_teams
.
include?
@user_team
@projects
=
paginate
@user_team
.
projects
present
@projects
,
with:
Entities
::
TeamProject
,
user_team:
@user_team
else
not_found!
end
end
# Add a new user_team project
#
# Parameters:
# id (required) - The ID of a user_team
# project_id (required) - The ID of a project
# greatest_access_level (required) - Project access level
# Example Request:
# POST /user_teams/:id/projects
post
":id/projects"
do
authenticated_as_admin!
required_attributes!
[
:project_id
,
:greatest_access_level
]
if
not
validate_access_level?
(
params
[
:greatest_access_level
])
render_api_error!
(
"Wrong greatest_access_level"
,
422
)
end
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
@user_team
team_project
=
@user_team
.
user_team_project_relationships
.
find_by_project_id
(
params
[
:project_id
])
# No existing project
if
team_project
.
nil?
@user_team
.
assign_to_projects
([
params
[
:project_id
]],
params
[
:greatest_access_level
])
team_project
=
@user_team
.
user_team_project_relationships
.
find_by_project_id
(
params
[
:project_id
])
if
team_project
.
nil?
render_api_error!
(
"Error creating project assignment"
,
500
)
else
@project
=
team_project
.
project
present
@project
,
with:
Entities
::
TeamProject
,
user_team:
@user_team
end
else
render_api_error!
(
"Already exists"
,
409
)
end
else
not_found!
end
end
# Show a single team project from user_team
#
# Parameters:
# id (required) - The ID of a user_team
# project_id (required) - The ID of a project assigned to the team
# Example Request:
# GET /user_teams/:id/projects/:project_id
get
":id/projects/:project_id"
do
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
current_user
.
admin
or
current_user
.
user_teams
.
include?
@user_team
team_project
=
@user_team
.
user_team_project_relationships
.
find_by_project_id
(
params
[
:project_id
])
unless
team_project
.
nil?
present
team_project
.
project
,
with:
Entities
::
TeamProject
,
user_team:
@user_team
else
not_found!
end
else
not_found!
end
end
# Remove a team project from user_team
#
# Parameters:
# id (required) - The ID of a user_team
# project_id (required) - The ID of a project assigned to the team
# Example Request:
# DELETE /user_teams/:id/projects/:project_id
delete
":id/projects/:project_id"
do
authenticated_as_admin!
@user_team
=
UserTeam
.
find
(
params
[
:id
])
if
@user_team
team_project
=
@user_team
.
user_team_project_relationships
.
find_by_project_id
(
params
[
:project_id
])
unless
team_project
.
nil?
team_project
.
destroy
else
not_found!
end
else
not_found!
end
end
end
end
end
spec/requests/api/user_teams_spec.rb
0 → 100644
View file @
d5d0c00e
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment