---
title: "Working with groups"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Working with groups}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)
```

# Introduction

This vignette demonstrates how to retrieve group memberships in a course using the Canvas LMS API.

# Step 1: List courses

```{r setup}
library(vvcanvas)


# Specify the Canvas API authentication details
canvas <- list(
  api_key = "YOUR_API_KEY",
  base_url = "https://your_canvas_instance/"
)

# Retrieve all courses
courses <- get_courses(canvas)

# Select a course (replace the index with the desired course)
course_id <- course$id[1] ## the first course in courses
```

# Step 2: Retrieve all groups in the course

```{r get_groups}
# Retrieve all groups in the selected course
groups <- get_course_groups(canvas, course_id)

# Extract the group IDs
group_ids <- groups$id
```


# Step 3: Retrieve group memberships 


```{r get_members}
# Retrieve group memberships using purrr
memberships <- purrr::map_df(group_ids, ~ {
  group_id <- .x

  # Retrieve the group's memberships
  group_memberships <- get_group_users(canvas, group_id)

  # Extract user names from memberships
  user_names <- group_memberships$name

  # Create a data frame with group memberships
  group_df <- data.frame(
    group_id = rep(group_id, length(user_names)),
    user_name = user_names,
    stringsAsFactors = FALSE
  )

  return(group_df)
})
```
