cleaner nullable name
All checks were successful
Deploy to Server / deploy (push) Successful in 33s

This commit is contained in:
2026-04-10 21:22:31 -05:00
parent 508b1e8169
commit 8d9066d229
2 changed files with 23 additions and 4 deletions

View File

@@ -8,7 +8,7 @@ import { useSession, signOut, updateUser } from '../lib/auth-client';
import { validatePhoneOrEmail } from '../lib/validators'; import { validatePhoneOrEmail } from '../lib/validators';
export function ProfileSettings() { export function ProfileSettings() {
const { data: session } = useSession(); const { data: session, refetch: refetchSession } = useSession();
const [userName, setUserName] = useState(''); const [userName, setUserName] = useState('');
const [savingName, setSavingName] = useState(false); const [savingName, setSavingName] = useState(false);
const [nameSaved, setNameSaved] = useState(false); const [nameSaved, setNameSaved] = useState(false);
@@ -48,11 +48,18 @@ export function ProfileSettings() {
setNameSaved(false); setNameSaved(false);
const trimmed = userName.trim(); const trimmed = userName.trim();
setSavingName(true); setSavingName(true);
const { error: err } = await updateUser({ name: trimmed }); const res = await fetch('/api/account/name', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
body: JSON.stringify({ name: trimmed || null }),
});
setSavingName(false); setSavingName(false);
if (err) { if (!res.ok) {
setNameError(err.message || 'Failed to save name.'); const data = await res.json().catch(() => ({}));
setNameError(data.error || 'Failed to save name.');
} else { } else {
await refetchSession();
setNameSaved(true); setNameSaved(true);
setTimeout(() => setNameSaved(false), 3000); setTimeout(() => setNameSaved(false), 3000);
} }

View File

@@ -11,6 +11,18 @@ const uploadsDir = process.env.UPLOADS_DIR || path.join(__dirname, '../../upload
const router = Router(); const router = Router();
router.use(requireAuth); router.use(requireAuth);
// POST /api/account/name — update (or clear) the authenticated user's display name
router.post('/name', async (req, res) => {
const { name } = req.body;
const cleanName = typeof name === 'string' && name.trim() !== '' ? name.trim() : null;
try {
await pool.query('UPDATE "user" SET name = $1 WHERE id = $2', [cleanName, req.user!.id]);
res.json({ name: cleanName });
} catch {
res.status(500).json({ error: 'Failed to update name' });
}
});
// POST /api/account/delete // POST /api/account/delete
router.post('/delete', async (req, res) => { router.post('/delete', async (req, res) => {
const userId = req.user!.id; const userId = req.user!.id;