From d79d02d5d1975c8503ec60d002b1736dd69c7df0 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 22 May 2026 14:20:11 +0500 Subject: [PATCH] refactor: remove email change functionality --- .../src/pages/me/ui/sections/SettingsPage.tsx | 52 ------------------ client/src/shared/model/auth.ts | 17 +----- server/prisma/prisma/dev.db | Bin 364544 -> 364544 bytes server/src/routes/auth.js | 44 --------------- 4 files changed, 2 insertions(+), 111 deletions(-) diff --git a/client/src/pages/me/ui/sections/SettingsPage.tsx b/client/src/pages/me/ui/sections/SettingsPage.tsx index 4b62caa..df6635a 100644 --- a/client/src/pages/me/ui/sections/SettingsPage.tsx +++ b/client/src/pages/me/ui/sections/SettingsPage.tsx @@ -17,16 +17,12 @@ import { useUnit } from 'effector-react' import { useForm } from 'react-hook-form' import { AVATAR_STYLES, DEFAULT_STYLE_ID, getStyleById } from '@/shared/lib/avatar-styles' import { - $requestEmailChangeCodeError, $updateProfileError, $user, - $verifyEmailChangeError, fetchAuthMethodsFx, - requestEmailChangeCodeFx, setPasswordFx, unlinkOAuthFx, updateProfileFx, - verifyEmailChangeFx, type AuthMethod, } from '@/shared/model/auth' import { UserAvatar } from '@/shared/ui/UserAvatar' @@ -41,17 +37,8 @@ function getApiErrorMessage(error: unknown): string | null { export function SettingsPage() { const user = useUnit($user) - const pendingEmailReq = useUnit(requestEmailChangeCodeFx.pending) - const pendingEmailVerify = useUnit(verifyEmailChangeFx.pending) const pendingProfile = useUnit(updateProfileFx.pending) - const errorEmailReq = useUnit($requestEmailChangeCodeError) const errorProfile = useUnit($updateProfileError) - const errorEmailVerify = useUnit($verifyEmailChangeError) - - const emailForm = useForm<{ newEmail: string; code: string }>({ - defaultValues: { newEmail: '', code: '' }, - mode: 'onChange', - }) const profileForm = useForm<{ displayName: string }>({ defaultValues: { @@ -60,7 +47,6 @@ export function SettingsPage() { mode: 'onChange', }) - const emailErrorMsg = getApiErrorMessage(errorEmailReq) ?? getApiErrorMessage(errorEmailVerify) const profileErrorMsg = getApiErrorMessage(errorProfile) const [selectedStyle, setSelectedStyle] = useState(user?.avatarStyle || DEFAULT_STYLE_ID) @@ -136,11 +122,6 @@ export function SettingsPage() { Текущая почта: {user.email} - {emailErrorMsg && ( - - {emailErrorMsg} - - )} {profileErrorMsg && ( {profileErrorMsg} @@ -408,39 +389,6 @@ export function SettingsPage() { )} - - - - - - Смена почты - - - - - - - - - - ) diff --git a/client/src/shared/model/auth.ts b/client/src/shared/model/auth.ts index 36cf4d6..cf018fc 100644 --- a/client/src/shared/model/auth.ts +++ b/client/src/shared/model/auth.ts @@ -60,17 +60,6 @@ sample({ target: $user, }) -// ----- Email change ----- - -export const requestEmailChangeCodeFx = createEffect(async (newEmail: string) => { - await apiClient.post('me/change-email/request-code', { newEmail }) -}) - -export const verifyEmailChangeFx = createEffect(async (params: { newEmail: string; code: string }) => { - const { data } = await apiClient.post<{ user: AuthUser }>('me/change-email/verify', params) - return data.user -}) - // ----- Profile update ----- export type UpdateProfileParams = { @@ -113,17 +102,15 @@ export const unlinkOAuthFx = createEffect(async (provider: 'vk' | 'yandex') => { // ----- Error stores ----- -export const $requestEmailChangeCodeError = createErrorStore(requestEmailChangeCodeFx).$error -export const $verifyEmailChangeError = createErrorStore(verifyEmailChangeFx).$error export const $updateProfileError = createErrorStore(updateProfileFx).$error // ----- Re-exports ----- export { readStoredToken } from '@/shared/lib/persist-token' -// ----- Sync user from profile/email changes ----- +// ----- Sync user from profile changes ----- sample({ - clock: [verifyEmailChangeFx.doneData, updateProfileFx.doneData], + clock: [updateProfileFx.doneData], target: $user, }) diff --git a/server/prisma/prisma/dev.db b/server/prisma/prisma/dev.db index cda19f98ac667ce705f33772b47bee629bf290d8..f9777dd0595fe3c573bdd7775c645219a532f128 100644 GIT binary patch delta 881 zcmZozAl9%zY=Si7t%)+ujJGx>Ea~TA;=jzmf0_Rke>;EsWd@(%bCTP4JS{0 zFD%X^%52D)TacJ-VQOILP??yQl3JlxRNAy)+X6-w1rA33#|-?B`HyZEbePRQJwAqo zefqldjCR7whACwR1_tKoWu+-qIf=Oj$*JxC&ogfSf1Zg|frXL3fMK)1g9QGG0UXl{ z{xb>I1Jzdn)mwtpn;EATnU|)dLo72kvM?|)G_f$NG>DHcPj_cLN%MBL4EIYk&96$z2`sNjsw&R$(@kca=l69sJA_QmEl4lG;nUiT?np~Wd zR+&`-bo_S_9|#F^DK>T699UQkfKjrQfqyH17BDX3_@`&pv&32^8>Sio4NU@tZl+~M zS*}@bBF?Y?2Nf5D+|~dw5i^qav)HL%GnN+^7EJu94E(G3Q~4(FSpr@0kazpXvn(Zy z_0CK@_J%-t5I}f07w9qruy-vCOHEA;Q{kyCJvT8kM=v=)7wmO62pPf%G(;9;ggnd; zY%vNq1fFDbWuU1zu`ID9F)^{I80<$D2)XS73yT6UFB}CYXa42*+)Xy$o85e8y(D;v zJ&2JW78Epxf(JpUrO8n|^eFA6e?TpG5D!+=Yn)_54;pZWd8gm+y~mr^>DxPfd+!Q< z^!#cNKiYY?{p=Dpk6~~J-7f6zTFD69iob5UisE8YmJAq%UC)R$m%^(q%Iozp3`Nl_ z>Ei-oisc4AZG=hrWGmK@Tg*=K)GrB)#}e5Mjf?Y8!RB- zU!i^W#$etE97E8@zd&uP4eVw!N@HU7_nsC147G1jquFc%R-0);K8P8?;SdB2AK?uj ze$nqi&t$r6LWdx9U$opnzS2~>BK<+9XVK10Q?UGkZ!JBG z54kv=8=igwHGEBQQl#@v!6)90O1HBap7(eP!DOhqT&`z> { - const userId = request.user.sub - const newEmail = normalizeEmail(request.body?.newEmail) - if (!newEmail || !newEmail.includes('@')) return reply.code(400).send({ error: 'Некорректная почта' }) - - const exists = await prisma.user.findUnique({ - where: { email: newEmail }, - }) - if (exists) return reply.code(409).send({ error: 'Эта почта уже занята' }) - - await issueEmailCode({ - email: newEmail, - purpose: 'change_email', - userId, - }) - return { ok: true } - }) - - fastify.post('/api/me/change-email/verify', { preHandler: [fastify.authenticate] }, async (request, reply) => { - const userId = request.user.sub - const newEmail = normalizeEmail(request.body?.newEmail) - const code = String(request.body?.code || '').trim() - if (!newEmail || !newEmail.includes('@')) return reply.code(400).send({ error: 'Некорректная почта' }) - if (!code || code.length !== 6) return reply.code(400).send({ error: 'Код должен быть из 6 цифр' }) - - const exists = await prisma.user.findUnique({ - where: { email: newEmail }, - }) - if (exists) return reply.code(409).send({ error: 'Эта почта уже занята' }) - - const ok = await verifyEmailCode({ - email: newEmail, - purpose: 'change_email', - code, - userId, - }) - if (!ok) return reply.code(401).send({ error: 'Неверный или истёкший код' }) - - const user = await prisma.user.update({ - where: { id: userId }, - data: { email: newEmail }, - }) - return { user: mapUserForClient(user) } - }) fastify.patch('/api/me/profile', { preHandler: [fastify.authenticate] }, async (request, reply) => { const userId = request.user.sub