From 94c03b155e0c11468d5463a652eda37e32110146 Mon Sep 17 00:00:00 2001 From: Daniil Chemerkin Date: Thu, 4 Sep 2025 21:59:04 +0000 Subject: [PATCH] remove legacy server from compatibility v2 --- src/api/api.ts | 3 - src/api/resources/User.ts | 20 +------ src/api/resources/UserSubscriptionStatus.ts | 11 ---- src/auth/AuthContext.ts | 2 +- src/auth/AuthProvider.tsx | 20 +++---- src/components/App/index.tsx | 45 --------------- src/components/AuthResultPage/index.tsx | 12 +--- src/components/FeedbackPage/index.tsx | 23 +------- .../authentication/use-authentication.ts | 9 +-- src/initialization/index.tsx | 12 +--- src/routes.ts | 7 --- src/services/user-adapter.ts | 55 +++++++++++++++++++ 12 files changed, 75 insertions(+), 144 deletions(-) create mode 100644 src/services/user-adapter.ts diff --git a/src/api/api.ts b/src/api/api.ts index c1e1eff..b8af582 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -41,9 +41,7 @@ const api = { getAppConfig: createMethod(Apps.createRequest), // getElement: createMethod(Element.createRequest), getElements: createMethod(Elements.createRequest), - getUser: createMethod(User.createGetRequest), getMe: createMethod(User.createMeRequest), - updateUser: createMethod(User.createPatchRequest), getAssets: createMethod(Assets.createRequest), getAssetCategories: createMethod(AssetCategories.createRequest), getDailyForecasts: createMethod(DailyForecasts.createRequest), @@ -102,7 +100,6 @@ const api = { // Subscriptions // getSubscriptionPlans: createMethod(SubscriptionPlans.createRequest), // getSubscriptionCheckout: createMethod(SubscriptionCheckout.createRequest), - getSubscriptionStatus: createMethod(SubscriptionStatus.createRequest), // new get subscription status getSubscriptionStatusNew: createMethod(SubscriptionStatus.createRequestNew), getUserSubscriptions: createMethod(UserSubscriptions.createRequestGet), diff --git a/src/api/resources/User.ts b/src/api/resources/User.ts index e35649b..331a2a5 100644 --- a/src/api/resources/User.ts +++ b/src/api/resources/User.ts @@ -116,21 +116,6 @@ export interface Subscription { last_sent_at: string | null; } -export const createGetRequest = ({ token }: GetPayload): Request => { - const url = new URL(routes.server.user()); - return new Request(url, { method: "GET", headers: getAuthHeaders(token) }); -}; - -export const createPatchRequest = ({ token, user }: PatchPayload): Request => { - const url = new URL(routes.server.user()); - const body = JSON.stringify({ user }); - return new Request(url, { - method: "PATCH", - headers: getAuthHeaders(token), - body, - }); -}; - export enum ESourceAuthorization { "aura.main" = "aura.main", "aura.palmistry" = "aura.palmistry", @@ -249,9 +234,8 @@ export interface IUser { sign: boolean; signDate: string; password: string; - externalId: string; - klaviyoId: string; - // stripeId: string | null; + externalId?: string; + klaviyoId?: string; assistants: string[]; createdAt: string; updatedAt: string; diff --git a/src/api/resources/UserSubscriptionStatus.ts b/src/api/resources/UserSubscriptionStatus.ts index caca009..a73bf83 100644 --- a/src/api/resources/UserSubscriptionStatus.ts +++ b/src/api/resources/UserSubscriptionStatus.ts @@ -4,17 +4,6 @@ import { getAuthHeaders } from "../utils" export type Payload = AuthPayload -export interface Response { - user: { - has_subscription: boolean - } -} - -export const createRequest = ({ token }: Payload): Request => { - const url = new URL(routes.server.subscriptionStatus()) - return new Request(url, { method: 'GET', headers: getAuthHeaders(token) }) -} - export interface ResponseNew { subscription: boolean; } diff --git a/src/auth/AuthContext.ts b/src/auth/AuthContext.ts index 0cf0675..d28a27f 100644 --- a/src/auth/AuthContext.ts +++ b/src/auth/AuthContext.ts @@ -6,7 +6,7 @@ export interface AuthContextValue { user: User.User | null token: AuthToken logout: () => void - signUp: (token: AuthToken, user: User.User, newUser?: IUser, isAnonymous?: boolean) => AuthToken + signUp: (token: AuthToken, newUser?: IUser, isAnonymous?: boolean) => AuthToken } export const AuthContext = createContext({} as AuthContextValue) diff --git a/src/auth/AuthProvider.tsx b/src/auth/AuthProvider.tsx index 946a02d..5587257 100644 --- a/src/auth/AuthProvider.tsx +++ b/src/auth/AuthProvider.tsx @@ -4,6 +4,7 @@ import { actions, selectors } from "../store"; import { AuthToken, User } from "../api"; import { AuthContext } from "./AuthContext"; import { IUser } from "@/api/resources/User"; +import { mapIUserToLegacy } from "@/services/user-adapter"; export function AuthProvider({ children, @@ -14,15 +15,16 @@ export function AuthProvider({ const { gender, partnerGender, birthdate, partnerBirthdate, birthPlace, partnerBirthPlace } = useSelector(selectors.selectQuestionnaire); const signUp = useCallback( - (token: AuthToken, user: User.User, newUser?: IUser, isAnonymous?: boolean): AuthToken => { + (token: AuthToken, newUser?: IUser, isAnonymous?: boolean): AuthToken => { dispatch(actions.token.update(token)); - dispatch(actions.user.update(user)); - dispatch(actions.form.addEmail(user.email)); - if (user.profile.birthday?.length) { - dispatch(actions.form.addDate(user.profile.birthday.split(" ")[0])); + const legacyUser: User.User = newUser ? mapIUserToLegacy(newUser) : user; + dispatch(actions.user.update(legacyUser)); + dispatch(actions.form.addEmail(legacyUser.email)); + if (legacyUser.profile.birthday?.length) { + dispatch(actions.form.addDate(legacyUser.profile.birthday.split(" ")[0])); dispatch( actions.form.addTime( - new Date(user.profile.birthday).toLocaleTimeString() + new Date(legacyUser.profile.birthday).toLocaleTimeString() ) ); } @@ -35,14 +37,10 @@ export function AuthProvider({ partnerBirthdate: newUser.partner?.birthdate || partnerBirthdate || undefined, partnerGender: newUser.partner?.gender || partnerGender || undefined, })) - - dispatch(actions.user.update({ - username: newUser.profile?.name ?? undefined, - })); } return token; }, - [dispatch, gender, partnerGender, birthdate, partnerBirthdate, birthPlace, partnerBirthPlace] + [dispatch, gender, partnerGender, birthdate, partnerBirthdate, birthPlace, partnerBirthPlace, user] ); const logout = useCallback(() => dispatch(actions.reset()), [dispatch]); const auth = useMemo( diff --git a/src/components/App/index.tsx b/src/components/App/index.tsx index 75858fc..7cd8f79 100755 --- a/src/components/App/index.tsx +++ b/src/components/App/index.tsx @@ -2,7 +2,6 @@ import { useState, useEffect, useRef, - useCallback, useMemo, useLayoutEffect } from "react"; @@ -56,16 +55,12 @@ import DidYouKnowPage from "../DidYouKnowPage"; import FreePeriodInfoPage from "../FreePeriodInfoPage"; import FeedbackPage from "../FeedbackPage"; import CompatibilityPage from "../Compatibility"; -import BreathPage from "../BreathPage"; import PriceListPage from "../PriceListPage"; import CompatResultPage from "../CompatResultPage"; import HomePage from "../HomePage"; import UserCallbacksPage from "../UserCallbacksPage"; import NavbarFooter, { INavbarHomeItems } from "../NavbarFooter"; import { EPathsFromHome } from "@/store/siteConfig"; -import parseAPNG, { APNG } from "apng-js"; -import { useApi, useApiCall } from "@/api"; -import { Asset } from "@/api/resources/Assets"; import PaymentResultPage from "../PaymentPage/results"; import PaymentSuccessPage from "../PaymentPage/results/SuccessPage"; import PaymentFailPage from "../PaymentPage/results/ErrorPage"; @@ -171,13 +166,7 @@ ReactGA.initialize(gaMeasurementId); function App(): JSX.Element { const location = useLocation(); - const [leoApng, setLeoApng] = useState(Error); useScrollToTop({ scrollBehavior: "auto" }); - // const [ - // padLockApng, - // setPadLockApng, - // ] = useState(Error); - const api = useApi(); const dispatch = useDispatch(); const { user } = useAuth(); const { session } = useSession(); @@ -282,36 +271,6 @@ function App(): JSX.Element { }); }, []); - const assetsData = useCallback(async () => { - const { assets } = await api.getAssets({ - category: String("au"), - }); - return assets; - }, [api]); - - const { data } = useApiCall(assetsData); - // data - - useEffect(() => { - async function getApng() { - if (!data) return; - const response = await fetch( - data.find((item) => item.key === "au.apng.leo")?.url || "" - ); - const arrayBuffer = await response.arrayBuffer(); - setLeoApng(parseAPNG(arrayBuffer)); - } - getApng(); - }, [data]); - - // useEffect(() => { - // (async () => { - // const response = await fetch("/padlock_icon_animation_closing.png"); - // const arrayBuffer = await response.arrayBuffer(); - // setPadLockApng(parseAPNG(arrayBuffer)); - // })(); - // }, []); - useEffect(() => { if (!user) return; dispatch(actions.form.addEmail(user.email)); @@ -472,10 +431,6 @@ function App(): JSX.Element { path={routes.client.compatibilityResult()} element={} /> - } - /> } diff --git a/src/components/AuthResultPage/index.tsx b/src/components/AuthResultPage/index.tsx index f4758ac..82234b0 100644 --- a/src/components/AuthResultPage/index.tsx +++ b/src/components/AuthResultPage/index.tsx @@ -28,18 +28,8 @@ function AuthResultPage(): JSX.Element { (async () => { try { setIsLoading(true); - const apiUser = await api.getUser({ token: access_token }); + const apiUser = await api.getMe({ token: access_token }); signUp(access_token, apiUser.user); - const payload = { - user: { profile_attributes: { birthday } }, - token: access_token, - }; - const updatedUser = await api.updateUser(payload).catch((error) => { - console.log("Error: ", error); - }); - if (updatedUser?.user) { - dispatch(actions.user.update(updatedUser.user)); - } dispatch(actions.status.update("registred")); setIsLoading(false); setTimeout(() => { diff --git a/src/components/FeedbackPage/index.tsx b/src/components/FeedbackPage/index.tsx index 2bc8889..8bf607f 100644 --- a/src/components/FeedbackPage/index.tsx +++ b/src/components/FeedbackPage/index.tsx @@ -4,50 +4,29 @@ import routes from "@/routes"; import styles from "./styles.module.css"; import MainButton from "../MainButton"; import Title from "../Title"; -import { useApi, useApiCall } from "@/api"; -import { useCallback } from "react"; -import { Asset } from "@/api/resources/Assets"; function FeedbackPage(): JSX.Element { const { translate } = useTranslations(); const navigate = useNavigate(); - const api = useApi(); const handleNext = () => navigate(routes.client.freePeriodInfo()); - const assetsData = useCallback(async () => { - const { assets } = await api.getAssets({ category: String("au") }); - return assets; - }, [api]); - - const { - data: assets, - // isPending - } = useApiCall(assetsData); - const reviews = [ { title: translate("aura.name_1.review"), text: translate("aura.review_1.content"), - imageKey: "au.1.avatar", }, { title: translate("aura.name_2.review"), text: translate("aura.review_2.content"), - imageKey: "au.2.avatar", }, ]; return (
- {reviews.map(({ title, text, imageKey }, index) => ( + {reviews.map(({ title, text }, index) => (
- asset.key === imageKey)?.url} - alt="profile picture" - />
{title} stop diff --git a/src/hooks/authentication/use-authentication.ts b/src/hooks/authentication/use-authentication.ts index 6b98b49..aacc1d4 100644 --- a/src/hooks/authentication/use-authentication.ts +++ b/src/hooks/authentication/use-authentication.ts @@ -155,7 +155,6 @@ export const useAuthentication = () => { } metricService.reachGoal(EGoals.ENTERED_EMAIL, [EMetrics.YANDEX, EMetrics.KLAVIYO]); metricService.reachGoal(EGoals.LEAD, [EMetrics.FACEBOOK]); - const { user } = await api.getUser({ token }); const { user: userMe } = await api.getMe({ token }); if (userId?.length) { metricService.userParams({ @@ -164,7 +163,7 @@ export const useAuthentication = () => { }) metricService.setUserID(userId); } - signUp(token, user, userMe); + signUp(token, userMe); setToken(token); dispatch(actions.status.update("registred")); } catch (error: unknown) { @@ -197,7 +196,6 @@ export const useAuthentication = () => { metricService.reachGoal(EGoals.ENTERED_EMAIL, [EMetrics.YANDEX, EMetrics.KLAVIYO]); metricService.reachGoal(EGoals.LEAD, [EMetrics.FACEBOOK]); } - const { user } = await api.getUser({ token }); const { user: userMe } = await api.getMe({ token }); const userId = userIdFromApi || userMe?._id; if (userId?.length) { @@ -209,7 +207,7 @@ export const useAuthentication = () => { }) metricService.setUserID(userId); } - signUp(token, user, userMe, isAnonymous); + signUp(token, userMe, isAnonymous); setToken(token); dispatch(actions.userConfig.setAuthCode(authCode || "")); dispatch(actions.personalVideo.updateStatus({ generatingVideo: generatingVideo || false, videoId: videoId || "" })); @@ -234,7 +232,6 @@ export const useAuthentication = () => { try { setIsLoading(true); setError(null) - const { user } = await api.getUser({ token }); const { user: userMe } = await api.getMe({ token }); const userId = userIdFromApi || userMe?._id; if (userId?.length) { @@ -246,7 +243,7 @@ export const useAuthentication = () => { }) metricService.setUserID(userId); } - signUp(token, user, userMe, true); + signUp(token, userMe, true); setToken(token); dispatch(actions.userConfig.setAuthCode(authCode || "")); dispatch(actions.personalVideo.updateStatus({ generatingVideo: generatingVideo || false, videoId: videoId || "" })); diff --git a/src/initialization/index.tsx b/src/initialization/index.tsx index 7b9d21c..831c5cb 100644 --- a/src/initialization/index.tsx +++ b/src/initialization/index.tsx @@ -85,9 +85,8 @@ export function InitializationProvider({ children }: InitializationProviderProps try { logout(); const { token } = await api.getRealToken({ token: jwtToken }); - const { user } = await api.getUser({ token }); const { user: userMe } = await api.getMe({ token }); - signUp(token, user, userMe); + signUp(token, userMe); } catch (error) { console.log("Error of get real token or get user: "); console.error(error); @@ -102,19 +101,14 @@ export function InitializationProvider({ children }: InitializationProviderProps useEffect(() => { (async () => { if (!token.length || !user) return; - const { - user: { has_subscription }, - } = await api.getSubscriptionStatus({ - token, - }); const { subscription: subscriptionStatusNew } = await api.getSubscriptionStatusNew({ token }); - if ((has_subscription || subscriptionStatusNew) && user) { + if (subscriptionStatusNew && user) { return dispatch(actions.status.update("subscribed")); } - if (!has_subscription && !subscriptionStatusNew && user) { + if (!subscriptionStatusNew && user) { return dispatch(actions.status.update("unsubscribed")); } if (!user) { diff --git a/src/routes.ts b/src/routes.ts index 12d5d2b..cc5dfee 100755 --- a/src/routes.ts +++ b/src/routes.ts @@ -508,15 +508,12 @@ const routes = { }, server: { userLocale: () => ["https://ipapi.co", "json"].join("/"), - user: () => [apiHost, prefix, "user.json"].join("/"), // new method for getting user data me: () => [dApiHost, "users", "me"].join("/"), // token: () => [apiHost, prefix, "auth", "token.json"].join("/"), elements: () => [oldBackendPrefix, "elements.json"].join("/"), zodiacs: (zodiac: string) => [apiHost, prefix, "zodiacs", `${zodiac}.json`].join("/"), - // element: (type: string) => - // [apiHost, prefix, "elements", `${type}.json`].join("/"), apps: (bundleId: string) => [oldBackendPrefix, `${bundleId}.json`].join("/"), assets: (category: string) => @@ -618,10 +615,6 @@ const routes = { createChat: (assistantId: string) => [dApiHost, "chats", "create", assistantId].join("/"), // Subscriptions - subscriptionStatus: () => - [apiHost, prefix, "user", "subscription_receipts", "status.json"].join( - "/" - ), subscriptionReceipts: () => [apiHost, prefix, "user", "subscription_receipts.json"].join("/"), subscriptionStatusNew: () => diff --git a/src/services/user-adapter.ts b/src/services/user-adapter.ts new file mode 100644 index 0000000..140cd6e --- /dev/null +++ b/src/services/user-adapter.ts @@ -0,0 +1,55 @@ +import { User } from "@/api"; +import { IUser } from "@/api/resources/User"; + +export function mapIUserToLegacy(newUser: IUser): User.User { + const legacyUser: User.User = { + id: newUser._id || undefined, + username: newUser.profile?.name ?? null, + email: newUser.email || "", + locale: newUser.locale || "", + state: "", + timezone: newUser.timezone || "", + new_registration: false, + stat: { + last_online_at: null, + prev_online_at: null, + }, + profile: { + full_name: newUser.profile?.name ?? null, + gender: newUser.profile?.gender ?? null, + birthday: newUser.profile?.birthdate ?? null, + birthplace: newUser.profile?.birthplace?.address + ? { + id: "", + address: newUser.profile.birthplace.address, + coords: "", + } + : null, + age: typeof newUser.profile?.age === "number" + ? { years: newUser.profile.age, days: 0 } + : null, + sign: newUser.profile?.sign + ? { + house: 0, + ruler: "", + dates: { + start: { month: 0, day: 0 }, + end: { month: 0, day: 0 }, + }, + sign: newUser.profile.sign, + char: "", + polarity: "", + modality: "", + triplicity: "", + } + : null, + userpic: null, + userpic_mime_type: undefined, + relationship_status: "", + human_relationship_status: "", + }, + daily_push_subs: [], + }; + + return legacyUser; +}