Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
83 lines
2.4 KiB
Ruby
83 lines
2.4 KiB
Ruby
class Api::V1::Accounts::NotificationsController < Api::V1::Accounts::BaseController
|
|
RESULTS_PER_PAGE = 15
|
|
include DateRangeHelper
|
|
|
|
before_action :fetch_notification, only: [:update, :destroy, :snooze, :unread]
|
|
before_action :set_primary_actor, only: [:read_all]
|
|
before_action :set_current_page, only: [:index]
|
|
|
|
def index
|
|
@notifications = notification_finder.notifications
|
|
@unread_count = notification_finder.unread_count
|
|
@count = notification_finder.count
|
|
end
|
|
|
|
def read_all
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
if @primary_actor
|
|
current_user.notifications.where(account_id: current_account.id, primary_actor: @primary_actor, read_at: nil)
|
|
.update_all(read_at: DateTime.now.utc)
|
|
else
|
|
current_user.notifications.where(account_id: current_account.id, read_at: nil).update_all(read_at: DateTime.now.utc)
|
|
end
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
head :ok
|
|
end
|
|
|
|
def update
|
|
@notification.update(read_at: DateTime.now.utc)
|
|
render json: @notification
|
|
end
|
|
|
|
def unread
|
|
@notification.update(read_at: nil)
|
|
render json: @notification
|
|
end
|
|
|
|
def destroy
|
|
@notification.destroy
|
|
head :ok
|
|
end
|
|
|
|
def destroy_all
|
|
if params[:type] == 'read'
|
|
::Notification::DeleteNotificationJob.perform_later(Current.user, type: :read)
|
|
else
|
|
::Notification::DeleteNotificationJob.perform_later(Current.user, type: :all)
|
|
end
|
|
head :ok
|
|
end
|
|
|
|
def unread_count
|
|
@unread_count = notification_finder.unread_count
|
|
render json: @unread_count
|
|
end
|
|
|
|
def snooze
|
|
updated_meta = (@notification.meta || {}).merge('last_snoozed_at' => nil)
|
|
@notification.update(snoozed_until: parse_date_time(params[:snoozed_until].to_s), meta: updated_meta) if params[:snoozed_until]
|
|
render json: @notification
|
|
end
|
|
|
|
private
|
|
|
|
def set_primary_actor
|
|
return unless params[:primary_actor_type]
|
|
return unless Notification::PRIMARY_ACTORS.include?(params[:primary_actor_type])
|
|
|
|
@primary_actor = params[:primary_actor_type].safe_constantize.find_by(id: params[:primary_actor_id])
|
|
end
|
|
|
|
def fetch_notification
|
|
@notification = current_user.notifications.find(params[:id])
|
|
end
|
|
|
|
def set_current_page
|
|
@current_page = params[:page] || 1
|
|
end
|
|
|
|
def notification_finder
|
|
@notification_finder ||= NotificationFinder.new(Current.user, Current.account, params)
|
|
end
|
|
end
|