usdigitalresponse / cpf-reporter

CPF Reporter application maintained by the USDR Grants program.
Apache License 2.0
0 stars 3 forks source link

[Issue] User Management: Delete Passage identity on user deactivation #107

Open TylerHendrickson opened 4 months ago

TylerHendrickson commented 4 months ago

Subtask of user story: User Management https://github.com/usdigitalresponse/cpf-reporter/issues/81

DOD: When an update to an existing user sets isActive=false, the user's Passage identity is deleted.

Blocked by issues:

Blocks these issues: (none)

Implementation Details:

Relevant Code Snippets

api/src/services/users/users.ts
import { createPassageUser, deletePassageUser } from 'src/lib/auth'

export const updateUser: MutationResolvers['updateUser'] = ({ id, input }) => {
  const user = db.user.findUnique({
    where: { id },
  })

  if (process.env.AUTH_PROVIDER == 'passage') {
    try {
      if (input.isActive && !user.passageId) {
        // user not in passage and is marked as active
        await createPassageUser(user.email)
      } else {
        await deletePassageUser(input.passageId)
        input.passageId = null
      }
    } catch (e) {
      // send to datadog and log the error
      // ensure user update fails for the front-end
      raise
    }
    // verify if this needs to be empty string or null
  }
  return db.user.update({
    data: input,
    where: { id },
  })
}

export const deleteUser: MutationResolvers['deleteUser'] = ({ id }) => {
  const user = db.user.findUnique({ where: { id } })
  if (process.env.AUTH_PROVIDER == 'passage') {
    try {
      await deletePassageUser(user.passageId)
    } catch (e) {
      // send to datadog and log the error
      // ensure user update fails for the front-end
      raise
    }
  }
  return db.user.delete({
    where: { id },
  })
}
as1729 commented 4 months ago

Lower priority compared to registering a passage identity.