Skip to content

Commit

Permalink
Resolve conflitos de merge com main
Browse files Browse the repository at this point in the history
Co-authored-by: Lucas GO Aguilar <[email protected]>
  • Loading branch information
fredericomozzato and oLucasAguilar committed Feb 12, 2024
2 parents e472544 + a269df2 commit 78de607
Show file tree
Hide file tree
Showing 24 changed files with 547 additions and 8 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ gem 'jsbundling-rails'
gem 'puma', '~> 6.0'
gem 'rack-cors'
gem 'simple_calendar'
gem 'solid_queue'
gem 'sprockets-rails'
gem 'sqlite3', '~> 1.4'
gem 'turbo-rails'
Expand Down
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,8 @@ GEM
simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3)
simplecov_json_formatter (0.1.4)
solid_queue (0.2.1)
rails (~> 7.1)
sprockets (4.2.1)
concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4)
Expand Down Expand Up @@ -342,6 +344,7 @@ DEPENDENCIES
rubocop-rails
simple_calendar
simplecov
solid_queue
sprockets-rails
sqlite3 (~> 1.4)
turbo-rails
Expand Down
1 change: 1 addition & 0 deletions app/controllers/tasks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ def start
def finish
@task.finished!
redirect_to project_task_path(@project), notice: t('.success')
TaskMailer.with(task: @task).notify_leader_finish_task.deliver
end

def cancel
Expand Down
11 changes: 11 additions & 0 deletions app/jobs/expire_task_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class ExpireTaskJob < ApplicationJob
queue_as :default

def perform(task)
return unless task.uninitialized? || task.in_progress?

return unless task.due_date&.past?

task.expired!
end
end
10 changes: 10 additions & 0 deletions app/mailers/task_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class TaskMailer < ApplicationMailer
default from: '[email protected]'

def notify_leader_finish_task
@task = params[:task]
@project = @task.project
@leader = @project.user
mail(to: @leader.email, subject: t('.subject'))
end
end
19 changes: 18 additions & 1 deletion app/models/task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,37 @@ class Task < ApplicationRecord
belongs_to :user_role
delegate :user, to: :user_role
belongs_to :assigned, class_name: 'User', optional: true
after_create :expire_task
after_update :expire_task

enum status: { uninitialized: 0, in_progress: 3, finished: 5, expired: 7, cancelled: 9 }

validates :title, presence: true

validate :due_date_is_future
validate :due_date_is_future_on_create, on: :create
validate :due_date_is_future_on_update, on: :update, if: :due_date_changed?

def start_time
due_date&.to_datetime
end

private

def due_date_is_future_on_create
due_date_is_future if due_date.present?
end

def due_date_is_future_on_update
due_date_is_future
end

def due_date_is_future
errors.add(:due_date, 'deve ser futuro.') if due_date.present? && due_date < Time.zone.today.to_date
end

def expire_task
return unless due_date

ExpireTaskJob.set(wait_until: due_date.tomorrow.beginning_of_day).perform_later(self)
end
end
1 change: 0 additions & 1 deletion app/views/layouts/mailer.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
/* Email styles need to be inline */
</style>
</head>

<body>
<%= yield %>
</body>
Expand Down
11 changes: 11 additions & 0 deletions app/views/task_mailer/notify_leader_finish_task.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<h1><%= t('.hello_the_task_was_finished', leader_name: @leader.full_name) %>!</h1>
<p>
<%= t('.the_task_from_project_was_finished_by',
task_title: @task.title,
project_title: @project.title,
author_name: @task.user != @leader ? @task.user.full_name : 'você' ) %><br>
</p>
<p>
<%= link_to( t('.to_view_the_task_access'), project_task_url(@project, @task)) %>
</p>
<p><%= t('.thanks_have_a_nice_day') %></p>
8 changes: 4 additions & 4 deletions app/views/tasks/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
start_project_task_path(@project, @task), method: :patch,
class: 'btn btn-primary me-2' if @task.uninitialized? %>
<%= button_to I18n.t('tasks.finish_task'),
finish_project_task_path(@task), method: :patch,
finish_project_task_path(@project, @task), method: :patch,
class: 'btn btn-primary me-2' if @task.in_progress? %>
<%= button_to I18n.t('tasks.cancel_task'),
cancel_project_task_path(@project, @task), method: :patch,
<%= button_to I18n.t('tasks.cancel_task'),
cancel_project_task_path(@project, @task), method: :patch,
data: { turbo_confirm: t(:task_cancel_confirmation) },
class: 'btn btn-danger me-2' if @task.uninitialized? || @task.in_progress? %>
<%= link_to I18n.t('tasks.edit_task'),
<%= link_to I18n.t('tasks.edit_task'),
edit_project_task_path(@project, @task),
class: 'btn btn-secondary' unless @task.finished? || @task.cancelled? %>
</div>
Expand Down
2 changes: 2 additions & 0 deletions config/environments/development.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,6 @@

# Raise error when a before_action's only/except options reference missing actions
config.action_controller.raise_on_missing_callback_actions = true

config.active_job.queue_adapter = :solid_queue
end
2 changes: 1 addition & 1 deletion config/environments/production.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
# config.cache_store = :mem_cache_store

