diff --git a/src/read-models/members/getPotentialOwners.ts b/src/read-models/members/getPotentialOwners.ts index 6d2911f2..05efed30 100644 --- a/src/read-models/members/getPotentialOwners.ts +++ b/src/read-models/members/getPotentialOwners.ts @@ -27,15 +27,14 @@ type AreaOwners = { potential: ReadonlyArray; }; -const pertinentEventTypes: Array = [ - 'MemberNumberLinkedToEmail', - 'MemberDetailsUpdated', - 'AreaCreated', -]; +type Area = { + id: string; + owners: Set; +}; type State = { members: Map; - areas: Map; + areas: Map; }; const emptyState = (): State => ({ @@ -43,6 +42,13 @@ const emptyState = (): State => ({ areas: new Map(), }); +const pertinentEventTypes: Array = [ + 'MemberNumberLinkedToEmail', + 'MemberDetailsUpdated', + 'AreaCreated', + 'OwnerAdded', +]; + const handleEvent = ( state: State, event: SubsetOfDomainEvent @@ -64,7 +70,16 @@ const handleEvent = ( } } if (isEventOfType('AreaCreated')(event)) { - state.areas.set(event.id, {}); + state.areas.set(event.id, {id: event.id, owners: new Set()}); + } + if (isEventOfType('OwnerAdded')(event)) { + const current = state.areas.get(event.areaId); + if (current) { + state.areas.set(event.areaId, { + ...current, + owners: current.owners.add(event.memberNumber), + }); + } } return state; };