fix: query tenant-sharded private messages
Deploy im-server production / deploy (push) Successful in 7m7s

This commit is contained in:
richjohnrambo
2026-10-21 12:40:40 +08:00
parent 39b0392545
commit bc101b3278
2 changed files with 24 additions and 0 deletions
+11
View File
@@ -127,6 +127,9 @@ func serveInternalAdminResourceList(wrt http.ResponseWriter, req *http.Request,
writeIMError(wrt, req, http.StatusNotFound, 30004, imReasonMalformedRequest, "resource not found", nil)
return
}
if resource == "private-messages" {
spec = privateMessagesInternalQuerySpecForTenant(tenantID)
}
if resource == "group-messages" {
var err error
spec, err = groupMessagesInternalQuerySpecForTenant(tenantID)
@@ -400,6 +403,14 @@ func privateMessagesInternalQuerySpec() *internalQuerySpec {
}
}
func privateMessagesInternalQuerySpecForTenant(tenantID types.TenantID) *internalQuerySpec {
spec := privateMessagesInternalQuerySpec()
prefix := fmt.Sprintf("im_%03d_", tenantID)
spec.From = strings.Replace(spec.From, "FROM im_messages ", "FROM "+prefix+"messages ", 1)
spec.From = strings.ReplaceAll(spec.From, "FROM im_subscriptions ", "FROM "+prefix+"subscriptions ")
return spec
}
func groupMessagesInternalQuerySpec() *internalQuerySpec {
status := `CASE WHEN aa.action='delete' THEN 'deleted' WHEN aa.action='hide' THEN 'hidden' WHEN m.status='recalled' THEN 'recalled' WHEN m.status IN ('deleted','blocked') THEN m.status ELSE 'normal' END`
contentType := `CASE m.msg_type WHEN 'call' THEN 'system' WHEN 'system_notice' THEN 'system' WHEN 'contact_card' THEN 'card' WHEN 'forward_bundle' THEN 'card' WHEN 'link' THEN 'text' ELSE m.msg_type END`