90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module API
 | 
						|
  class Wikis < Grape::API
 | 
						|
    helpers do
 | 
						|
      params :wiki_page_params do
 | 
						|
        requires :content, type: String, desc: 'Content of a wiki page'
 | 
						|
        requires :title, type: String, desc: 'Title of a wiki page'
 | 
						|
        optional :format,
 | 
						|
          type: String,
 | 
						|
          values: ProjectWiki::MARKUPS.values.map(&:to_s),
 | 
						|
          default: 'markdown',
 | 
						|
          desc: 'Format of a wiki page. Available formats are markdown, rdoc, and asciidoc'
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    resource :projects, requirements: API::PROJECT_ENDPOINT_REQUIREMENTS do
 | 
						|
      desc 'Get a list of wiki pages' do
 | 
						|
        success Entities::WikiPageBasic
 | 
						|
      end
 | 
						|
      params do
 | 
						|
        optional :with_content, type: Boolean, default: false, desc: "Include pages' content"
 | 
						|
      end
 | 
						|
      get ':id/wikis' do
 | 
						|
        authorize! :read_wiki, user_project
 | 
						|
 | 
						|
        entity = params[:with_content] ? Entities::WikiPage : Entities::WikiPageBasic
 | 
						|
        present user_project.wiki.pages, with: entity
 | 
						|
      end
 | 
						|
 | 
						|
      desc 'Get a wiki page' do
 | 
						|
        success Entities::WikiPage
 | 
						|
      end
 | 
						|
      params do
 | 
						|
        requires :slug, type: String, desc: 'The slug of a wiki page'
 | 
						|
      end
 | 
						|
      get ':id/wikis/:slug' do
 | 
						|
        authorize! :read_wiki, user_project
 | 
						|
 | 
						|
        present wiki_page, with: Entities::WikiPage
 | 
						|
      end
 | 
						|
 | 
						|
      desc 'Create a wiki page' do
 | 
						|
        success Entities::WikiPage
 | 
						|
      end
 | 
						|
      params do
 | 
						|
        use :wiki_page_params
 | 
						|
      end
 | 
						|
      post ':id/wikis' do
 | 
						|
        authorize! :create_wiki, user_project
 | 
						|
 | 
						|
        page = WikiPages::CreateService.new(user_project, current_user, params).execute
 | 
						|
 | 
						|
        if page.valid?
 | 
						|
          present page, with: Entities::WikiPage
 | 
						|
        else
 | 
						|
          render_validation_error!(page)
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      desc 'Update a wiki page' do
 | 
						|
        success Entities::WikiPage
 | 
						|
      end
 | 
						|
      params do
 | 
						|
        use :wiki_page_params
 | 
						|
      end
 | 
						|
      put ':id/wikis/:slug' do
 | 
						|
        authorize! :create_wiki, user_project
 | 
						|
 | 
						|
        page = WikiPages::UpdateService.new(user_project, current_user, params).execute(wiki_page)
 | 
						|
 | 
						|
        if page.valid?
 | 
						|
          present page, with: Entities::WikiPage
 | 
						|
        else
 | 
						|
          render_validation_error!(page)
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      desc 'Delete a wiki page'
 | 
						|
      params do
 | 
						|
        requires :slug, type: String, desc: 'The slug of a wiki page'
 | 
						|
      end
 | 
						|
      delete ':id/wikis/:slug' do
 | 
						|
        authorize! :admin_wiki, user_project
 | 
						|
 | 
						|
        status 204
 | 
						|
        WikiPages::DestroyService.new(user_project, current_user).execute(wiki_page)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |