
* feat: ✨ add taxes app * chore: 🔥 remove files, use monorepo ones instead * chore: ✨ add all env vars to .env.example * refactor: 🔧 use saleor eslint config * build: ⬆️ app-sdk, remove vercel from apl * refactor: ♻️ remove providers/index, infer taxProviders from providerConfig * refactor: ♻️ use tuples to use objects * refactor: 🚚 move types to taxes module * refactor: ♻️ tax-prepare-data -> tax-line-resolver * refactor: get isInFrame from apps-shared * build: ⬆️ next * feat: ✨ add appRegister allowlist * Update apps/taxes/src/pages/api/manifest.ts Co-authored-by: Krzysztof Wolski <krzysztof.k.wolski@gmail.com> * Update apps/taxes/src/pages/api/manifest.ts Co-authored-by: Krzysztof Wolski <krzysztof.k.wolski@gmail.com> * chore: 💡 improve comments * refactor: 🔥 app-dashboard-link * docs: 📝 add taxes to readme * refactor: 🔥 app-main-bar * refactor: ♻️ align saleor-app.ts with the rest * refactor: ♻️ use defaultValues * chore: ♻️ misc --------- Co-authored-by: Krzysztof Wolski <krzysztof.k.wolski@gmail.com>
147 lines
5.1 KiB
TypeScript
147 lines
5.1 KiB
TypeScript
import { TRPCError } from "@trpc/server";
|
|
import { logger as pinoLogger } from "../../lib/logger";
|
|
import { createId } from "../../lib/utils";
|
|
import { createSettingsManager } from "../app-configuration/metadata-manager";
|
|
import { ActiveTaxProvider } from "../taxes/active-tax-provider";
|
|
import { protectedClientProcedure } from "../trpc/protected-client-procedure";
|
|
import { router } from "../trpc/trpc-server";
|
|
import { GetProvidersConfigurationService } from "./get-providers-configuration.service";
|
|
import { ProvidersConfig } from "./providers-config";
|
|
import {
|
|
createProviderInstanceInputSchema,
|
|
deleteProviderInstanceInputSchema,
|
|
updateProviderInstanceInputSchema,
|
|
} from "./providers-config-input-schema";
|
|
import { TaxProvidersConfigurator } from "./providers-configurator";
|
|
|
|
export const providersConfigurationRouter = router({
|
|
getAll: protectedClientProcedure.query(async ({ ctx }) => {
|
|
const logger = pinoLogger.child({ saleorApiUrl: ctx.saleorApiUrl });
|
|
|
|
logger.debug("providersConfigurationRouter.fetch called");
|
|
|
|
return new GetProvidersConfigurationService({
|
|
apiClient: ctx.apiClient,
|
|
saleorApiUrl: ctx.saleorApiUrl,
|
|
}).getConfiguration();
|
|
}),
|
|
update: protectedClientProcedure
|
|
.input(updateProviderInstanceInputSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const logger = pinoLogger.child({ saleorApiUrl: ctx.saleorApiUrl });
|
|
logger.info(input, "providersConfigurationRouter.update called with input:");
|
|
|
|
const currentProviders = await new GetProvidersConfigurationService({
|
|
apiClient: ctx.apiClient,
|
|
saleorApiUrl: ctx.saleorApiUrl,
|
|
}).getConfiguration();
|
|
|
|
const provider = currentProviders.find((provider) => provider.id === input.id);
|
|
|
|
if (provider) {
|
|
const taxProvider = new ActiveTaxProvider(provider);
|
|
const validation = await taxProvider.validate();
|
|
|
|
if (validation && !validation.ok) {
|
|
logger.error(validation.error, "External validation failed.");
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: validation.error,
|
|
});
|
|
}
|
|
}
|
|
|
|
logger.info(currentProviders, "Fetched current providers:");
|
|
|
|
const taxProvidersConfigurator = new TaxProvidersConfigurator(
|
|
createSettingsManager(ctx.apiClient),
|
|
ctx.saleorApiUrl
|
|
);
|
|
|
|
const nextProviders: ProvidersConfig = currentProviders.map((provider) => {
|
|
if (provider.id === input.id) {
|
|
return {
|
|
...input.provider,
|
|
id: input.id,
|
|
};
|
|
}
|
|
|
|
return provider;
|
|
});
|
|
|
|
logger.info(nextProviders, "Will update providers with the following value:");
|
|
|
|
await taxProvidersConfigurator.setConfig(nextProviders);
|
|
|
|
return null;
|
|
}),
|
|
delete: protectedClientProcedure
|
|
.input(deleteProviderInstanceInputSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const logger = pinoLogger.child({ saleorApiUrl: ctx.saleorApiUrl });
|
|
logger.info(input, "providersConfigurationRouter.delete called with input:");
|
|
|
|
const currentProviders = await new GetProvidersConfigurationService({
|
|
apiClient: ctx.apiClient,
|
|
saleorApiUrl: ctx.saleorApiUrl,
|
|
}).getConfiguration();
|
|
|
|
logger.info(currentProviders, "Fetched current providers:");
|
|
|
|
const taxProvidersConfigurator = new TaxProvidersConfigurator(
|
|
createSettingsManager(ctx.apiClient),
|
|
ctx.saleorApiUrl
|
|
);
|
|
|
|
const nextProviders: ProvidersConfig = currentProviders.filter(
|
|
(provider) => provider.id !== input.id
|
|
);
|
|
|
|
logger.info(nextProviders, "Will update providers with the following value:");
|
|
|
|
await taxProvidersConfigurator.setConfig(nextProviders);
|
|
|
|
return null;
|
|
}),
|
|
create: protectedClientProcedure
|
|
.input(createProviderInstanceInputSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const logger = pinoLogger.child({ saleorApiUrl: ctx.saleorApiUrl });
|
|
logger.info(input, "providersConfigurationRouter.create called with input:");
|
|
|
|
const currentProviders = await new GetProvidersConfigurationService({
|
|
apiClient: ctx.apiClient,
|
|
saleorApiUrl: ctx.saleorApiUrl,
|
|
}).getConfiguration();
|
|
|
|
logger.info(currentProviders, "Fetched current providers:");
|
|
|
|
const taxProvidersConfigurator = new TaxProvidersConfigurator(
|
|
createSettingsManager(ctx.apiClient),
|
|
ctx.saleorApiUrl
|
|
);
|
|
|
|
const id = createId();
|
|
const provider = { ...input.provider, id };
|
|
const nextProviders: ProvidersConfig = [...currentProviders, provider];
|
|
|
|
if (provider) {
|
|
const taxProvider = new ActiveTaxProvider(provider);
|
|
const validation = await taxProvider.validate();
|
|
|
|
if (validation && !validation.ok) {
|
|
logger.error(validation.error, "External validation failed.");
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: validation.error,
|
|
});
|
|
}
|
|
}
|
|
|
|
logger.info(nextProviders, "Will update providers with the following value:");
|
|
|
|
await taxProvidersConfigurator.setConfig(nextProviders);
|
|
|
|
return { id };
|
|
}),
|
|
});
|