14-16 Mar 2026
Voltar ao catalogo

MarkAllAsReadAsync carrega todos os registros em memoria

SCALE-H7
HighAchado ConfirmadoEscalabilidadeRodada 4

Descricao

O metodo MarkAllAsReadAsync carrega todas as notificacoes nao lidas do tenant em memoria e atualiza uma a uma, em vez de usar um UPDATE WHERE direto no banco.

Evidencia
`aspnet-core/src/cargo_fleet.Application/Notifications/NotificationAppService.cs` — `MarkAllAsReadAsync` carrega N entidades em memoria e executa N updates individuais.
Impacto Tecnico

Com centenas de notificacoes acumuladas por tenant, um unico clique em 'marcar todas como lidas' carrega N entidades completas em memoria e executa N updates individuais.

Impacto de Negocio

Degradacao de performance perceptivel pelo usuario. Potencial timeout em tenants com muitas notificacoes.

Recomendacao

Substituir por query SQL direta: UPDATE AppNotifications SET IsRead = true WHERE TenantId = @tid AND IsRead = false.

Arquivos Afetados

aspnet-core/src/cargo_fleet.Application/Notifications/NotificationAppService.cs

Acoes Relacionadas

{
  "id": "SCALE-H7",
  "title": "MarkAllAsReadAsync carrega todos os registros em memoria",
  "severity": "High",
  "type": "achado confirmado",
  "category": "scalability",
  "description": "O metodo `MarkAllAsReadAsync` carrega todas as notificacoes nao lidas do tenant em memoria e atualiza uma a uma, em vez de usar um `UPDATE WHERE` direto no banco.",
  "evidence": "`aspnet-core/src/cargo_fleet.Application/Notifications/NotificationAppService.cs` — `MarkAllAsReadAsync` carrega N entidades em memoria e executa N updates individuais.",
  "technicalImpact": "Com centenas de notificacoes acumuladas por tenant, um unico clique em 'marcar todas como lidas' carrega N entidades completas em memoria e executa N updates individuais.",
  "businessImpact": "Degradacao de performance perceptivel pelo usuario. Potencial timeout em tenants com muitas notificacoes.",
  "recommendation": "Substituir por query SQL direta: `UPDATE AppNotifications SET IsRead = true WHERE TenantId = @tid AND IsRead = false`.",
  "files": [
    "aspnet-core/src/cargo_fleet.Application/Notifications/NotificationAppService.cs"
  ],
  "pass": 4,
  "relatedActions": [
    "ACT-7.2.9"
  ]
}