feat: read-only name fields with Configuración modal for profile editing

This commit is contained in:
Antoni Nuñez Romeu
2026-07-07 01:37:57 +02:00
parent c46a3ee7ea
commit b899d9a297
3 changed files with 269 additions and 58 deletions
+15 -5
View File
@@ -296,11 +296,15 @@ if (!pgPool) {
ALTER TABLE users ADD COLUMN IF NOT EXISTS first_name TEXT;
ALTER TABLE users ADD COLUMN IF NOT EXISTS last_name TEXT;
ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_url TEXT;
ALTER TABLE users ADD COLUMN IF NOT EXISTS email TEXT;
ALTER TABLE users ADD COLUMN IF NOT EXISTS city TEXT;
`);
} else {
try { await dbRun('ALTER TABLE users ADD COLUMN first_name TEXT'); } catch {}
try { await dbRun('ALTER TABLE users ADD COLUMN last_name TEXT'); } catch {}
try { await dbRun('ALTER TABLE users ADD COLUMN avatar_url TEXT'); } catch {}
try { await dbRun('ALTER TABLE users ADD COLUMN email TEXT'); } catch {}
try { await dbRun('ALTER TABLE users ADD COLUMN city TEXT'); } catch {}
}
// Add user_id to push tables (SQLite — no cross-DB FK)
@@ -816,7 +820,7 @@ app.get('/api/auth/check', async (req, res) => {
app.get('/api/users/me', requireAuth, async (req, res) => {
try {
const user = await userDbGet(
'SELECT id, username, first_name, last_name, avatar_url, is_admin, address, latitude, longitude FROM users WHERE id = ?',
'SELECT id, username, first_name, last_name, avatar_url, email, city, is_admin, address, latitude, longitude FROM users WHERE id = ?',
[req.session.userId]
);
if (!user) return res.status(404).json({ error: 'Not found' });
@@ -826,6 +830,8 @@ app.get('/api/users/me', requireAuth, async (req, res) => {
first_name: user.first_name || null,
last_name: user.last_name || null,
avatar_url: user.avatar_url || null,
email: user.email || null,
city: user.city || null,
is_admin: Boolean(user.is_admin),
address: user.address || null,
latitude: user.latitude,
@@ -840,11 +846,13 @@ app.get('/api/users/me', requireAuth, async (req, res) => {
// Update the current user's address + coordinates
app.put('/api/users/me', requireAuth, async (req, res) => {
try {
const { first_name, last_name, avatar_url, address, latitude, longitude } = req.body || {};
const { first_name, last_name, avatar_url, email, city, address, latitude, longitude } = req.body || {};
const fName = first_name == null ? null : String(first_name).trim().slice(0, 100);
const lName = last_name == null ? null : String(last_name).trim().slice(0, 100);
const avatar = avatar_url == null ? null : String(avatar_url).slice(0, 500);
const userEmail = email == null ? null : String(email).trim().slice(0, 200);
const userCity = city == null ? null : String(city).trim().slice(0, 200);
const addr =
address == null || String(address).trim() === ''
@@ -867,12 +875,12 @@ app.put('/api/users/me', requireAuth, async (req, res) => {
}
await userDbRun(
'UPDATE users SET first_name = ?, last_name = ?, avatar_url = ?, address = ?, latitude = ?, longitude = ? WHERE id = ?',
[fName, lName, avatar, addr, lat, lon, req.session.userId]
'UPDATE users SET first_name = ?, last_name = ?, avatar_url = ?, email = ?, city = ?, address = ?, latitude = ?, longitude = ? WHERE id = ?',
[fName, lName, avatar, userEmail, userCity, addr, lat, lon, req.session.userId]
);
const user = await userDbGet(
'SELECT id, username, first_name, last_name, avatar_url, is_admin, address, latitude, longitude FROM users WHERE id = ?',
'SELECT id, username, first_name, last_name, avatar_url, email, city, is_admin, address, latitude, longitude FROM users WHERE id = ?',
[req.session.userId]
);
res.json({
@@ -881,6 +889,8 @@ app.put('/api/users/me', requireAuth, async (req, res) => {
first_name: user.first_name || null,
last_name: user.last_name || null,
avatar_url: user.avatar_url || null,
email: user.email || null,
city: user.city || null,
is_admin: Boolean(user.is_admin),
address: user.address || null,
latitude: user.latitude,