openhands
ef5e706ee1
perf: optimize DB layer with caching and pool tuning
- Add Redis cache wrapper (cached-db.ts) — cachedQuery + invalidate helpers
- Add cached login user lookup (auth.ts: getLoginUser) — short 15s TTL
for brute-force protection, cache invalidation on password/rank changes
- Switch auth.ts login flow from Prisma facade to raw SQL via db.execute
(avoids abstraction overhead for this hot path)
- Cache invalidation wired in: login password upgrade, updateUser, resetPassword
- Connection pool tuning: enableKeepAlive, namedPlaceholders,
prepared statement cache (Node 22+), multipleStatements off (SQLi hardening)
- 0 tsc errors, 583 tests passing
2026-07-31 15:01:34 +02:00
..
2026-07-30 18:50:28 +02:00
2026-07-26 20:28:11 +02:00
2026-07-30 18:50:28 +02:00
2026-07-15 20:15:22 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-17 23:09:57 +02:00
2026-07-15 20:15:22 +02:00
2026-07-30 18:50:28 +02:00
2026-07-31 14:11:03 +02:00
2026-07-26 20:28:11 +02:00
2026-07-15 20:11:55 +02:00
2026-07-30 18:50:28 +02:00
2026-07-22 21:19:16 +02:00
2026-07-30 20:23:03 +02:00
2026-07-30 18:50:28 +02:00
2026-07-26 20:28:11 +02:00
2026-07-22 21:39:01 +02:00
2026-07-30 18:50:28 +02:00
2026-07-15 20:15:22 +02:00
2026-07-27 17:03:09 +02:00
2026-07-15 20:15:22 +02:00
2026-07-22 19:06:54 +02:00
2026-07-30 19:41:45 +02:00
2026-07-26 20:28:11 +02:00
2026-07-30 21:45:53 +02:00
2026-07-30 18:50:28 +02:00
2026-07-30 20:23:03 +02:00
2026-07-15 20:11:55 +02:00
2026-07-15 20:11:55 +02:00
2026-07-15 20:11:55 +02:00
2026-07-15 20:11:55 +02:00
2026-07-15 20:11:55 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-30 18:50:28 +02:00
2026-07-15 20:15:22 +02:00
2026-07-30 18:50:28 +02:00
2026-07-15 20:15:22 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-30 18:50:28 +02:00
2026-07-15 20:15:22 +02:00
2026-07-26 20:28:11 +02:00
2026-07-15 20:15:22 +02:00
2026-07-30 18:50:28 +02:00
2026-07-21 21:21:02 +02:00
2026-07-21 21:08:33 +02:00
2026-07-21 21:58:48 +02:00
2026-07-30 18:50:28 +02:00
2026-07-21 21:08:33 +02:00
2026-07-15 20:15:22 +02:00
2026-07-13 21:57:41 +02:00
2026-07-30 18:50:28 +02:00
2026-07-30 20:23:03 +02:00
2026-07-31 14:11:03 +02:00
2026-07-31 14:11:03 +02:00
2026-07-31 14:11:03 +02:00
2026-07-22 19:01:59 +02:00
2026-07-31 14:17:06 +02:00
2026-07-26 20:28:11 +02:00
2026-07-22 18:45:59 +02:00
2026-07-30 18:50:28 +02:00
2026-07-13 21:57:41 +02:00
2026-07-21 21:08:33 +02:00
2026-07-21 21:08:33 +02:00
2026-07-30 20:23:03 +02:00
2026-07-15 20:15:22 +02:00
2026-07-13 21:57:41 +02:00
2026-07-31 14:11:03 +02:00
2026-07-26 20:28:11 +02:00
2026-07-22 21:29:32 +02:00
2026-07-15 20:15:22 +02:00
2026-07-21 21:08:33 +02:00
2026-07-21 21:08:33 +02:00
2026-07-31 14:11:03 +02:00
2026-07-21 21:08:33 +02:00
2026-07-15 20:33:00 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-21 21:58:48 +02:00
2026-07-26 20:28:11 +02:00
2026-07-31 14:11:03 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-26 20:28:11 +02:00
2026-07-14 18:58:40 +02:00
2026-07-31 14:11:03 +02:00
2026-07-26 20:28:11 +02:00
2026-07-15 20:15:22 +02:00
2026-07-13 21:57:41 +02:00
2026-07-22 21:35:35 +02:00
2026-07-17 18:43:34 +02:00
2026-07-13 21:57:41 +02:00
2026-07-13 21:57:41 +02:00
2026-07-31 15:01:34 +02:00
2026-07-21 21:21:02 +02:00
2026-07-13 21:57:41 +02:00