From 95b6dec872dcc2a0c4ef09c828ec5a903f18c4e6 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Tue, 21 May 2024 19:44:56 +0300 Subject: [PATCH] passthrough apolloClient & queryClient to get-kp-data's --- apps/web/process/add-product/get-kp-data.ts | 4 +- apps/web/process/configurator/get-kp-data.ts | 8 +-- apps/web/process/fingap/get-kp-data.ts | 12 ++--- apps/web/process/gibdd/get-kp-data.ts | 4 +- apps/web/process/insurance/get-kp-data.ts | 3 +- .../web/process/leasing-object/get-kp-data.ts | 4 +- apps/web/process/subsidy/get-kp-data.ts | 6 +-- .../supplier-agent/get-kp-data/get-sums.ts | 53 ++++++++++--------- .../supplier-agent/get-kp-data/index.ts | 4 +- apps/web/server/routers/calculate/index.ts | 2 +- apps/web/server/routers/quote/index.ts | 19 +++++-- apps/web/server/routers/quote/types.ts | 8 +++ 12 files changed, 71 insertions(+), 56 deletions(-) diff --git a/apps/web/process/add-product/get-kp-data.ts b/apps/web/process/add-product/get-kp-data.ts index cf57502..7e4b191 100644 --- a/apps/web/process/add-product/get-kp-data.ts +++ b/apps/web/process/add-product/get-kp-data.ts @@ -1,14 +1,12 @@ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; import * as CRMTypes from '@/graphql/crm.types'; export async function getKPData({ values: { recalcWithRevision }, quote, + ctx: { apolloClient }, }: GetQuoteInputData): Promise { - const apolloClient = initializeApollo(); - const registration = quote?.evo_addproduct_types?.find((x) => x?.evo_product_type === 100_000_001) ?.evo_addproduct_typeid ?? defaultValues.registration; diff --git a/apps/web/process/configurator/get-kp-data.ts b/apps/web/process/configurator/get-kp-data.ts index db5fd5a..5ba0fae 100644 --- a/apps/web/process/configurator/get-kp-data.ts +++ b/apps/web/process/configurator/get-kp-data.ts @@ -2,7 +2,6 @@ /* eslint-disable complexity */ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; import helper from './lib/helper'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; import calculateHelper from '@/process/calculate/lib/helper'; import { getKPData as getKPDataPrice } from '@/process/price/get-kp-data'; @@ -13,9 +12,10 @@ import { normalizeOptions } from '@/utils/entity'; export async function getKPData({ values, quote, + ctx, }: GetQuoteInputData): Promise { + const { apolloClient } = ctx; const { recalcWithRevision } = values; - const apolloClient = initializeApollo(); const leasingPeriod = recalcWithRevision ? Math.min(quote?.evo_period ?? 0, quote?.evo_accept_period ?? 0) @@ -61,8 +61,8 @@ export async function getKPData({ let minPriceChange = quote?.evo_min_change_price ?? defaultValues.minPriceChange; if (!recalcWithRevision) { - const kpDataPrice = await getKPDataPrice({ quote, values }); - const kpDataSubsidy = await getKPDataSubsidy({ quote, values }); + const kpDataPrice = await getKPDataPrice({ ctx, quote, values }); + const kpDataSubsidy = await getKPDataSubsidy({ ctx, quote, values }); const supplierCurrency = kpDataPrice.values?.supplierCurrency ?? defaultValues.supplierCurrency; const leaseObjectPrice = kpDataPrice.values?.leaseObjectPrice ?? defaultValues.leaseObjectPrice; diff --git a/apps/web/process/fingap/get-kp-data.ts b/apps/web/process/fingap/get-kp-data.ts index 9b47e8a..2e8c7f7 100644 --- a/apps/web/process/fingap/get-kp-data.ts +++ b/apps/web/process/fingap/get-kp-data.ts @@ -1,17 +1,18 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; import helper from './lib/helper'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; import { getKPData as getKPDataPayments } from '@/process/payments/get-kp-data'; import { getKPData as getKPDataPrice } from '@/process/price/get-kp-data'; import { createCurrencyUtility } from '@/utils/currency'; -import { QueryClient } from '@tanstack/react-query'; export async function getKPData({ quote, values, + ctx, }: GetQuoteInputData): Promise { + const { apolloClient, queryClient } = ctx; + if (!quote?.evo_fingap_accountid) { return { fingap: { @@ -21,13 +22,10 @@ export async function getKPData({ }; } - const apolloClient = initializeApollo(); - const queryClient = new QueryClient(); - const { getFingapRisks } = helper({ apolloClient, queryClient }); - const kpDataPrice = await getKPDataPrice({ quote, values }); - const kpDataPayments = await getKPDataPayments({ quote, values }); + const kpDataPrice = await getKPDataPrice({ ctx, quote, values }); + const kpDataPayments = await getKPDataPayments({ ctx, quote, values }); const leaseObjectPrice = kpDataPrice.values?.leaseObjectPrice ?? defaultValues.leaseObjectPrice; const firstPaymentRub = kpDataPrice.values?.firstPaymentRub ?? defaultValues.firstPaymentRub; diff --git a/apps/web/process/gibdd/get-kp-data.ts b/apps/web/process/gibdd/get-kp-data.ts index c61bdd9..d0ff704 100644 --- a/apps/web/process/gibdd/get-kp-data.ts +++ b/apps/web/process/gibdd/get-kp-data.ts @@ -1,17 +1,15 @@ /* eslint-disable sonarjs/cognitive-complexity */ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; import helper from './lib/helper'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; export async function getKPData({ values, quote, + ctx: { apolloClient }, }: GetQuoteInputData): Promise { const { recalcWithRevision, lead: leadId, opportunity: opportunityId } = values; - const apolloClient = initializeApollo(); - const { getData } = helper({ apolloClient, }); diff --git a/apps/web/process/insurance/get-kp-data.ts b/apps/web/process/insurance/get-kp-data.ts index 059dbce..95daaec 100644 --- a/apps/web/process/insurance/get-kp-data.ts +++ b/apps/web/process/insurance/get-kp-data.ts @@ -11,8 +11,9 @@ import { sum } from 'radash'; export async function getKPData({ values, quote, + ctx, }: GetQuoteInputData): Promise { - const kpDataFingap = await getKPDataFingap({ quote, values }); + const kpDataFingap = await getKPDataFingap({ ctx, quote, values }); const risks = kpDataFingap.fingap?.risks; diff --git a/apps/web/process/leasing-object/get-kp-data.ts b/apps/web/process/leasing-object/get-kp-data.ts index e6725b6..8a045b9 100644 --- a/apps/web/process/leasing-object/get-kp-data.ts +++ b/apps/web/process/leasing-object/get-kp-data.ts @@ -1,14 +1,12 @@ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; import helper from './lib/helper'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; export async function getKPData({ values: { recalcWithRevision }, quote, + ctx: { apolloClient }, }: GetQuoteInputData): Promise { - const apolloClient = initializeApollo(); - const brand = quote?.evo_brandid ?? defaultValues.brand; const model = quote?.evo_modelid ?? defaultValues.model; const leaseObjectUsed = quote?.evo_leasingobject_used ?? defaultValues.leaseObjectUsed; diff --git a/apps/web/process/subsidy/get-kp-data.ts b/apps/web/process/subsidy/get-kp-data.ts index 715d0b6..ada8491 100644 --- a/apps/web/process/subsidy/get-kp-data.ts +++ b/apps/web/process/subsidy/get-kp-data.ts @@ -1,6 +1,5 @@ import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types'; import helper from './lib/helper'; -import initializeApollo from '@/apollo/client'; import defaultValues from '@/config/default-values'; import { getKPData as getKPDataPrice } from '@/process/price/get-kp-data'; import { createCurrencyUtility } from '@/utils/currency'; @@ -8,10 +7,11 @@ import { createCurrencyUtility } from '@/utils/currency'; export async function getKPData({ values, quote, + ctx, }: GetQuoteInputData): Promise { - const apolloClient = initializeApollo(); + const { apolloClient } = ctx; - const kpDataPrice = await getKPDataPrice({ quote, values }); + const kpDataPrice = await getKPDataPrice({ ctx, quote, values }); const { RUB } = createCurrencyUtility({ apolloClient }); const supplierCurrency = kpDataPrice.values?.supplierCurrency ?? defaultValues.supplierCurrency; diff --git a/apps/web/process/supplier-agent/get-kp-data/get-sums.ts b/apps/web/process/supplier-agent/get-kp-data/get-sums.ts index ac6f2b0..81ef2e0 100644 --- a/apps/web/process/supplier-agent/get-kp-data/get-sums.ts +++ b/apps/web/process/supplier-agent/get-kp-data/get-sums.ts @@ -1,5 +1,5 @@ -import initializeApollo from '@/apollo/client'; import * as CRMTypes from '@/graphql/crm.types'; +import type { GetQuoteContext } from '@/server/routers/quote/types'; type Quote = NonNullable; @@ -19,39 +19,42 @@ type QuoteTotalFields = | 'evo_double_agent_reward_total' | 'evo_fin_department_reward_total'; -async function getRewardSum( - conditionId: string | null | undefined, - quote: Quote, - quoteRewardSummField: keyof Pick, - quoteRewardTotalField: keyof Pick -) { - if (!conditionId) return 0; +function makeGetRewardSum({ apolloClient }: GetQuoteContext) { + return async function ( + conditionId: string | null | undefined, + quote: Quote, + quoteRewardSummField: keyof Pick, + quoteRewardTotalField: keyof Pick + ) { + if (!conditionId) return 0; - const apolloClient = initializeApollo(); - const { - data: { evo_reward_condition }, - } = await apolloClient.query< - CRMTypes.GetRewardConditionQuery, - CRMTypes.GetRewardConditionQueryVariables - >({ - query: CRMTypes.GetRewardConditionDocument, - variables: { - conditionId, - }, - }); + const { + data: { evo_reward_condition }, + } = await apolloClient.query< + CRMTypes.GetRewardConditionQuery, + CRMTypes.GetRewardConditionQueryVariables + >({ + query: CRMTypes.GetRewardConditionDocument, + variables: { + conditionId, + }, + }); - if (evo_reward_condition?.evo_calc_reward_rules === 100_000_001) { - return quote[quoteRewardSummField]; - } + if (evo_reward_condition?.evo_calc_reward_rules === 100_000_001) { + return quote[quoteRewardSummField]; + } - return quote[quoteRewardTotalField]; + return quote[quoteRewardTotalField]; + }; } -export default async function getSums(quote: Quote | null) { +export default async function getSums(quote: Quote | null, ctx: GetQuoteContext) { if (!quote) { return null; } + const getRewardSum = makeGetRewardSum(ctx); + const [ dealerRewardSumm, dealerBrokerRewardSumm, diff --git a/apps/web/process/supplier-agent/get-kp-data/index.ts b/apps/web/process/supplier-agent/get-kp-data/index.ts index 3a5729a..95443b9 100644 --- a/apps/web/process/supplier-agent/get-kp-data/index.ts +++ b/apps/web/process/supplier-agent/get-kp-data/index.ts @@ -3,8 +3,8 @@ import type { GetQuoteInputData, GetQuoteProcessData } from '../../load-kp/types import getSums from './get-sums'; import defaultValues from '@/config/default-values'; -export async function getKPData({ quote }: GetQuoteInputData): Promise { - const sums = await getSums(quote); +export async function getKPData({ quote, ctx }: GetQuoteInputData): Promise { + const sums = await getSums(quote, ctx); return { values: { diff --git a/apps/web/server/routers/calculate/index.ts b/apps/web/server/routers/calculate/index.ts index b664075..cab4ed6 100644 --- a/apps/web/server/routers/calculate/index.ts +++ b/apps/web/server/routers/calculate/index.ts @@ -16,7 +16,7 @@ export const calculateRouter = router({ .input(CalculateInputSchema) .output(CalculateOutputSchema) .mutation(async ({ input, ctx }) => { - const apolloClient = initializeApollo(); + const apolloClient = initializeApollo(null, ctx.headers); const queryClient = new QueryClient(); try { diff --git a/apps/web/server/routers/quote/index.ts b/apps/web/server/routers/quote/index.ts index 247642b..f54c65e 100644 --- a/apps/web/server/routers/quote/index.ts +++ b/apps/web/server/routers/quote/index.ts @@ -59,10 +59,12 @@ export const quoteRouter = router({ getQuote: protectedProcedure .input(GetQuoteInputDataSchema) .output(GetQuoteOutputDataSchema) - .query(async ({ input }) => { + .query(async ({ input, ctx }) => { const { quote: quoteId } = input.values; - const apolloClient = initializeApollo(); + const apolloClient = initializeApollo(null, ctx.headers); + const queryClient = new QueryClient(); + const { data: { quote }, } = await apolloClient.query({ @@ -87,7 +89,16 @@ export const quoteRouter = router({ addProduct, createKpProcess, eltProcess, - ].map(({ getKPData }) => getKPData({ ...input, quote })) + ].map(({ getKPData }) => + getKPData({ + ...input, + quote, + ctx: { + apolloClient, + queryClient, + }, + }) + ) ); const values = processData.reduce((obj, data) => ({ ...obj, ...data.values }), defaultValues); @@ -111,7 +122,7 @@ export const quoteRouter = router({ .input(CreateQuoteInputDataSchema) .output(CreateQuoteOutputDataSchema) .mutation(async ({ input, ctx }) => { - const apolloClient = initializeApollo(); + const apolloClient = initializeApollo(null, ctx.headers); const queryClient = new QueryClient(); try { diff --git a/apps/web/server/routers/quote/types.ts b/apps/web/server/routers/quote/types.ts index a9f5fae..da11b98 100644 --- a/apps/web/server/routers/quote/types.ts +++ b/apps/web/server/routers/quote/types.ts @@ -5,6 +5,8 @@ import { KeysSchema, RowSchema } from '@/config/schema/insurance'; import PaymentsSchema from '@/config/schema/payments'; import ValuesSchema from '@/config/schema/values'; import type * as CRMTypes from '@/graphql/crm.types'; +import type { ApolloClient, NormalizedCacheObject } from '@apollo/client'; +import type { QueryClient } from '@tanstack/react-query'; import { z } from 'zod'; const { quote, recalcWithRevision, lead, opportunity } = ValuesSchema.shape; @@ -22,7 +24,13 @@ export const GetQuoteInputDataSchema = z }) .strict(); +export type GetQuoteContext = { + apolloClient: ApolloClient; + queryClient: QueryClient; +}; + export type GetQuoteInputData = z.infer & { + ctx: GetQuoteContext; quote: CRMTypes.GetQuoteDataQuery['quote']; };