* Enable Rails cops * Fix Rails/DynamicFindBy * Fix Rails/HttpStatus * Fix Rails/Blank * Fix Rails/RequestReferer * Fix Rails/ActiveRecordAliases * Fix Rails/FindBy * Fix Rails/Presence * Fix Rails/Delegate * Fix Rails/Validation * Fix Rails/PluralizationGrammar * Fix Rails/Present * Fix Rails/Output * Fix Rails/Blank * Fix Rails/FilePath * Fix Rails/InverseOf * Fix Rails/LexicallyScopedActionFilter * Add Rails/OutputSafety to TODO * Add Rails/HasManyOrHasOneDependent to TODO * Add Rails/SkipsModelValidations to TODO
32 lines
1.1 KiB
Ruby
32 lines
1.1 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
|
|
article.organization_id = user.organization_id if user.organization_id.present? && article_params[:publish_under_org].to_i == 1
|
|
article.collection_id = Collection.find_series(article_params[:series], user).id if article_params[:series].present?
|
|
create_job_opportunity(article)
|
|
if article.save
|
|
Notification.send_to_followers(article, "Published") if article.published
|
|
end
|
|
article.decorate
|
|
end
|
|
|
|
def create_job_opportunity(article)
|
|
return if job_opportunity_params.blank?
|
|
|
|
job_opportunity = JobOpportunity.create(job_opportunity_params)
|
|
article.job_opportunity = job_opportunity
|
|
raise unless article.tag_list.include? "hiring"
|
|
end
|
|
end
|