ぼざクリ タグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

76 lines
2.2 KiB

  1. class WikiPagesController < ApplicationController
  2. def show
  3. wiki_page = WikiPage.find(params[:id])
  4. return head :not_found unless wiki_page
  5. render json: wiki_page.as_json.merge(body: wiki_page.body)
  6. end
  7. def show_by_title
  8. wiki_page = WikiPage.find_by(title: params[:title])
  9. return head :not_found unless wiki_page
  10. render json: wiki_page.as_json.merge(body: wiki_page.body)
  11. end
  12. def create
  13. return head :unauthorized unless current_user
  14. return head :forbidden unless ['admin', 'member'].include?(current_user.role)
  15. wiki_page = WikiPage.new(title: params[:title], created_user: current_user, updated_user: current_user)
  16. if wiki_page.save
  17. wiki_page.set_body params[:body], user: current_user
  18. render json: wiki_page, status: :created
  19. else
  20. render json: { errors: wiki_page.errors.full_messages }, status: :unprocessable_entity
  21. end
  22. end
  23. def update
  24. return head :unauthorized unless current_user
  25. return head :forbidden unless ['admin', 'member'].include?(current_user.role)
  26. wiki_page = WikiPage.find(params[:id])
  27. return head :not_found unless wiki_page
  28. wiki_page.updated_user = current_user
  29. wiki_page.set_body params[:body], user: current_user
  30. wiki_page.save!
  31. head :ok
  32. end
  33. def search
  34. q = WikiPage.all
  35. if params[:title].present?
  36. title = params[:title].to_s.strip
  37. q = q.where('title LIKE ?', "%#{ WikiPage.sanitize_sql_like(title) }%")
  38. end
  39. render json: q.limit(20)
  40. end
  41. def changes
  42. id = params[:id]
  43. log = id.present? ? wiki.page("#{ id }.md")&.versions : wiki.repo.log('main', nil, max_count: 50)
  44. return render json: [] unless log
  45. render json: log.map { |commit|
  46. wiki_page = WikiPage.find(commit.message.split(' ')[1].to_i)
  47. user = User.find(commit.author.name.to_i)
  48. { sha: commit.id,
  49. wiki_page: wiki_page && { id: wiki_page.id, title: wiki_page.title },
  50. user: user && { id: user.id, name: user.name },
  51. change_type: commit.message.split(' ')[0].downcase[0...(-1)],
  52. timestamp: commit.authored_date } }
  53. end
  54. private
  55. WIKI_PATH = Rails.root.join('wiki').to_s
  56. def wiki
  57. @wiki ||= Gollum::Wiki.new(WIKI_PATH)
  58. end
  59. end