|
- class WikiPagesController < ApplicationController
- def show
- wiki_page = WikiPage.find(params[:id])
- return head :not_found unless wiki_page
-
- render json: wiki_page.as_json.merge(body: wiki_page.body)
- end
-
- def show_by_title
- wiki_page = WikiPage.find_by(title: params[:title])
- return head :not_found unless wiki_page
-
- render json: wiki_page.as_json.merge(body: wiki_page.body)
- end
-
- def create
- return head :unauthorized unless current_user
- return head :forbidden unless ['admin', 'member'].include?(current_user.role)
-
- wiki_page = WikiPage.new(title: params[:title], created_user: current_user, updated_user: current_user)
- if wiki_page.save
- wiki_page.set_body params[:body], user: current_user
- render json: wiki_page, status: :created
- else
- render json: { errors: wiki_page.errors.full_messages }, status: :unprocessable_entity
- end
- end
-
- def update
- return head :unauthorized unless current_user
- return head :forbidden unless ['admin', 'member'].include?(current_user.role)
-
- wiki_page = WikiPage.find(params[:id])
- return head :not_found unless wiki_page
-
- wiki_page.updated_user = current_user
- wiki_page.set_body params[:body], user: current_user
- wiki_page.save!
- head :ok
- end
-
- def search
- q = WikiPage.all
-
- if params[:title].present?
- title = params[:title].to_s.strip
- q = q.where('title LIKE ?', "%#{ WikiPage.sanitize_sql_like(title) }%")
- end
-
- render json: q.limit(20)
- end
-
- def changes
- id = params[:id]
- log = id.present? ? wiki.page("#{ id }.md")&.versions : wiki.repo.log('main', nil, max_count: 50)
- return render json: [] unless log
-
- render json: log.map { |commit|
- wiki_page = WikiPage.find(commit.message.split(' ')[1].to_i)
- user = User.find(commit.author.name.to_i)
- { sha: commit.id,
- wiki_page: wiki_page && { id: wiki_page.id, title: wiki_page.title },
- user: user && { id: user.id, name: user.name },
- change_type: commit.message.split(' ')[0].downcase[0...(-1)],
- timestamp: commit.authored_date } }
- end
-
- private
-
- WIKI_PATH = Rails.root.join('wiki').to_s
-
- def wiki
- @wiki ||= Gollum::Wiki.new(WIKI_PATH)
- end
- end
|