diff --git a/backend/routes/identities.js b/backend/routes/identities.js index 90a4636..b84e336 100644 --- a/backend/routes/identities.js +++ b/backend/routes/identities.js @@ -107,4 +107,21 @@ router.get('/token-balances', requireAuth, async (req, res) => { } }); +// Удаление идентификатора пользователя +router.delete('/:provider/:providerId', requireAuth, async (req, res) => { + try { + const userId = req.session.userId; + const { provider, providerId } = req.params; + const result = await require('../services/identity-service').deleteIdentity(userId, provider, providerId); + if (result.success) { + res.json({ success: true, deleted: result.deleted }); + } else { + res.status(400).json({ success: false, error: result.error }); + } + } catch (error) { + logger.error('Error deleting identity:', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + module.exports = router; diff --git a/backend/services/identity-service.js b/backend/services/identity-service.js index 75fe11f..ca6cf61 100644 --- a/backend/services/identity-service.js +++ b/backend/services/identity-service.js @@ -495,6 +495,32 @@ class IdentityService { return []; } } + + /** + * Удаляет идентификатор пользователя + * @param {number} userId - ID пользователя + * @param {string} provider - Тип идентификатора + * @param {string} providerId - Значение идентификатора + * @returns {Promise} - Результат операции + */ + async deleteIdentity(userId, provider, providerId) { + try { + if (!userId || !provider || !providerId) { + logger.warn(`[IdentityService] Missing parameters for deleteIdentity: userId=${userId}, provider=${provider}, providerId=${providerId}`); + return { success: false, error: 'Missing required parameters' }; + } + const { provider: normalizedProvider, providerId: normalizedProviderId } = this.normalizeIdentity(provider, providerId); + const result = await db.query( + `DELETE FROM user_identities WHERE user_id = $1 AND provider = $2 AND provider_id = $3`, + [userId, normalizedProvider, normalizedProviderId] + ); + logger.info(`[IdentityService] Deleted identity ${normalizedProvider}:${normalizedProviderId} for user ${userId}`); + return { success: true, deleted: result.rowCount }; + } catch (error) { + logger.error(`[IdentityService] Error deleting identity ${provider}:${providerId} for user ${userId}:`, error); + return { success: false, error: error.message }; + } + } } module.exports = new IdentityService(); diff --git a/frontend/src/components/Sidebar.vue b/frontend/src/components/Sidebar.vue index e084703..7e01257 100644 --- a/frontend/src/components/Sidebar.vue +++ b/frontend/src/components/Sidebar.vue @@ -43,18 +43,60 @@ - -