diff --git a/app/jobs/projects/post_init_job.rb b/app/jobs/projects/post_init_job.rb index 8ab7b32..a01fe32 100644 --- a/app/jobs/projects/post_init_job.rb +++ b/app/jobs/projects/post_init_job.rb @@ -14,6 +14,8 @@ module Projects create_default_task_statuses(project) project.update!(status: :ready) end + + project.broadcast_append_later_to Project, :admin_table, partial: 'projects/row' end private diff --git a/app/models/project.rb b/app/models/project.rb index 4276e4b..f29799c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -4,7 +4,7 @@ class Project < ApplicationRecord enum :status, %w[preparing ready archived].index_by(&:itself), default: :preparing validates :name, :code, :status, presence: true - validates :code, exclusion: { in: %w[new] }, uniqueness: true, format: { with: /\A[a-z]{2,}\z/ } + validates :code, exclusion: { in: %w[new] }, uniqueness: true, format: { with: /\A[a-z][a-z0-9]{1,}\z/ } has_many :tasks, dependent: :restrict_with_exception has_many :task_statuses, dependent: :destroy @@ -15,6 +15,7 @@ class Project < ApplicationRecord after_commit :schedule_post_init_job, on: :create after_destroy_commit :drop_tasks_number_sequence + after_destroy_commit :broadcast_the_destroy def to_param return unless id @@ -42,4 +43,8 @@ class Project < ApplicationRecord def drop_tasks_number_sequence self.class.connection.execute "DROP SEQUENCE IF EXISTS #{tasks_number_sequence_name}" end + + def broadcast_the_destroy + broadcast_remove_to Project, :admin_table + end end diff --git a/app/views/projects/_row.html.slim b/app/views/projects/_row.html.slim new file mode 100644 index 0000000..5c58d20 --- /dev/null +++ b/app/views/projects/_row.html.slim @@ -0,0 +1 @@ +li id="project_#{project.id}" = link_to project.name, project diff --git a/app/views/projects/index.html.slim b/app/views/projects/index.html.slim index c2f0720..90b7e05 100644 --- a/app/views/projects/index.html.slim +++ b/app/views/projects/index.html.slim @@ -1,7 +1,8 @@ .row = link_to 'New', new_project_path -ul - - @projects.each do |project| - li - = link_to project.name, project +/ TODO: admin view, extract when doing roles stuff +ul#projects + = render collection: @projects, partial: 'row', as: :project + += turbo_stream_from Project, :admin_table diff --git a/config/environments/development.rb b/config/environments/development.rb index 29ec324..696bb16 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -58,7 +58,7 @@ Rails.application.configure do # Replace the default in-process and non-durable queuing backend for Active Job. config.active_job.queue_adapter = :solid_queue config.solid_queue.connects_to = { database: { writing: :queue } } - config.solid_queue.logger = ActiveSupport::Logger.new(STDOUT) + config.solid_queue.logger = ActiveSupport::Logger.new($stdout) # Raises error for missing translations. # config.i18n.raise_on_missing_translations = true