diff --git a/src/data/streams/aware_postgresql/container.R b/src/data/streams/aware_postgresql/container.R index 69ebbf66..30e8e5ac 100644 --- a/src/data/streams/aware_postgresql/container.R +++ b/src/data/streams/aware_postgresql/container.R @@ -109,10 +109,10 @@ pull_data <- function(stream_parameters, device, sensor, sensor_container, colum #' @description #' Gets participants' IDs for specified usernames. #' -#' @param stream_parameters The PHONE_STREAM_PARAMETERS key in config.yaml. If you need specific parameters add them there. +#' @param stream_parameters The PHONE_DATA_STREAMS key in config.yaml. If you need specific parameters add them there. #' @param usernames A vector of usernames #' @param participants_container The name of the database table containing participants data, such as their username. -#' @return A dataframe with the sensor data for device +#' @return A dataframe with participant IDs matching usernames pull_participants_ids <- function(stream_parameters, usernames, participants_container) { dbEngine <- get_db_engine(stream_parameters$DATABASE_GROUP) @@ -133,3 +133,31 @@ pull_participants_ids <- function(stream_parameters, usernames, participants_con return(participant_data) } +#' @description +#' Gets participants' IDs for specified usernames. +#' +#' @param stream_parameters The PHONE_DATA_STREAMS key in config.yaml. If you need specific parameters add them there. +#' @param participants_ids A vector of numeric participant IDs +#' @param device_id_container The name of the database table which will be used to determine distinct device ID. Ideally, a table that reliably contains data, but not too much. +#' @return A dataframe with a row matching each distinct device ID with a participant ID + +pull_participants_device_ids <- function(stream_parameters, participants_ids, device_id_container) { + + query_device_id <- tbl(dbEngine, device_id_container) %>% + filter(participant_id %in% !!participants_ids) %>% + group_by(participant_id) %>% + distinct(device_id, .keep_all = FALSE) + + message(paste0("Executing the following query to get the distinct device IDs: \n", sql_render(query_device_id))) + + device_ids <- query_device_id %>% collect() + + dbDisconnect(dbEngine) + + if(nrow(device_ids) == 0) + warning(paste("We could not find device IDs for requested participant IDs (", participants_ids, ") in ", device_id_container)) + + return(device_ids) +} + +