2015-12-21 15:24:11 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package user
import (
2016-11-11 12:39:44 +03:00
api "code.gitea.io/sdk/gitea"
2015-12-21 15:24:11 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
2015-12-21 15:24:11 +03:00
)
2016-11-24 10:04:31 +03:00
func responseAPIUsers ( ctx * context . APIContext , users [ ] * models . User ) {
2015-12-21 15:24:11 +03:00
apiUsers := make ( [ ] * api . User , len ( users ) )
for i := range users {
2016-08-14 14:17:26 +03:00
apiUsers [ i ] = users [ i ] . APIFormat ( )
2015-12-21 15:24:11 +03:00
}
ctx . JSON ( 200 , & apiUsers )
}
2016-03-14 01:49:16 +03:00
func listUserFollowers ( ctx * context . APIContext , u * models . User ) {
2015-12-21 15:24:11 +03:00
users , err := u . GetFollowers ( ctx . QueryInt ( "page" ) )
if err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetUserFollowers" , err )
2015-12-21 15:24:11 +03:00
return
}
2016-11-24 10:04:31 +03:00
responseAPIUsers ( ctx , users )
2015-12-21 15:24:11 +03:00
}
2016-11-24 10:04:31 +03:00
// ListMyFollowers list all my followers
2016-03-14 01:49:16 +03:00
func ListMyFollowers ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /user/followers user userCurrentListFollowers
2017-05-02 16:35:59 +03:00
//
// Produces:
// - application/json
//
// Responses:
// 200: UserList
// 500: error
2015-12-21 15:24:11 +03:00
listUserFollowers ( ctx , ctx . User )
}
2016-11-24 10:04:31 +03:00
// ListFollowers list user's followers
2016-03-14 01:49:16 +03:00
func ListFollowers ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /users/:username/followers user userListFollowers
2017-05-02 16:35:59 +03:00
//
// Produces:
// - application/json
//
// Responses:
// 200: UserList
// 500: error
2015-12-21 15:24:11 +03:00
u := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
listUserFollowers ( ctx , u )
}
2016-03-14 01:49:16 +03:00
func listUserFollowing ( ctx * context . APIContext , u * models . User ) {
2015-12-21 15:24:11 +03:00
users , err := u . GetFollowing ( ctx . QueryInt ( "page" ) )
if err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetFollowing" , err )
2015-12-21 15:24:11 +03:00
return
}
2016-11-24 10:04:31 +03:00
responseAPIUsers ( ctx , users )
2015-12-21 15:24:11 +03:00
}
2016-11-24 10:04:31 +03:00
// ListMyFollowing list all my followings
2016-03-14 01:49:16 +03:00
func ListMyFollowing ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /user/following user userCurrentListFollowing
2017-05-02 16:35:59 +03:00
//
// Produces:
// - application/json
//
// Responses:
// 200: UserList
// 500: error
2015-12-21 15:24:11 +03:00
listUserFollowing ( ctx , ctx . User )
}
2016-11-24 10:04:31 +03:00
// ListFollowing list user's followings
2016-03-14 01:49:16 +03:00
func ListFollowing ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /users/{username}/following user userListFollowing
2017-05-02 16:35:59 +03:00
//
// Produces:
// - application/json
//
// Responses:
// 200: UserList
// 500: error
2015-12-21 15:24:11 +03:00
u := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
listUserFollowing ( ctx , u )
}
2016-03-14 01:49:16 +03:00
func checkUserFollowing ( ctx * context . APIContext , u * models . User , followID int64 ) {
2015-12-21 15:24:11 +03:00
if u . IsFollowing ( followID ) {
ctx . Status ( 204 )
} else {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2015-12-21 15:24:11 +03:00
}
}
2016-11-24 10:04:31 +03:00
// CheckMyFollowing check if the repo is followed by me
2016-03-14 01:49:16 +03:00
func CheckMyFollowing ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /user/following/{username} user userCurrentCheckFollowing
2017-05-02 16:35:59 +03:00
//
// Responses:
// 204: empty
// 404: notFound
2015-12-21 15:24:11 +03:00
target := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
2016-07-23 20:08:22 +03:00
checkUserFollowing ( ctx , ctx . User , target . ID )
2015-12-21 15:24:11 +03:00
}
2016-11-24 10:04:31 +03:00
// CheckFollowing check if the repo is followed by user
2016-03-14 01:49:16 +03:00
func CheckFollowing ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route GET /users/{username}/following/:target user userCheckFollowing
2017-05-02 16:35:59 +03:00
//
// Responses:
// 204: empty
// 404: notFound
2015-12-21 15:24:11 +03:00
u := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
target := GetUserByParamsName ( ctx , ":target" )
if ctx . Written ( ) {
return
}
2016-07-23 20:08:22 +03:00
checkUserFollowing ( ctx , u , target . ID )
2015-12-21 15:24:11 +03:00
}
2016-11-24 10:04:31 +03:00
// Follow follow one repository
2016-03-14 01:49:16 +03:00
func Follow ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route PUT /user/following/{username} user userCurrentPutFollow
2017-05-02 16:35:59 +03:00
//
// Responses:
// 204: empty
// 500: error
2015-12-21 15:24:11 +03:00
target := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
2016-07-23 20:08:22 +03:00
if err := models . FollowUser ( ctx . User . ID , target . ID ) ; err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "FollowUser" , err )
2015-12-21 15:24:11 +03:00
return
}
ctx . Status ( 204 )
}
2016-11-24 10:04:31 +03:00
// Unfollow unfollow one repository
2016-03-14 01:49:16 +03:00
func Unfollow ( ctx * context . APIContext ) {
2017-08-21 14:13:47 +03:00
// swagger:route DELETE /user/following/{username} user userCurrentDeleteFollow
2017-05-02 16:35:59 +03:00
//
// Responses:
// 204: empty
// 500: error
2015-12-21 15:24:11 +03:00
target := GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
2016-07-23 20:08:22 +03:00
if err := models . UnfollowUser ( ctx . User . ID , target . ID ) ; err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "UnfollowUser" , err )
2015-12-21 15:24:11 +03:00
return
}
ctx . Status ( 204 )
}