Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Questions:

  •  Possibles questions about this feature

Technical Refinement

Description

  • intl-user-service

    • TASK 1

      • We will add the new attribute on class UserDetailsBaseDto:

        • path: intl-user-service/src/users/dtos/users.dtos.ts

          @ApiProperty({
              required: false,
              description: 'Required acceptance agreement info',
              type: [RequiredAcceptanceAgreementInfoDto],
              nullable: true,
            })
            @Type(() => RequiredAcceptanceAgreementInfoDto)
            @IsArray()
            @IsOptional()
            public requiredAcceptanceAgreementInfo?: RequiredAcceptanceAgreementInfoDto[] | null;
        • On class UserDetailsDto on constructor, we will add a mapper:

          const requiredAcceptanceAgreementInfo = userDetails.requiredAcceptanceAgreementInfo?.map(
            (ra: IRequiredAcceptanceAgreementInfo) => ra as RequiredAcceptanceAgreementInfoDto,
          );
          this.requiredAcceptanceAgreementInfo = requiredAcceptanceAgreementInfo;
  • intl-packages | ctg-packages

    • TASK 2

      • We will add the attribute requiredAcceptanceAgreementInfo on TUserDetails:

        • path: intl-packages/packages/users/src/schemata.ts

          requiredAcceptanceAgreementInfo: t.union([t.array(TRequiredAcceptanceAgreementInfo), t.null]),
          export const TRequiredAcceptanceAgreementInfo = t.interface({
            id: t.string,
            updatedAt: t.string,
          });
  • intl-whitelabel-graphql

    • TASK 3

      • We will add the attribute requiredAcceptanceAgreementInfo on UpdateUserDetailsInput

        • path: intl-whitelabel-graphql/src/functions/graphql/schemas/users.gql

          input UpdateUserDetailsInput {
            ...
            requiredAcceptanceAgreementInfo: [RequiredAcceptanceAgreementInfoInput]
          }
      • We will run the command:

        yarn run graphql:types
        • After that, will be created an automatic code on file: intl-whitelabel-graphql/src/functions/graphql/generated/graphql.ts, probably, will be many changes, but we can to discard all, except of change related about requiredAcceptanceAgreementInfo

  • intl-whitelabel-app

    • TASK 4

      • We will create an update method to requiredAcceptanceAgreementInfo

        • path:intl-whitelabel-app/workspaces/frontend/src/state/auth/hooks/use-current-user.ts

          const updateRequiredAcceptanceAgreementInfo = useCallback(
              async (sanityAcceptance: Array<IStaticPageRoute>) => {
                try {
                  if (!user.details?.requiredAcceptanceAgreementInfo?.length) {
                    user.details.requiredAcceptanceAgreementInfo = [];
                  }
          
                  const newAcceptanceAgreementInfo = sanityAcceptance.map(sp => {
                    return user.details.requiredAcceptanceAgreementInfo.filter((userAcceptance: any) => {
                      if (userAcceptance.id === sp._id) {
                        userAcceptance.updatedAt = sp._updatedAt;
                        return userAcceptance;
                      }
                      return {
                        id: sp._id,
                        updatedAt: sp._updatedAt,
                      };
                    });
                  });
          
                  const input = {
                    ...user,
                    details: {
                      ...user.details,
                      requiredAcceptanceAgreementInfo: newAcceptanceAgreementInfo,
                    },
                  };
          
                  const { data } = await updateMeMutation({ variables: { input } });
                  if (!data) {
                    logger.error({ message: 'An error occurred updating acceptance agreement' });
                    toast.error(formatMessage({ id: 'updateInfoError' }));
                  }
                } catch (error) {
                  logger.error({ message: `An error occurred updating acceptance agreement: ${error}` });
                  toast.error(formatMessage({ id: 'updateInfoError' }));
                }
              },
              [formatMessage, logger, updateMeMutation, user]
            );
        • And we will export this method from hook

          return {
              ...
              updateRequiredAcceptanceAgreementInfo,
            };

Screenshots

  • TODO

POC

  • TODO

Impact Analysis

  • Signup

  • Authentication

Unit Test

  • Signup

  • Authentication

MOCKS

  • TODO

Workflows: Lucidchart document | Lucidchart

Existent behavior: Terms and Conditions - Technical Refinement - Discovery As-Is

  • No labels