Guest User

Untitled

a guest
Dec 1st, 2023
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. module Post
  2. class Create
  3. attr_reader :record, :user, :tags, :discussion_topic, :payment
  4.  
  5. def initialize(user:, params:)
  6. @user = user
  7. @tags = params.delete(:tags)
  8. @record = Post.new(params)
  9. end
  10.  
  11. def call
  12. return false unless valid?
  13.  
  14. ActiveRecord::Base.transaction do
  15. setup!
  16. end
  17.  
  18. notify_users! if record.waiting?
  19. notify_admins! if needs_approval?
  20. end
  21.  
  22. private
  23.  
  24. def valid?
  25. user.blogs.include?(draft.blog)
  26. end
  27.  
  28. def setup!
  29. create_post!
  30. create_payment! if is_freelancer?
  31. create_discussion_topic!
  32. create_tags! if tags.present?
  33. close_draft! if draft.auto_close?
  34. end
  35.  
  36. def close_draft!
  37. Draft::Close.call(draft)
  38. end
  39.  
  40. def create_post!
  41. record.status = default_status
  42. record.user = user
  43. record.save!
  44. end
  45.  
  46. def create_payment!
  47. @payment = Payment::Create.call(value: record.draft.amount, post: record)
  48. end
  49.  
  50. def create_discussion_topic!
  51. @discussion_topic = DiscussionTopic::Create.call(post_id: record.id, topic_type: :main)
  52. end
  53.  
  54. def create_tags!
  55. tags.each do |attr|
  56. PostTag::Create.call(attr.merge(post_id: record.id))
  57. end
  58. end
  59.  
  60. def notify_users!
  61. subscribers.each do |subscriber|
  62. Notifications::NewPostNotification.call(subscriber.user, record)
  63. end
  64. end
  65.  
  66. def notify_admins!
  67. admins.each do |admin|
  68. Notifications::NewPostApprovalNotification.call(record, admin)
  69. end
  70. end
  71.  
  72. def is_published?
  73. record.published?
  74. end
  75.  
  76. def is_freelancer?
  77. User::Query::Resolver.is_freelancer?(user)
  78. end
  79.  
  80. def default_status
  81. needs_approval? ? :moderating : :waiting
  82. end
  83.  
  84. def needs_approval?
  85. is_guest_writer? && blog_has_approval_feature?
  86. end
  87.  
  88. def is_guest_writer?
  89. user.guest_writer?
  90. end
  91.  
  92. def blog_has_approval_feature?
  93. blog.features.approval.exists?
  94. end
  95.  
  96. def subscribers
  97. @subscribers ||= blog.subscribers.active.with_user([ :admin ])
  98. end
  99.  
  100. def blog
  101. @blog ||= draft.blog
  102. end
  103.  
  104. def draft
  105. @draft ||= Draft.find(record.draft_id)
  106. end
  107.  
  108. def admins
  109. @admins ||= Blog::AdminsQuery.new(blog: blog, roles: :admin).items
  110. end
  111. end
  112. end
  113.  
Advertisement
Add Comment
Please, Sign In to add comment