answers_controller.rb 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. class KnowledgeBase::AnswersController < KnowledgeBase::BaseController
  3. include HasPublishing
  4. # accessible outside of specific Knowledge Base
  5. # /api/v1/knowledge_bases/recent_answers
  6. def recent_answers
  7. answers = KnowledgeBase::Answer.published.limit(10)
  8. render json: {
  9. assets: ApplicationModel::CanAssets.reduce(answers),
  10. answer_ids_recent_viewed: answers.pluck(:id)
  11. }
  12. end
  13. # overrides show method to return KnowledgeBase::Answer::Translation::Content when needed
  14. def show
  15. object = klass.find(params[:id])
  16. assets = object.assets({})
  17. if params[:include_contents].present?
  18. content_ids = params[:include_contents].split(',')
  19. contents = KnowledgeBase::Answer::Translation::Content.where id: content_ids
  20. assets = ApplicationModel::CanAssets.reduce contents, assets
  21. end
  22. render json: { id: object.id, assets: assets }, status: :ok
  23. end
  24. # overrides show method to return KnowledgeBase::Answer::Translation::Content that was just saved
  25. def update
  26. object = klass.find(params[:id])
  27. clean_params = klass.association_name_to_id_convert(params)
  28. clean_params = klass.param_cleanup(clean_params, true)
  29. object.with_lock do
  30. # set relations
  31. object.associations_from_param(params)
  32. # set attributes
  33. object.update!(clean_params)
  34. # execute action if needed
  35. if (additional_action = params[:additional_action]&.to_sym)
  36. object.can_be_published_aasm.aasm.fire! additional_action, current_user
  37. end
  38. end
  39. assets = object.assets({})
  40. contents = object.translations.select { |e| e.content.previous_changes.any? }.map(&:content)
  41. assets = ApplicationModel::CanAssets.reduce contents, assets
  42. render json: { id: object.id, assets: assets }, status: :ok
  43. end
  44. # overrides show method to return KnowledgeBase::Answer::Translation::Content for the object just created
  45. def create
  46. clean_params = klass.association_name_to_id_convert(params)
  47. clean_params = klass.param_cleanup(clean_params, true)
  48. # create object
  49. object = klass.new(clean_params)
  50. # set relations
  51. object.associations_from_param(params)
  52. # save object
  53. object.save!
  54. assets = object.assets({})
  55. contents = object.translations.filter_map(&:content)
  56. assets = ApplicationModel::CanAssets.reduce contents, assets
  57. render json: { id: object.id, assets: assets }, status: :created
  58. end
  59. end