feat: Add compression and caching to movie routes

Adds gzip compression middleware and an in-memory cache for movie data to improve performance. Also adds database indexes for common query patterns.

Co-authored-by: mathieumoran1 <[email protected]>
This commit is contained in:
Cursor Agent
2025-12-21 21:24:27 +00:00
co-authored by mathieumoran1
parent 1e7ab962d6
commit 3884ce6492
7 changed files with 165 additions and 30 deletions
+12 -10
View File
@@ -108,10 +108,17 @@ window.onload = async function () {
// Populate "Dernière mise à jour des films" banner (per active year)
await fetchMoviesLastUpdated(activeYear, token);
const res = await fetch(`/api/movies?year=${encodeURIComponent(String(activeYear))}`, {
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` },
});
// Fetch movies + watched list in parallel (Render latency is high).
const [res, watchedRes] = await Promise.all([
fetch(`/api/movies?year=${encodeURIComponent(String(activeYear))}`, {
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` },
}),
fetch('/api/movies/watchedMovies', {
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` },
})
]);
if (!res.ok) {
localStorage.removeItem('auth_token');
@@ -121,14 +128,9 @@ window.onload = async function () {
const movies = await res.json();
// Sort movies alphabetically by title
// Sort movies alphabetically by title (server also sorts, but keep client as a fallback)
movies.sort((a, b) => a.title.localeCompare(b.title, 'fr', { sensitivity: 'base' }));
const watchedRes = await fetch('/api/movies/watchedMovies', {
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` },
});
let watchedMovies = [];
if (watchedRes.ok) {
watchedMovies = await watchedRes.json();