renders_models.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. module ApplicationController::RendersModels
  2. extend ActiveSupport::Concern
  3. private
  4. # model helper
  5. def model_create_render(object, params)
  6. clean_params = object.association_name_to_id_convert(params)
  7. clean_params = object.param_cleanup(clean_params, true)
  8. # create object
  9. generic_object = object.new(clean_params)
  10. # save object
  11. generic_object.save!
  12. # set relations
  13. generic_object.associations_from_param(params)
  14. if params[:expand]
  15. render json: generic_object.attributes_with_association_names, status: :created
  16. return
  17. end
  18. model_create_render_item(generic_object)
  19. end
  20. def model_create_render_item(generic_object)
  21. render json: generic_object.attributes_with_association_ids, status: :created
  22. end
  23. def model_update_render(object, params)
  24. # find object
  25. generic_object = object.find(params[:id])
  26. clean_params = object.association_name_to_id_convert(params)
  27. clean_params = object.param_cleanup(clean_params, true)
  28. generic_object.with_lock do
  29. # set attributes
  30. generic_object.update!(clean_params)
  31. # set relations
  32. generic_object.associations_from_param(params)
  33. end
  34. if params[:expand]
  35. render json: generic_object.attributes_with_association_names, status: :ok
  36. return
  37. end
  38. model_update_render_item(generic_object)
  39. end
  40. def model_update_render_item(generic_object)
  41. render json: generic_object.attributes_with_association_ids, status: :ok
  42. end
  43. def model_destroy_render(object, params)
  44. generic_object = object.find(params[:id])
  45. generic_object.destroy!
  46. model_destroy_render_item()
  47. end
  48. def model_destroy_render_item ()
  49. render json: {}, status: :ok
  50. end
  51. def model_show_render(object, params)
  52. if params[:expand]
  53. generic_object = object.find(params[:id])
  54. render json: generic_object.attributes_with_association_names, status: :ok
  55. return
  56. end
  57. if params[:full]
  58. generic_object_full = object.full(params[:id])
  59. render json: generic_object_full, status: :ok
  60. return
  61. end
  62. generic_object = object.find(params[:id])
  63. model_show_render_item(generic_object)
  64. end
  65. def model_show_render_item(generic_object)
  66. render json: generic_object.attributes_with_association_ids, status: :ok
  67. end
  68. def model_index_render(object, params)
  69. offset = 0
  70. per_page = 500
  71. if params[:page] && params[:per_page]
  72. offset = (params[:page].to_i - 1) * params[:per_page].to_i
  73. limit = params[:per_page].to_i
  74. end
  75. if per_page > 500
  76. per_page = 500
  77. end
  78. generic_objects = if offset.positive?
  79. object.limit(params[:per_page]).order(id: 'ASC').offset(offset).limit(limit)
  80. else
  81. object.all.order(id: 'ASC').offset(offset).limit(limit)
  82. end
  83. if params[:expand]
  84. list = []
  85. generic_objects.each do |generic_object|
  86. list.push generic_object.attributes_with_association_names
  87. end
  88. render json: list, status: :ok
  89. return
  90. end
  91. if params[:full]
  92. assets = {}
  93. item_ids = []
  94. generic_objects.each do |item|
  95. item_ids.push item.id
  96. assets = item.assets(assets)
  97. end
  98. render json: {
  99. record_ids: item_ids,
  100. assets: assets,
  101. }, status: :ok
  102. return
  103. end
  104. generic_objects_with_associations = []
  105. generic_objects.each do |item|
  106. generic_objects_with_associations.push item.attributes_with_association_ids
  107. end
  108. model_index_render_result(generic_objects_with_associations)
  109. end
  110. def model_index_render_result(generic_objects)
  111. render json: generic_objects, status: :ok
  112. end
  113. def model_references_check(object, params)
  114. generic_object = object.find(params[:id])
  115. result = Models.references(object, generic_object.id)
  116. return false if result.empty?
  117. raise Exceptions::UnprocessableEntity, 'Can\'t delete, object has references.'
  118. rescue => e
  119. raise Exceptions::UnprocessableEntity, e
  120. end
  121. end