Skip to content

Assignments and study

Updated 13 Jul 2026jirkamotejl

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 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 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 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.

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.