All files / lib/lambda/user-management createUserProfile.ts

100% Statements 22/22
100% Branches 6/6
100% Functions 1/1
100% Lines 22/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70              1x 6x 1x           5x 5x 1x       4x 4x   1x 1x           3x 3x 3x 3x   3x   3x 2x                   1x           1x         1x 1x             1x  
import { APIGatewayEvent } from "aws-lambda";
import { getAuthDetails, lookupUserAttributes } from "libs/api/auth/user";
import { produceMessage } from "libs/api/kafka";
import { response } from "libs/handler-lib";
 
import { getUserByEmail } from "./userManagementService";
 
export const createUserProfile = async (event: APIGatewayEvent) => {
  if (!event?.requestContext) {
    return response({
      statusCode: 400,
      body: { message: "Request context required" },
    });
  }
 
  const topicName = process.env.topicName as string;
  if (!topicName) {
    throw new Error("Topic name is not defined");
  }
 
  let authDetails;
  try {
    authDetails = getAuthDetails(event);
  } catch (err) {
    console.error(err);
    return response({
      statusCode: 401,
      body: { message: "User not authenticated" },
    });
  }
 
  try {
    const { userId, poolId } = authDetails;
    const userAttributes = await lookupUserAttributes(userId, poolId);
    const userInfo = await getUserByEmail(userAttributes.email);
 
    const id = `${userAttributes.email}_user-information`;
 
    if (!userInfo) {
      await produceMessage(
        topicName,
        id,
        JSON.stringify({
          eventType: "user-info",
          email: userAttributes.email,
          fullName: `${userAttributes.given_name} ${userAttributes.family_name}`,
        }),
      );
 
      return response({
        statusCode: 200,
        body: { message: "User profile created" },
      });
    }
 
    return response({
      statusCode: 200,
      body: { message: `User profile already exists` },
    });
  } catch (err: unknown) {
    console.log("An error occurred: ", err);
    return response({
      statusCode: 500,
      body: { message: "Internal server error" },
    });
  }
};
 
export const handler = createUserProfile;