ваше сообщение коммита
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
-- Исправление preferred_language: если строка — преобразовать в массив, если null — в []
|
||||||
|
UPDATE users SET preferred_language = jsonb_build_array(preferred_language) WHERE jsonb_typeof(preferred_language) = 'string';
|
||||||
|
UPDATE users SET preferred_language = '[]' WHERE preferred_language IS NULL;
|
||||||
@@ -95,7 +95,7 @@ router.put('/profile', requireAuth, async (req, res) => {
|
|||||||
// Получение списка пользователей с контактами
|
// Получение списка пользователей с контактами
|
||||||
router.get('/', async (req, res, next) => {
|
router.get('/', async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
const usersResult = await db.getQuery()('SELECT id, first_name, last_name, created_at FROM users ORDER BY id');
|
const usersResult = await db.getQuery()('SELECT id, first_name, last_name, created_at, preferred_language FROM users ORDER BY id');
|
||||||
const users = usersResult.rows;
|
const users = usersResult.rows;
|
||||||
// Получаем все user_identities разом
|
// Получаем все user_identities разом
|
||||||
const identitiesResult = await db.getQuery()('SELECT user_id, provider, provider_id FROM user_identities');
|
const identitiesResult = await db.getQuery()('SELECT user_id, provider, provider_id FROM user_identities');
|
||||||
@@ -113,7 +113,8 @@ router.get('/', async (req, res, next) => {
|
|||||||
email: identityMap[u.id]?.email || null,
|
email: identityMap[u.id]?.email || null,
|
||||||
telegram: identityMap[u.id]?.telegram || null,
|
telegram: identityMap[u.id]?.telegram || null,
|
||||||
wallet: identityMap[u.id]?.wallet || null,
|
wallet: identityMap[u.id]?.wallet || null,
|
||||||
created_at: u.created_at
|
created_at: u.created_at,
|
||||||
|
preferred_language: u.preferred_language || []
|
||||||
}));
|
}));
|
||||||
res.json({ success: true, contacts });
|
res.json({ success: true, contacts });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -157,13 +158,14 @@ router.patch('/:id', async (req, res) => {
|
|||||||
}
|
}
|
||||||
if (language !== undefined) {
|
if (language !== undefined) {
|
||||||
fields.push(`preferred_language = $${idx++}`);
|
fields.push(`preferred_language = $${idx++}`);
|
||||||
values.push(Array.isArray(language) ? JSON.stringify(language) : language);
|
values.push(JSON.stringify(language));
|
||||||
}
|
}
|
||||||
values.push(userId);
|
values.push(userId);
|
||||||
const sql = `UPDATE users SET ${fields.join(', ')} WHERE id = $${idx} RETURNING *`;
|
const sql = `UPDATE users SET ${fields.join(', ')} WHERE id = $${idx} RETURNING *`;
|
||||||
const result = await db.getQuery()(sql, values);
|
const result = await db.getQuery()(sql, values);
|
||||||
res.json(result.rows[0]);
|
res.json(result.rows[0]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
logger.error('PATCH /api/users/:id error', { error: e, body: req.body, stack: e.stack });
|
||||||
res.status(500).json({ error: 'DB error', details: e.message });
|
res.status(500).json({ error: 'DB error', details: e.message });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ const allLanguages = [
|
|||||||
{ value: 'uk', label: 'Українська' },
|
{ value: 'uk', label: 'Українська' },
|
||||||
{ value: 'other', label: 'Другое' }
|
{ value: 'other', label: 'Другое' }
|
||||||
];
|
];
|
||||||
const selectedLanguages = ref(Array.isArray(props.contact.language) ? props.contact.language : (props.contact.language ? [props.contact.language] : []));
|
const selectedLanguages = ref(Array.isArray(props.contact.preferred_language) ? props.contact.preferred_language : (props.contact.preferred_language ? [props.contact.preferred_language] : []));
|
||||||
const langInput = ref('');
|
const langInput = ref('');
|
||||||
const showLangDropdown = ref(false);
|
const showLangDropdown = ref(false);
|
||||||
const filteredLanguages = computed(() => {
|
const filteredLanguages = computed(() => {
|
||||||
@@ -169,6 +169,9 @@ async function loadMessages() {
|
|||||||
}
|
}
|
||||||
onMounted(loadMessages);
|
onMounted(loadMessages);
|
||||||
watch(() => props.contact, loadMessages);
|
watch(() => props.contact, loadMessages);
|
||||||
|
watch(() => props.contact.preferred_language, (newVal) => {
|
||||||
|
selectedLanguages.value = Array.isArray(newVal) ? newVal : (newVal ? [newVal] : []);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Reference in New Issue
Block a user