fix: resolve 4 bugs from QA round 6 (BUG-F/G/H/I)
BUG-F (P1): Fake webhook lookupInbox used JSONB @> operator on a TEXT
column, causing all fake webhooks to return "ignored". Cast
channel_config::jsonb before the @> operator.
BUG-G (P3): Vue Router history.state warning on Activity page. Four
call sites replaced history.state with null/{}, destroying Vue Router's
internal navigation state. Now all replaceState calls preserve
window.history.state.
BUG-H (P3): Inbox list showed stale data because cache_keys endpoint
returned hardcoded "0000000000" for inbox/label/team, so the frontend
IndexedDB cache never invalidated. Cache keys are now derived from
actual DB state (row count + MAX(updated_at)), with defensive fallback
for missing tables.
BUG-I (P3): All worker goroutines shared the same Redis consumer name,
so XINFO CONSUMERS showed 1 consumer instead of N. Each goroutine now
generates a unique consumer ID (workerID-index).
This commit is contained in:
@@ -163,8 +163,9 @@ func (h *FakeWebhookHandler) lookupInbox(identifier string) (*model.Inbox, error
|
||||
// PostgreSQL: use jsonb @> for a server-side, indexable query.
|
||||
if h.db.Dialector.Name() == "postgres" {
|
||||
var inbox model.Inbox
|
||||
// channel_config @> '{"identifier":"<id>"}'
|
||||
query := fmt.Sprintf(`channel_type = 'fake' AND channel_config @> '{"identifier":"%s"}'`, identifier)
|
||||
// channel_config is TEXT, so cast to jsonb before using the @> operator.
|
||||
// channel_config::jsonb @> '{"identifier":"<id>"}'
|
||||
query := fmt.Sprintf(`channel_type = 'fake' AND channel_config::jsonb @> '{"identifier":"%s"}'`, identifier)
|
||||
if err := h.db.Where(query).First(&inbox).Error; err != nil {
|
||||
return nil, fmt.Errorf("fake inbox not found for identifier=%s: %w", identifier, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user