MyCCE User/Entity Relationship Design
The Problem
How do we let users select a group of users to assign/relate an entity to? How do we record the selection of users as well as the mechanism for grouping to apply changes? There are several cases (notifications, content assignments, tag assignments) where an entity is related to a group of users, and the user who selects that group selects them based on location and role (supervisors in Tompkins county). The entity must then hold a relationship with those users, but also any future users of the group (supervisors in Tompkins county).
Requirements
- Notifications, Content, ContentAssignments, and TagAssignments are all related to a certain set of users.
- Each set of users is both a concrete list of users, and an abstract grouping of users (ex: supervisors in Tompkins).
- We need to constantly ensure that the concrete lists reflect the abstract groupings (a new supervisor in Tompkins should be added to all the concrete lists generated by the supervsiors in tompkins abstract grouping)
Notifications
- Notifications are time sensitive, so the only ones that should get added for a new user are active tasks
Content and Tag Assignments
- Users can remove themselves from content assignments, so the abstract grouping does not necessarily reflect the proper concrete list
Primary Questions
These questions need to be answered first and foremost
Is this all too complicated?
This is certainly complicated behind the scenes. Of course, that isn’t inherently a problem. But is it complicated for users? In some cases, no, some of this is expected behavior. If you want something to appear for supervisors in Tompkins, you don’t mean those who are currently supervisors in Tompkins. In that case it is absolutely necessary.
But I still feel like there are cases where it is confusing. The possible confusion lies in users not seeing changes in the content they see on their dashboard and sitewide. A user will get to know what content is where. If their location/role changes, and the content changes, that could be confusing. I guess in a perfect world, the change means that their position is different, which changes what content is relevant to them. That’s different and potentially confusing at first, but it’s intentional. That’s the whole point - MyCCE. Presenting staff with content that is relevant to them. Keeping this manageably by filtering out what isn’t relevant.
How do we maintain data consistency?
which hooks?
how do you keep it clean?
Content
Do we need a second table?
- ContentAssignments and ContentUserAssignments?
- ContentAssignments with a onDashboard bool?
- Maybe we keep assignments table for dashboard, and don’t use an assignments table for the regular content relationship since users can’t remove content from their view of mycce?
- maybe they should be able to?
Does doctrine allow for multiple levels of inheritance (for Content)?
Notifications
Hooks
Which actions change the concrete user lists?
Secondary Questions
Answer after Primary
What does the assignment creation process look like?
- new assignment (tag, tompkins, supervisors)
- add tagAssignments for the users that match
- how do we make this generic?