Playset
Purpose
Section titled “Purpose”A Playset captures the configuration shared by every player in a Match: which Expansions were used, which variants or custom rules were active, and which scenario or map was played — for one specific Game.
A Playset is not owned by any single Match. The same Playset can be referenced by any number of Matches that share the same configuration, so a group that always plays with the same expansion and house rules only needs to define it once.
Responsibilities
Section titled “Responsibilities”A Playset is responsible for:
- referencing exactly one Game, fixed for its entire lifetime;
- referencing zero or more of that Game’s Expansions;
- holding active variants/custom rules, and an optional scenario, as free-form labels;
- remaining reusable across any number of Matches;
- allowing its owner to rename it, without affecting its configuration or any Match that references it.
Not Responsible For
Section titled “Not Responsible For”A Playset is NOT responsible for:
- holding per-player configuration (faction, character, starting cards) — that belongs to Loadout, on each MatchParticipant;
- deciding which Match uses it — a Match holds a reference to a Playset, not the other way around;
- changing its own configuration once created — a different configuration requires a new Playset (see Invariants).
Invariants
Section titled “Invariants”- A Playset references exactly one Game, fixed at creation. It can never be changed to a different Game.
- Every Expansion a Playset references must belong to that same Game.
- A Playset’s Expansions, variants/custom rules, and scenario are immutable once created. Only its Name can be changed afterward.
- A Playset is owned by exactly one User (its creator).
- A Playset can be referenced by any number of Matches.
- A Match’s Playset, if any, must belong to the same Game as the Match itself.
- A Playset is never deleted while referenced by any Match.
Lifecycle
Section titled “Lifecycle”Creation
Section titled “Creation”A Playset is created by a User, either ad hoc while recording a Match, or standalone, ahead of time, for later reuse.
Evolution
Section titled “Evolution”Only a Playset’s Name can be changed after creation, by its owner. Its configuration cannot change; a different configuration is always a new Playset. A Match can be updated, via an approved MatchEdit, to reference a different Playset — this changes which Playset the Match points to, never the content of any Playset itself.
End State
Section titled “End State”A Playset is never deleted while referenced by any Match.
Relationships
Section titled “Relationships”- Playset references Game (exactly 1);
- Playset references Expansion (0..N, must belong to the same Game);
- Playset is referenced by Match (0..N);
- Playset is owned by User.
Domain Events
Section titled “Domain Events”- PlaysetCreated
- PlaysetRenamed
Aggregate Design
Section titled “Aggregate Design”Playset is its own Aggregate Root, not a child entity of Match — precisely because it must be shareable across many Matches, which a child entity cannot be. A Match holds a reference (an identifier) to a Playset; it does not own it.