V3 add user/:id/sync endpoint

This commit is contained in:
carlad 2015-10-29 17:57:30 +01:00
parent b923b21252
commit 26b1d85d43
5 changed files with 26 additions and 1 deletions

View File

@ -34,6 +34,7 @@ module Travis
ServerError = Error .create(status: 500) ServerError = Error .create(status: 500)
NotImplemented = ServerError .create('request not (yet) implemented', status: 501) NotImplemented = ServerError .create('request not (yet) implemented', status: 501)
RequestLimitReached = ClientError .create('request limit reached for resource', status: 429) RequestLimitReached = ClientError .create('request limit reached for resource', status: 429)
AlreadySyncing = ClientError .create('sync already in progress', status: 409)
end end
end end
end end

View File

@ -75,6 +75,10 @@ module Travis::API::V3
unrestricted_api? unrestricted_api?
end end
def user_writable?(user)
self.user == user
end
def repository_visible?(repository) def repository_visible?(repository)
return true if unrestricted_api? and not repository.private? return true if unrestricted_api? and not repository.private?
private_repository_visible?(repository) private_repository_visible?(repository)

View File

@ -1,6 +1,6 @@
module Travis::API::V3 module Travis::API::V3
class Queries::User < Query class Queries::User < Query
params :id, :login, :email, :github_id params :id, :login, :email, :github_id, :is_syncing
def find def find
return Models::User.find_by_id(id) if id return Models::User.find_by_id(id) if id
@ -17,5 +17,12 @@ module Travis::API::V3
User.find_by_email(email) User.find_by_email(email)
end end
end end
def sync(user)
raise AlreadySyncing if user.is_syncing?
perform_async(:user_sync, user.id)
user.update_column(:is_syncing, true)
user
end
end end
end end

View File

@ -97,6 +97,7 @@ module Travis::API::V3
route '/user' route '/user'
get :current get :current
get :find, '/{user.id}' get :find, '/{user.id}'
post :sync, '/{user.id}/sync'
end end
end end

View File

@ -0,0 +1,12 @@
module Travis::API::V3
class Services::User::Sync < Service
def run!
raise LoginRequired unless access_control.logged_in? or access_control.full_access?
raise NotFound unless user = find(:user)
access_control.permissions(user).sync!
query.sync(user)
end
end
end