# Use a real queuing backend for Active Job (and separate queues per environment).
# config.active_job.queue_adapter = :resque
config.active_job.queue_adapter = :solid_queue
# config.active_job.queue_name_prefix = "colabora_production"

config.action_mailer.perform_caching = false
Expand Down
1 change: 1 addition & 0 deletions config/environments/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,5 @@

# Raise error when a before_action's only/except options reference missing actions
config.action_controller.raise_on_missing_callback_actions = true
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
end
8 changes: 8 additions & 0 deletions config/locales/mailers/task_mailer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pt-BR:
task_mailer:
notify_leader_finish_task:
subject: A tarefa foi finalizada.
hello_the_task_was_finished: Olá %{leader_name}. Uma tarefa foi finalizada!
the_task_from_project_was_finished_by: A tarefa %{task_title}, do projeto %{project_title} e criada por %{author_name} foi finalizada.
to_view_the_task_access: Para ver a tarefa pronta, acesse
thanks_have_a_nice_day: Obrigado e tenha um bom dia!
18 changes: 18 additions & 0 deletions config/solid_queue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
default: &default
dispatchers:
- polling_interval: 1
batch_size: 500
workers:
- queues: "*"
threads: 5
processes: 1
polling_interval: 0.1

development:
<<: *default

test:
<<: *default

production:
<<: *default
101 changes: 101 additions & 0 deletions db/migrate/20240207133013_create_solid_queue_tables.solid_queue.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# This migration comes from solid_queue (originally 20231211200639)
class CreateSolidQueueTables < ActiveRecord::Migration[7.0]
def change
create_table :solid_queue_jobs do |t|
t.string :queue_name, null: false
t.string :class_name, null: false, index: true
t.text :arguments
t.integer :priority, default: 0, null: false
t.string :active_job_id, index: true
t.datetime :scheduled_at
t.datetime :finished_at, index: true
t.string :concurrency_key

t.timestamps

t.index [ :queue_name, :finished_at ], name: "index_solid_queue_jobs_for_filtering"
t.index [ :scheduled_at, :finished_at ], name: "index_solid_queue_jobs_for_alerting"
end

create_table :solid_queue_scheduled_executions do |t|
t.references :job, index: { unique: true }, null: false
t.string :queue_name, null: false
t.integer :priority, default: 0, null: false
t.datetime :scheduled_at, null: false

t.datetime :created_at, null: false

t.index [ :scheduled_at, :priority, :job_id ], name: "index_solid_queue_dispatch_all"
end

create_table :solid_queue_ready_executions do |t|
t.references :job, index: { unique: true }, null: false
t.string :queue_name, null: false
t.integer :priority, default: 0, null: false

t.datetime :created_at, null: false

t.index [ :priority, :job_id ], name: "index_solid_queue_poll_all"
t.index [ :queue_name, :priority, :job_id ], name: "index_solid_queue_poll_by_queue"
end

create_table :solid_queue_claimed_executions do |t|
t.references :job, index: { unique: true }, null: false
t.bigint :process_id
t.datetime :created_at, null: false

t.index [ :process_id, :job_id ]
end

create_table :solid_queue_blocked_executions do |t|
t.references :job, index: { unique: true }, null: false
t.string :queue_name, null: false
t.integer :priority, default: 0, null: false
t.string :concurrency_key, null: false
t.datetime :expires_at, null: false

t.datetime :created_at, null: false

t.index [ :expires_at, :concurrency_key ], name: "index_solid_queue_blocked_executions_for_maintenance"
end

create_table :solid_queue_failed_executions do |t|
t.references :job, index: { unique: true }, null: false
t.text :error
t.datetime :created_at, null: false
end

create_table :solid_queue_pauses do |t|
t.string :queue_name, null: false, index: { unique: true }
t.datetime :created_at, null: false
end

create_table :solid_queue_processes do |t|
t.string :kind, null: false
t.datetime :last_heartbeat_at, null: false, index: true
t.bigint :supervisor_id, index: true

t.integer :pid, null: false
t.string :hostname
t.text :metadata

t.datetime :created_at, null: false
end

create_table :solid_queue_semaphores do |t|
t.string :key, null: false, index: { unique: true }
t.integer :value, default: 1, null: false
t.datetime :expires_at, null: false, index: true

t.timestamps

t.index [ :key, :value ], name: "index_solid_queue_semaphores_on_key_and_value"
end

add_foreign_key :solid_queue_blocked_executions, :solid_queue_jobs, column: :job_id, on_delete: :cascade
add_foreign_key :solid_queue_claimed_executions, :solid_queue_jobs, column: :job_id, on_delete: :cascade
add_foreign_key :solid_queue_failed_executions, :solid_queue_jobs, column: :job_id, on_delete: :cascade
add_foreign_key :solid_queue_ready_executions, :solid_queue_jobs, column: :job_id, on_delete: :cascade
add_foreign_key :solid_queue_scheduled_executions, :solid_queue_jobs, column: :job_id, on_delete: :cascade
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# This migration comes from solid_queue (originally 20240110143450)
class AddMissingIndexToBlockedExecutions < ActiveRecord::Migration[7.1]
def change
add_index :solid_queue_blocked_executions, [ :concurrency_key, :priority, :job_id ], name: "index_solid_queue_blocked_executions_for_release"
end
end
Loading

0 comments on commit 78de607

Please sign in to comment.