75 lines
2.7 KiB
Ruby
75 lines
2.7 KiB
Ruby
class InboxController < ApplicationController
|
|
before_action :authenticate_user!
|
|
|
|
def show
|
|
@inbox = current_user.cursored_inbox(last_id: params[:last_id])
|
|
@inbox_last_id = @inbox.map(&:id).min
|
|
@more_data_available = !current_user.cursored_inbox(last_id: @inbox_last_id, size: 1).count.zero?
|
|
@inbox_count = current_user.inboxes.count
|
|
|
|
if params[:author].present?
|
|
begin
|
|
@author = true
|
|
@target_user = User.where('LOWER(screen_name) = ?', params[:author].downcase).first!
|
|
@inbox_author = @inbox.joins(:question)
|
|
.where(questions: { user_id: @target_user.id, author_is_anonymous: false })
|
|
@inbox_author_count = current_user.inboxes
|
|
.joins(:question)
|
|
.where(questions: { user_id: @target_user.id, author_is_anonymous: false })
|
|
.count
|
|
|
|
if @inbox_author.empty?
|
|
@empty = true
|
|
flash.now[:info] = t(".author.info", author: params[:author])
|
|
else
|
|
@inbox = @inbox_author
|
|
@inbox_count = @inbox_author_count
|
|
@inbox_last_id = @inbox.map(&:id).min
|
|
@more_data_available = !current_user.cursored_inbox(last_id: @inbox_last_id, size: 1)
|
|
.joins(:question)
|
|
.where(questions: { user_id: @target_user.id, author_is_anonymous: false })
|
|
.count
|
|
.zero?
|
|
end
|
|
rescue => e
|
|
Sentry.capture_exception(e)
|
|
flash.now[:error] = t(".author.error", author: params[:author])
|
|
@not_found = true
|
|
end
|
|
end
|
|
|
|
if @empty or @not_found
|
|
@delete_id = "ib-delete-all"
|
|
elsif @author
|
|
@delete_id = "ib-delete-all-author"
|
|
else
|
|
@delete_id = "ib-delete-all"
|
|
end
|
|
|
|
@disabled = true if @inbox.empty?
|
|
respond_to do |format|
|
|
format.html
|
|
format.turbo_stream { render "show", layout: false, status: :see_other }
|
|
end
|
|
end
|
|
|
|
def create
|
|
question = Question.create!(content: QuestionGenerator.generate,
|
|
author_is_anonymous: true,
|
|
author_identifier: "justask",
|
|
user: current_user)
|
|
|
|
inbox = Inbox.create!(user: current_user, question_id: question.id, new: true)
|
|
|
|
respond_to do |format|
|
|
format.turbo_stream do
|
|
render turbo_stream: turbo_stream.prepend("entries", partial: "inbox/entry", locals: { i: inbox })
|
|
|
|
inbox.update(new: false)
|
|
end
|
|
|
|
format.html { redirect_to inbox_path }
|
|
end
|
|
end
|
|
end
|