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

100% Statements 13/13
75% Branches 3/4
100% Functions 1/1
100% Lines 13/13

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              1x                   1x         3x   3x   3x 3x   3x 3x                             2x 2x       3x 2x     1x          
import { APIGatewayEvent } from "aws-lambda";
import { produceMessage } from "libs/api/kafka";
import { baseUserRoleRequestSchema } from "shared-types/events/legacy-user";
import { z } from "zod";
 
import { nonAuthenticatedMiddy } from "../middleware";
 
export const updateUserRolesEventSchema = z
  .object({
    body: z.object({
      updatedRoles: z.array(baseUserRoleRequestSchema),
    }),
  })
  .passthrough();
 
export type UpdateUserRolesEvent = APIGatewayEvent & z.infer<typeof updateUserRolesEventSchema>;
 
export const handler = nonAuthenticatedMiddy({
  opensearch: true,
  kafka: true,
  eventSchema: updateUserRolesEventSchema,
}).handler(async (event: UpdateUserRolesEvent) => {
  const { updatedRoles } = event.body;
 
  let hasError = false;
 
  for (const updatedRole of updatedRoles) {
    console.log("Producing message for:", updatedRole.email, updatedRole.role);
 
    try {
      await produceMessage(
        process.env.topicName || "",
        `${updatedRole.email}_${updatedRole.territory}_${updatedRole.role}`,
        JSON.stringify({
          email: updatedRole.email,
          status: updatedRole.status,
          territory: updatedRole.territory,
          role: updatedRole.role,
          doneByEmail: updatedRole.doneByEmail,
          doneByName: updatedRole.doneByName,
          date: Date.now(),
          eventType: updatedRole.eventType,
        }),
      );
    } catch (err) {
      console.error(err);
      hasError = true;
    }
  }
 
  if (hasError) {
    throw new Error("Error updating user roles");
  }
 
  return {
    statusCode: 200,
    body: { message: "Roles have been updated." },
  };
});