Skip to content

Commit

Permalink
Merge pull request #5 from commercetools/dasanorct/use_new_payments_sdk
Browse files Browse the repository at this point in the history
feat(payment-template): refactored code to use the new version of payments-sdk
  • Loading branch information
dasanorct authored Feb 2, 2024
2 parents afaf7c2 + 9ab6192 commit 595e275
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 181 deletions.
134 changes: 19 additions & 115 deletions processor/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions processor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"license": "ISC",
"dependencies": {
"@commercetools-backend/loggers": "^22.16.0",
"@commercetools/connect-payments-sdk": "0.0.1",
"@commercetools/connect-payments-sdk": "0.0.3",
"@commercetools/platform-sdk": "6.0.0",
"@commercetools/sdk-client-v2": "2.2.0",
"@fastify/cors": "8.4.0",
Expand Down Expand Up @@ -61,4 +61,4 @@
"vite": "4.4.9",
"vite-plugin-css-injected-by-js": "3.3.0"
}
}
}
1 change: 0 additions & 1 deletion processor/src/dtos/payment.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ export const CardPaymentMethod = Type.Object({

export const PaymentRequestSchema = Type.Object({
paymentMethod: Type.Composite([CardPaymentMethod]),
paymentReference: Type.String(),
});

export enum PaymentOutcome {
Expand Down
31 changes: 11 additions & 20 deletions processor/src/libs/fastify/context/context.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Authentication, SessionAuthentication } from '@commercetools/connect-payments-sdk';
import { fastifyRequestContext, requestContext } from '@fastify/request-context';
import { randomUUID } from 'crypto';
import { FastifyInstance, FastifyRequest } from 'fastify';
Expand All @@ -12,15 +13,11 @@ export type ContextData = {
query?: any;
correlationId: string;
requestId: string;
authentication?: Authentication;
};

export type SessionContextData = {
cartId: string;
allowedPaymentMethods: string[];
};

export const getRequestContext = (): ContextData => {
return requestContext.get('request') || ({} as ContextData);
export const getRequestContext = (): Partial<ContextData> => {
return requestContext.get('request') ?? {};
};

export const setRequestContext = (ctx: ContextData) => {
Expand All @@ -30,25 +27,19 @@ export const setRequestContext = (ctx: ContextData) => {
export const updateRequestContext = (ctx: Partial<ContextData>) => {
const currentContext = getRequestContext();
setRequestContext({
...currentContext,
...(currentContext as ContextData),
...ctx,
});
};

export const getSessionContext = (): SessionContextData => {
return requestContext.get('session') || ({} as SessionContextData);
};

export const setSessionContext = (ctx: SessionContextData) => {
requestContext.set('session', ctx);
export const getCartIdFromContext = (): string => {
const authentication = getRequestContext().authentication as SessionAuthentication;
return authentication?.getPrincipal().cartId;
};

export const updateSessionContext = (ctx: Partial<SessionContextData>) => {
const currentContext = getSessionContext();
setSessionContext({
...currentContext,
...ctx,
});
export const getAllowedPaymentMethodsFromContext = (): string[] => {
const authentication = getRequestContext().authentication as SessionAuthentication;
return authentication?.getPrincipal().allowedPaymentMethods;
};

export const requestContextPlugin = fp(async (fastify: FastifyInstance) => {
Expand Down
29 changes: 6 additions & 23 deletions processor/src/payment-sdk.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import { setupPaymentSDK, Logger, RequestContextData } from '@commercetools/connect-payments-sdk';
import { config } from './config/config';
import {
getRequestContext,
getSessionContext,
updateRequestContext,
updateSessionContext,
} from './libs/fastify/context/context';
import { getRequestContext, updateRequestContext } from './libs/fastify/context/context';

export class AppLogger implements Logger {
public debug = (obj: object, message: string) => {
Expand All @@ -32,33 +27,21 @@ export const paymentSDK = setupPaymentSDK({
projectKey: config.projectKey,
sessionUrl: config.sessionUrl,
getContextFn: (): RequestContextData => {
const { correlationId, requestId } = getRequestContext();
const { cartId, allowedPaymentMethods } = getSessionContext();
const { correlationId, requestId, authentication } = getRequestContext();
return {
correlationId,
requestId,
sessionData: {
allowedPaymentMethods,
cartId,
},
correlationId: correlationId || '',
requestId: requestId || '',
authentication,
};
},
updateContextFn: (context: Partial<RequestContextData>) => {
const requestContext = Object.assign(
{},
context.correlationId ? { correlationId: context.correlationId } : {},
context.requestId ? { requestId: context.requestId } : {},
context.authentication ? { authentication: context.authentication } : {},
);
updateRequestContext(requestContext);

const sessionContext = Object.assign(
{},
context.sessionData?.cartId ? { cartId: context.sessionData.cartId } : {},
context.sessionData?.allowedPaymentMethods
? { allowedPaymentMethods: context.sessionData.allowedPaymentMethods }
: {},
);
updateSessionContext(sessionContext);
},
logger: appLogger,
});
6 changes: 3 additions & 3 deletions processor/src/routes/payment.route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ import {
PaymentResponseSchema,
PaymentResponseSchemaDTO,
} from '../dtos/payment.dto';
import { SessionAuthenticationHook } from '@commercetools/connect-payments-sdk';

type PaymentRoutesOptions = {
paymentService: PaymentService;
sessionAuthHook: onRequestHookHandler;
sessionAuthHook: SessionAuthenticationHook;
};

export const paymentRoutes = async (fastify: FastifyInstance, opts: FastifyPluginOptions & PaymentRoutesOptions) => {
fastify.post<{ Body: PaymentRequestSchemaDTO; Reply: PaymentResponseSchemaDTO }>(
'/payments',
{
// TODO: implement session
// onRequest: opts.sessionAuthHook,
onRequest: [opts.sessionAuthHook.authenticate()],
schema: {
body: PaymentRequestSchema,
response: {
Expand Down
8 changes: 3 additions & 5 deletions processor/src/routes/status.route.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { healthCheckCoCoPermissions, statusHandler } from '@commercetools/connect-payments-sdk';
import { healthCheckCommercetoolsPermissions, statusHandler } from '@commercetools/connect-payments-sdk';
import { FastifyInstance, FastifyPluginOptions } from 'fastify';
import { config } from '../config/config';
import { paymentSDK } from '../payment-sdk';
Expand All @@ -12,11 +12,9 @@ export const statusRoutes = async (fastify: FastifyInstance, opts: FastifyPlugin
const handler = statusHandler({
timeout: 3000,
checks: [
healthCheckCoCoPermissions({
healthCheckCommercetoolsPermissions({
requiredPermissions: ['manage_project'],
oauth2Service: paymentSDK.oauth2Service,
clientId: config.clientId,
clientSecret: config.clientSecret,
ctAuthorizationService: paymentSDK.ctAuthorizationService,
projectKey: config.projectKey,
}),
async () => {
Expand Down
Loading

0 comments on commit 595e275

Please sign in to comment.