35 lines
1.2 KiB
Ruby
35 lines
1.2 KiB
Ruby
class ArticleCreationService
|
|
attr_accessor :user, :article_params, :job_opportunity_params
|
|
|
|
def initialize(user, article_params, job_opportunity_params)
|
|
@user = user
|
|
@article_params = article_params
|
|
@job_opportunity_params = job_opportunity_params
|
|
end
|
|
|
|
def create!
|
|
raise if RateLimitChecker.new(user).limit_by_situation("published_article_creation")
|
|
article = Article.new(article_params)
|
|
article.user_id = user.id
|
|
article.show_comments = true
|
|
if user.organization_id.present? && article_params[:publish_under_org].to_i == 1
|
|
article.organization_id = user.organization_id
|
|
end
|
|
article.collection_id = Collection.find_series(article_params[:series], user).id if article_params[:series].present?
|
|
create_job_opportunity(article)
|
|
if article.save
|
|
if article.published
|
|
Notification.send_all(article, "Published")
|
|
end
|
|
end
|
|
article.decorate
|
|
end
|
|
|
|
def create_job_opportunity(article)
|
|
if job_opportunity_params.present?
|
|
job_opportunity = JobOpportunity.create(job_opportunity_params)
|
|
article.job_opportunity = job_opportunity
|
|
raise unless article.tag_list.include? "hiring"
|
|
end
|
|
end
|
|
end
|