feat: implement NAS image lazy-loading and enhance service connection UI

This commit is contained in:
bobbert committed 2026-03-04 22:57:03 +00:00
1 parent 6167418074
commit 5158305086
8 files changed
+573 -492

No files matched your search

+21 -2
View File
@@ -11,7 +11,12 @@ app.use(cors());
app.use(express.json({ limit: '100mb' }));
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);
const start = Date.now();
res.on('finish', () => {
const ms = Date.now() - start;
const user = req.body?.username ? ` user=${req.body.username}` : '';
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path} → ${res.statusCode} (${ms}ms)${user}`);
});
next();
});
@@ -52,6 +57,7 @@ app.post('/api/register', (req, res) => {
}
res.json({ success: true, userId, username: sanitized });
} catch (err) {
console.error('[/api/register] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -79,6 +85,7 @@ app.post('/api/index', (req, res) => {
orphansRemoved: removed,
});
} catch (err) {
console.error('[/api/index] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -107,6 +114,7 @@ app.post('/api/photos', (req, res) => {
})),
});
} catch (err) {
console.error('[/api/photos] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -149,6 +157,7 @@ app.post('/api/photo/fetch', (req, res) => {
},
});
} catch (err) {
console.error('[/api/photo/fetch] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -187,6 +196,7 @@ app.post('/api/photo/upload', (req, res) => {
res.json({ success: true, filename: safeFilename, indexed: result.indexed });
} catch (err) {
console.error('[/api/photo/upload] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -197,10 +207,10 @@ app.post('/api/photo/delete', (req, res) => {
try {
const { photoId } = req.body;
if (!photoId) return res.status(400).json({ error: 'photoId is required' });
const result = db.deletePhoto(photoId);
res.json(result);
} catch (err) {
console.error('[/api/photo/delete] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -234,6 +244,7 @@ app.post('/api/refresh', (req, res) => {
})),
});
} catch (err) {
console.error('[/api/refresh] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -248,6 +259,7 @@ app.post('/api/albums', (req, res) => {
const albums = db.getAlbums(sanitized);
res.json({ success: true, albums });
} catch (err) {
console.error('[/api/albums] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -260,6 +272,7 @@ app.post('/api/album/create', (req, res) => {
const result = db.createAlbum(sanitized, name.trim());
res.json(result);
} catch (err) {
console.error('[/api/album/create] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -281,6 +294,7 @@ app.post('/api/album/photos', (req, res) => {
})),
});
} catch (err) {
console.error('[/api/album/photos] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -292,6 +306,7 @@ app.post('/api/album/add-photo', (req, res) => {
const result = db.addPhotoToAlbum(albumId, photoId);
res.json(result);
} catch (err) {
console.error('[/api/album/add-photo] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -303,6 +318,7 @@ app.post('/api/album/remove-photo', (req, res) => {
const result = db.removePhotoFromAlbum(albumId, photoId);
res.json(result);
} catch (err) {
console.error('[/api/album/remove-photo] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -314,6 +330,7 @@ app.post('/api/album/delete', (req, res) => {
const result = db.deleteAlbum(albumId);
res.json(result);
} catch (err) {
console.error('[/api/album/delete] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -325,6 +342,7 @@ app.post('/api/album/rename', (req, res) => {
const result = db.renameAlbum(albumId, name.trim());
res.json(result);
} catch (err) {
console.error('[/api/album/rename] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});
@@ -336,6 +354,7 @@ app.get('/api/users', (req, res) => {
const users = db.getAllUsers();
res.json({ success: true, users });
} catch (err) {
console.error('[/api/users] Error:', err.message, err.stack);
res.status(500).json({ error: err.message });
}
});