Groups
Community repair group management and membership
36 stories across 6 personas | Coverage: 36/36 (100%)
Overview
Groups
Repair groups are the organisational unit of Restarters. Each group represents a local community of repair volunteers who come together to run events. Groups have a name, location, description, and can belong to one or more networks.
What Hosts can do
Hosts manage their group's details, settings, and membership. They edit group information, upload images, send email invitations to join, manage volunteer roles (promoting members to Host or demoting them), and remove volunteers. Hosts can also update their group via the API.
What NetworkCoordinators can do
NetworkCoordinators oversee groups within their networks. They can list all groups in their networks, view groups pending moderation, approve groups, and manage group-network associations. They can also remove volunteers and change roles for groups in their network.
What Admins can do
Admins can view all groups pending moderation across the platform, delete groups (only if they have no device records), and list group audit changes for Zapier integration.
What Restarters can do
Restarters can browse all groups, view groups they belong to, discover nearby groups, browse groups within a network, and join or leave groups. Creating a new group automatically promotes a Restarter to Host. Restarters can also accept group invitations and list groups via the API.
What Guests can do
Guests can view group details, repair statistics, volunteer lists, events, and tags via the public API. They can also join groups using shareable invite codes.
What ThirdParties can do
External organisations can retrieve group names, tags, details, events, and volunteer data via the public API to display on their own platforms.
Admin & integrations
| Persona | Story | Method | Tests |
|---|---|---|---|
| Admin | As an Admin, I can list group audit changes for Zapier integration | GroupController::getGroupChanges | ✅ Covered |
| Admin | As an Admin, I can list group membership changes for Zapier integration | UserGroupsController::changes | ✅ Covered |
Create & manage groups
| Persona | Story | Method | Tests |
|---|---|---|---|
| Admin | As an Admin, I can delete a group that has no device records | GroupController::delete | ✅ Covered |
| Admin | As an Admin, I can view all groups pending moderation | GroupController::moderateGroupsv2 | ✅ Covered |
| Host | As a Host, I can edit my group's details and settings | GroupController::edit | ✅ Covered |
| Host | As a Host, I can update my group via the API | GroupController::updateGroupv2 | ✅ Covered |
| NetworkCoordinator | As a NetworkCoordinator, I can view groups pending moderation in my networks | GroupController::moderateGroupsv2 | ✅ Covered |
| Restarter | As a Restarter, I can create a new repair group and become its Host | GroupController::create | ✅ Covered |
| Restarter | As a Restarter, I can create a new group via the API | GroupController::createGroupv2 | ✅ Covered |
Events for group
| Persona | Story | Method | Tests |
|---|---|---|---|
| Guest | As a Guest, I can list events for a group via the API | GroupController::getEventsForGroupv2 | ✅ Covered |
| ThirdParty | As a ThirdParty, I can retrieve events for a group to display on my platform | GroupController::getEventsForGroupv2 | ✅ Covered |
Find & browse groups
| Persona | Story | Method | Tests |
|---|---|---|---|
| Guest | As a Guest, I can view group details via the API | GroupController::getGroupv2 | ✅ Covered |
| Guest | As a Guest, I can get a list of group names via the API | GroupController::listNamesv2 | ✅ Covered |
| Guest | As a Guest, I can get a list of group tags via the API | GroupController::listTagsv2 | ✅ Covered |
| Restarter | As a Restarter, I can browse all repair groups on the platform | GroupController::all | ✅ Covered |
| Restarter | As a Restarter, I can list all groups via the API | GroupController::getGroupList | ✅ Covered |
| Restarter | As a Restarter, I can view the groups I belong to | GroupController::mine | ✅ Covered |
| Restarter | As a Restarter, I can discover repair groups near my location | GroupController::nearby | ✅ Covered |
| Restarter | As a Restarter, I can browse groups within a specific network | GroupController::network | ✅ Covered |
| Restarter | As a Restarter, I can view a group's details, events, and members | GroupController::view | ✅ Covered |
| ThirdParty | As a ThirdParty, I can retrieve group details to display on my platform | GroupController::getGroupv2 | ✅ Covered |
| ThirdParty | As a ThirdParty, I can retrieve group names to display on my own platform | GroupController::listNamesv2 | ✅ Covered |
| ThirdParty | As a ThirdParty, I can retrieve group tags to categorise groups on my platform | GroupController::listTagsv2 | ✅ Covered |
Group invitations
| Persona | Story | Method | Tests |
|---|---|---|---|
| Guest | As a Guest, I can join a group using a shareable invite code | GroupController::confirmCodeInvite | ✅ Covered |
| Host | As a Host, I can send email invitations to join my group | GroupController::postSendInvite | ✅ Covered |
| Restarter | As a Restarter, I can accept a group invitation | GroupController::confirmInvite | ✅ Covered |
Manage volunteers
| Persona | Story | Method | Tests |
|---|---|---|---|
| Guest | As a Guest, I can view a group's volunteers via the API | GroupController::getVolunteersForGroupv2 | ✅ Covered |
| Host | As a Host, I can remove a volunteer from my group | GroupController::deleteVolunteerForGroupv2 | ✅ Covered |
| Host | As a Host, I can change a volunteer's role in my group | GroupController::patchVolunteerForGroupv2 | ✅ Covered |
| Restarter | As a Restarter, I can join a repair group | GroupController::getJoinGroup | ✅ Covered |
| Restarter | As a Restarter, I can leave a group I belong to | UserGroupsController::leave | ✅ Covered |
| ThirdParty | As a ThirdParty, I can retrieve volunteer data for a group via the API | GroupController::getVolunteersForGroupv2 | ✅ Covered |
Network membership
| Persona | Story | Method | Tests |
|---|---|---|---|
| NetworkCoordinator | As a NetworkCoordinator, I can list all groups in my networks via the API | GroupController::getGroupsByUsersNetworks | ✅ Covered |
Photos & branding
| Persona | Story | Method | Tests |
|---|---|---|---|
| Host | As a Host, I can remove my group's image | GroupController::ajaxDeleteImage | ✅ Covered |
| Host | As a Host, I can upload an image for my group | GroupController::imageUpload | ✅ Covered |
Stats & data
| Persona | Story | Method | Tests |
|---|---|---|---|
| Guest | As a Guest, I can view a group's repair impact statistics | GroupController::stats | ✅ Covered |