learningequality / learningequality/studio
Channel-Org Migration UI
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 191
- Forks
- 307
- Avg merge
- 5d 6h
- Merged PRs (30d)
- 10
Description
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
Complexity: Medium
Target branch: unstable
The goal of this issue is to establish a way to migrate channels to organizations through studio's UI.
Context
This issue has two sections that need implementation:
- Regular users need to be able to add channels to organizations via the channel edit page.
- When a user selects an organization from a dropdown, the API will check if this creates a contested migration.
- If the API finds that this migration is contested, the user cannot save the organization to the channel right away.
- The user is then offered to create a contested migration request, which will be fulfilled by the web administrators.
- If a contested migration is created, then the channel is blocked from further organization changes until the previous migration is resolved (either accepted by the web administrators, or declined by the admins/original requestor)
- If the API finds that this migration is not contested, the user can save the organization to the channel right away.
- In case of an emergency (channel with no editors, for example), Website administrators need the ability to change a channel's organization property directly.
- Website administrators need the ability to handle contested migrations via the administration page.
- Admins should be able to see the channel, the organization and the original requestor for all contested migrations.
- Admins should be able to decline, or accept the contested migration.
The above will require changes to both the frontend, and the backend.
How to Get There
Frontend
- Figma designs here
Backend
- To check for a potential contested migration, the Channel viewset will offer a route that checks if a channel is considered uncontested based on these conditions:
- The requesting user is a website administrator
- OR
- The channel's existing editors are ALL editors or admins of the given organization
- Channel viewset can only directly update the organization property if and only if:
- The given organization migration is not contested (see above conditions)
- No contested migration exists for the given channel
- A contested migration does not involve any new models/viewsets - it is simply an invitation object with both channel + organization set as targets.
- Only web admins, or channel editors (that are also editors or admins in the target organization) may create contested migrations.
- Only web administrators may approve contested migrations.
- Original requestor can still decline the migration.
- If a migration is approved, then the invitation updates the channel's organization property with the target organization.
Acceptance Criteria
Frontend
- Implement given Figma designs
Backend
- Implement the required backend routes to fulfill Figma designs
Accessibility and i18n
- All accessibility / i18n processes are respected
Frameworks
- Kolibri Design is used across new pages
- Do not use Vuex on any part of the implementation (and if required, consult team)
- Do not use Vuetify, use the Kolibri Design System or equivalent custom components
Testing
- Add unit tests for new backend functionality
- Add frontend tests for new frontend functionality
AI usage
No AI was used in the writing and designing of this issue.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review the linked Figma designs, then trace the channel edit page, Channel viewset, and administration page requirements. Confirm the migration, approval, decline, and emergency-admin flows, along with frontend and backend tests. Done means the designs and required routes work, accessibility and i18n are respected, and the listed framework constraints are met.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- full-stack
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 20/100