Assignments and study
Content assignment is intent. Study is the user’s effective state. These two things must not be confused.
flowchart LR CICS[ContentInCompanySpace] --> AC[AssignedContent] Group[UserGroup] --> AC UICS[UserInCompanySpace] --> AC AC --> Source[ParticipationSource] Source --> CP[ContentParticipation] CP --> Steps[StepParticipation] CP --> Attempts[TestAttempt] CP --> Certificate[Certificate]
AssignedContent
Section titled “AssignedContent”AssignedContent can target either a group or a concrete user. Validation
requires exactly one of these paths. Assignment state is:
not_assigned,assigning_in_progress,assigned.
It can carry deadline, repetition, and additional rules that are reflected into participations through ContentAssigner.
ParticipationSource
Section titled “ParticipationSource”ParticipationSource answers the question “why does this study record exist?”
One ContentParticipation can have multiple sources because a user can receive
the same content through several groups or through a combination of direct and
group assignments.
ContentParticipation
Section titled “ContentParticipation”ContentParticipation is a concrete study record for a user and content
version. States are:
assigned,in_progress,completed.
It contains current lesson, current step, completion percentage, estimated time remaining, test attempts, and certificate.
Practical consequence
Section titled “Practical consequence”A controller or API endpoint should not “just create a participation”. It should create or change domain intent and let the reconciliation layer decide which effective state should exist.