This PR adds a reload-safe onboarding Help Center generation status path. Previously, generation progress was pushed through ActionCable, which meant the onboarding UI could lose context after a page reload or missed websocket event. The new endpoint exposes the current generation id, raw Redis generation state, and Help Center article/category counts so clients can recover state by fetching from the backend. **What changed** - Added an onboarding Help Center generation status endpoint. - Persisted `help_center_generation_id` when generation is enqueued. - Removed Help Center generation ActionCable broadcasts completely. - Kept generation progress in Redis as the backend source of truth. - Kept Help Center generation out of the onboarding hot path; the existing onboarding controller does not start generation yet. **How to test** 1. Start Help Center generation for an account. 2. Fetch the onboarding generation status endpoint and verify it returns the generation id, Redis state, and article/category counts. 3. Reload the onboarding UI or client state and fetch again to confirm progress can be recovered without relying on websocket events. 4. Verify skipped/completed generation states are reflected from Redis. ## Related PRs - https://github.com/chatwoot/chatwoot/pull/14569 - https://github.com/chatwoot/chatwoot/pull/14568 - https://github.com/chatwoot/chatwoot/pull/14567 - https://github.com/chatwoot/chatwoot/pull/14619 - https://github.com/chatwoot/chatwoot/pull/14565 (Primary onboarding PR)
34 lines
2.0 KiB
Ruby
34 lines
2.0 KiB
Ruby
json.settings resource.settings
|
|
json.created_at resource.created_at
|
|
if resource.custom_attributes.present?
|
|
json.custom_attributes do
|
|
json.plan_name resource.custom_attributes['plan_name']
|
|
json.subscribed_quantity resource.custom_attributes['subscribed_quantity']
|
|
json.subscription_status resource.custom_attributes['subscription_status']
|
|
json.subscription_ends_on resource.custom_attributes['subscription_ends_on']
|
|
json.website resource.custom_attributes['website'] if resource.custom_attributes['website'].present?
|
|
json.industry resource.custom_attributes['industry'] if resource.custom_attributes['industry'].present?
|
|
json.company_size resource.custom_attributes['company_size'] if resource.custom_attributes['company_size'].present?
|
|
json.timezone resource.custom_attributes['timezone'] if resource.custom_attributes['timezone'].present?
|
|
json.logo resource.custom_attributes['logo'] if resource.custom_attributes['logo'].present?
|
|
json.referral_source resource.custom_attributes['referral_source'] if resource.custom_attributes['referral_source'].present?
|
|
json.brand_info resource.custom_attributes['brand_info'] if resource.custom_attributes['brand_info'].present?
|
|
json.onboarding_step resource.onboarding_step if resource.onboarding_step.present?
|
|
if resource.custom_attributes['help_center_generation_id'].present?
|
|
json.help_center_generation_id resource.custom_attributes['help_center_generation_id']
|
|
end
|
|
json.marked_for_deletion_at resource.custom_attributes['marked_for_deletion_at'] if resource.custom_attributes['marked_for_deletion_at'].present?
|
|
if resource.custom_attributes['marked_for_deletion_reason'].present?
|
|
json.marked_for_deletion_reason resource.custom_attributes['marked_for_deletion_reason']
|
|
end
|
|
end
|
|
end
|
|
json.domain @account.domain
|
|
json.features @account.enabled_features
|
|
json.id @account.id
|
|
json.locale @account.locale
|
|
json.name @account.name
|
|
json.support_email @account.support_email
|
|
json.status @account.status
|
|
json.cache_keys @account.cache_keys
|