From 25151ca5cd892335cba478a24174f07a41172e0c Mon Sep 17 00:00:00 2001 From: Adrian Pilarczyk Date: Fri, 28 Apr 2023 10:24:45 +0200 Subject: [PATCH] refactor: :recycle: move address from channel to provider --- .../src/modules/app/get-app-config.test.ts | 21 +++++++++----- .../src/modules/avatax/address-factory.ts | 8 +++--- .../taxes/src/modules/avatax/avatax-config.ts | 20 +++++++++++-- .../channels-configuration/channels-config.ts | 18 ------------ .../modules/taxes/active-tax-provider.test.ts | 28 +++++++++---------- .../taxes/src/modules/taxjar/taxjar-config.ts | 22 +++++++++++++-- .../modules/taxjar/taxjar-webhook.service.ts | 2 +- apps/taxes/src/modules/ui/providers.tsx | 7 +++++ 8 files changed, 77 insertions(+), 49 deletions(-) diff --git a/apps/taxes/src/modules/app/get-app-config.test.ts b/apps/taxes/src/modules/app/get-app-config.test.ts index e0b35fc..328a57d 100644 --- a/apps/taxes/src/modules/app/get-app-config.test.ts +++ b/apps/taxes/src/modules/app/get-app-config.test.ts @@ -20,6 +20,13 @@ const mockedProviders: ProvidersConfig = [ password: "avatax-password", username: "avatax-username", }, + address: { + city: "New York", + country: "US", + state: "NY", + street: "123 Main St", + zip: "10001", + }, }, }, { @@ -31,6 +38,13 @@ const mockedProviders: ProvidersConfig = [ credentials: { apiKey: "taxjar-api-key", }, + address: { + city: "New York", + country: "US", + state: "NY", + street: "123 Main St", + zip: "10001", + }, }, }, ]; @@ -38,13 +52,6 @@ const mockedEncryptedProviders = encrypt(JSON.stringify(mockedProviders), mocked const mockedChannels: ChannelsConfig = { "default-channel": { - address: { - city: "New York", - country: "US", - state: "NY", - street: "123 Main St", - zip: "10001", - }, providerInstanceId: "1", }, }; diff --git a/apps/taxes/src/modules/avatax/address-factory.ts b/apps/taxes/src/modules/avatax/address-factory.ts index 74ff9d9..70cefcd 100644 --- a/apps/taxes/src/modules/avatax/address-factory.ts +++ b/apps/taxes/src/modules/avatax/address-factory.ts @@ -1,8 +1,8 @@ import { AddressLocationInfo as AvataxAddress } from "avatax/lib/models/AddressLocationInfo"; -import { ChannelAddress } from "../channels-configuration/channels-config"; -import { AddressFragment as SaleorAddress } from "../../../generated/graphql"; +import { AvataxConfig } from "./avatax-config"; +import { AddressFragment } from "../../../generated/graphql"; -function mapSaleorAddressToAvataxAddress(address: SaleorAddress): AvataxAddress { +function mapSaleorAddressToAvataxAddress(address: AddressFragment): AvataxAddress { return { line1: address.streetAddress1, line2: address.streetAddress2, @@ -13,7 +13,7 @@ function mapSaleorAddressToAvataxAddress(address: SaleorAddress): AvataxAddress }; } -function mapChannelAddressToAvataxAddress(address: ChannelAddress): AvataxAddress { +function mapChannelAddressToAvataxAddress(address: AvataxConfig["address"]): AvataxAddress { return { line1: address.street, city: address.city, diff --git a/apps/taxes/src/modules/avatax/avatax-config.ts b/apps/taxes/src/modules/avatax/avatax-config.ts index 2951679..8bd27f1 100644 --- a/apps/taxes/src/modules/avatax/avatax-config.ts +++ b/apps/taxes/src/modules/avatax/avatax-config.ts @@ -1,7 +1,15 @@ import { z } from "zod"; import { obfuscateSecret } from "../../lib/utils"; -const avataxCredentials = z.object({ +const addressSchema = z.object({ + country: z.string(), + zip: z.string(), + state: z.string(), + city: z.string(), + street: z.string(), +}); + +const avataxCredentialsSchema = z.object({ username: z.string().min(1, { message: "Username requires at least one character." }), password: z.string().min(1, { message: "Password requires at least one character." }), }); @@ -12,7 +20,8 @@ export const avataxConfigSchema = z.object({ companyCode: z.string().optional(), isAutocommit: z.boolean(), shippingTaxCode: z.string().optional(), - credentials: avataxCredentials, + credentials: avataxCredentialsSchema, + address: addressSchema, }); export type AvataxConfig = z.infer; @@ -27,6 +36,13 @@ export const defaultAvataxConfig: AvataxConfig = { username: "", password: "", }, + address: { + city: "", + country: "", + state: "", + street: "", + zip: "", + }, }; export const avataxInstanceConfigSchema = z.object({ diff --git a/apps/taxes/src/modules/channels-configuration/channels-config.ts b/apps/taxes/src/modules/channels-configuration/channels-config.ts index ad2805b..2e92f81 100644 --- a/apps/taxes/src/modules/channels-configuration/channels-config.ts +++ b/apps/taxes/src/modules/channels-configuration/channels-config.ts @@ -1,19 +1,8 @@ import { z } from "zod"; import { ChannelFragment } from "../../../generated/graphql"; -const addressSchema = z.object({ - country: z.string(), - zip: z.string(), - state: z.string(), - city: z.string(), - street: z.string(), -}); - -export type ChannelAddress = z.infer; - export const channelSchema = z.object({ providerInstanceId: z.string(), - address: addressSchema, }); export type ChannelConfig = z.infer; @@ -22,13 +11,6 @@ export type ChannelsConfig = z.infer; export const defaultChannelConfig: ChannelConfig = { providerInstanceId: "", - address: { - city: "", - country: "", - state: "", - street: "", - zip: "", - }, }; export const createDefaultChannelsConfig = (channels: ChannelFragment[]): ChannelsConfig => { diff --git a/apps/taxes/src/modules/taxes/active-tax-provider.test.ts b/apps/taxes/src/modules/taxes/active-tax-provider.test.ts index 12c25e3..0f7befd 100644 --- a/apps/taxes/src/modules/taxes/active-tax-provider.test.ts +++ b/apps/taxes/src/modules/taxes/active-tax-provider.test.ts @@ -29,6 +29,13 @@ const mockedProviders: ProvidersConfig = [ password: "avatax-password", username: "avatax-username", }, + address: { + city: "New York", + country: "US", + state: "NY", + street: "123 Main St", + zip: "10001", + }, }, }, { @@ -40,6 +47,13 @@ const mockedProviders: ProvidersConfig = [ credentials: { apiKey: "taxjar-api-key", }, + address: { + city: "New York", + country: "US", + state: "NY", + street: "123 Main St", + zip: "10001", + }, }, }, ]; @@ -47,26 +61,12 @@ const mockedEncryptedProviders = encrypt(JSON.stringify(mockedProviders), mocked const mockedChannelsWithInvalidProviderInstanceId: ChannelsConfig = { "default-channel": { - address: { - city: "New York", - country: "US", - state: "NY", - street: "123 Main St", - zip: "10001", - }, providerInstanceId: "3", }, }; const mockedValidChannels: ChannelsConfig = { "default-channel": { - address: { - city: "New York", - country: "US", - state: "NY", - street: "123 Main St", - zip: "10001", - }, providerInstanceId: "1", }, }; diff --git a/apps/taxes/src/modules/taxjar/taxjar-config.ts b/apps/taxes/src/modules/taxjar/taxjar-config.ts index 0e7591f..4f75917 100644 --- a/apps/taxes/src/modules/taxjar/taxjar-config.ts +++ b/apps/taxes/src/modules/taxjar/taxjar-config.ts @@ -1,23 +1,39 @@ import { z } from "zod"; import { obfuscateSecret } from "../../lib/utils"; -const credentials = z.object({ +const addressSchema = z.object({ + country: z.string(), + zip: z.string(), + state: z.string(), + city: z.string(), + street: z.string(), +}); + +const taxJarCredentialsSchema = z.object({ apiKey: z.string().min(1, { message: "API Key requires at least one character." }), }); export const taxJarConfigSchema = z.object({ name: z.string().min(1, { message: "Name requires at least one character." }), isSandbox: z.boolean(), - credentials, + credentials: taxJarCredentialsSchema, + address: addressSchema, }); export type TaxJarConfig = z.infer; export const defaultTaxJarConfig: TaxJarConfig = { name: "", + isSandbox: false, credentials: { apiKey: "", }, - isSandbox: false, + address: { + city: "", + country: "", + state: "", + street: "", + zip: "", + }, }; export const taxJarInstanceConfigSchema = z.object({ diff --git a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts index 55c8067..9fc651c 100644 --- a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts +++ b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts @@ -9,8 +9,8 @@ import { TaxJarOrderCreatedAdapter } from "./order-created/taxjar-order-created- export class TaxJarWebhookService implements ProviderWebhookService { client: TaxJarClient; - config: TaxJarConfig; private logger: Logger; + private config: TaxJarConfig; constructor(config: TaxJarConfig) { const taxJarClient = new TaxJarClient(config); diff --git a/apps/taxes/src/modules/ui/providers.tsx b/apps/taxes/src/modules/ui/providers.tsx index e75e71c..64cb24d 100644 --- a/apps/taxes/src/modules/ui/providers.tsx +++ b/apps/taxes/src/modules/ui/providers.tsx @@ -39,6 +39,13 @@ const MOCKED_PROVIDERS: ProvidersConfig = [ credentials: { apiKey: "1234", }, + address: { + city: "New York", + country: "US", + state: "NY", + street: "123 Main St", + zip: "10001", + }, }, id: "1", },