ctsit / redcapcustodian

Simplified, automated data management on REDCap systems
Other
12 stars 6 forks source link

Add get_redcap_credentials() #149

Closed pbchase closed 4 months ago

pbchase commented 4 months ago

Formalize this code into an R function

get_redcap_credentials <- function(project_pid = as.numeric(NA),
                                   server_short_name = as.character(NA),
                                   project_short_name = as.character(NA),
                                   project_display_name = as.character(NA),
                                   username = as.character(NA)) {

  # Verify that we have at least one parameter
  if (
    all(is.na(
      c(
        server_short_name,
        username,
        project_pid,
        project_short_name
      )
    ))
  ) {
    stop("You need to define something")
  }

  credentials_conn <- DBI::dbConnect(RSQLite::SQLite(), Sys.getenv("CREDENTIALS_DB"))

  redcap_credentials <- dplyr::tbl(credentials_conn, "credentials") |>
    # Filter on any non-NA parameter
    # Parameters have to be localized so that will not be seen as columns in the data frame
    dplyr::filter(is.na(!!project_pid) | .data$project_id == !!project_pid) |>
    dplyr::filter(is.na(!!server_short_name) | .data$server_short_name == !!server_short_name) |>
    dplyr::filter(is.na(!!project_short_name) | .data$project_short_name == !!project_short_name) |>
    dplyr::filter(is.na(!!username) | .data$username == !!username) |>
    dplyr::collect() |>
    # Make a copy of redcap_uri to make redcapAPI coding a tiny bit simpler
    dplyr::mutate(url = redcap_uri)

  DBI::dbDisconnect(credentials_conn)

  return(redcap_credentials)
}

Here's a calling example

get_redcap_credentials(Sys.getenv("TEST_PROJECT_PID"))

Then destroy these functions: