Voltar ao catalogoSCALE-H7
MarkAllAsReadAsync carrega todos os registros em memoria
HighAchado ConfirmadoEscalabilidadeRodada 4
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"
]
}
Descricao
O metodo
MarkAllAsReadAsynccarrega todas as notificacoes nao lidas do tenant em memoria e atualiza uma a uma, em vez de usar umUPDATE WHEREdireto no banco.