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 6 Next »

Questions:

  •  Possibles questions about this feature

Technical Refinement

Description

  • intl-user-service

    • 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

    • 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

    • 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

    • 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