@@ -76,17 +76,18 @@ def __init__(self, name: str, max_courses: int):
7676 self .max_courses = max_courses
7777
7878 @property
79- def cb (self ) -> list [ Selector ] :
80- return [ Selector (types = [StudentRegistered ], tags = [self .student_id ])]
79+ def cb (self ) -> Selector :
80+ return Selector (types = [StudentRegistered ], tags = [self .student_id ])
8181
8282 def execute (self ) -> None :
83- decision = StudentRegistered (
84- student_id = self .student_id ,
85- name = self .name ,
86- max_courses = self .max_courses ,
87- tags = [self .student_id ],
83+ self .append (
84+ StudentRegistered (
85+ student_id = self .student_id ,
86+ name = self .name ,
87+ max_courses = self .max_courses ,
88+ tags = [self .student_id ],
89+ )
8890 )
89- self .append (decision )
9091
9192
9293class UpdateStudentName (Slice ):
@@ -96,17 +97,16 @@ def __init__(self, student_id: StudentID, name: str) -> None:
9697 self .student_was_registered : bool = False
9798
9899 @property
99- def cb (self ) -> list [ Selector ] :
100- return [ Selector (types = [StudentRegistered , StudentNameUpdated ], tags = [self .id ])]
100+ def cb (self ) -> Selector :
101+ return Selector (types = [StudentRegistered , StudentNameUpdated ], tags = [self .id ])
101102
102103 @event (StudentRegistered )
103104 def _ (self ) -> None :
104105 self .student_was_registered = True
105106
106107 def execute (self ) -> None :
107108 assert self .student_was_registered
108- decision = StudentNameUpdated (tags = [self .id ], name = self .name )
109- self .append (decision )
109+ self .append (StudentNameUpdated (tags = [self .id ], name = self .name ))
110110
111111
112112class UpdateMaxCourses (Slice ):
@@ -116,23 +116,21 @@ def __init__(self, student_id: StudentID, max_courses: int) -> None:
116116 self .max_courses = max_courses
117117
118118 @property
119- def cb (self ) -> list [Selector ]:
120- return [
121- Selector (
122- types = [StudentRegistered , StudentMaxCoursesUpdated ], tags = [self .id ]
123- )
124- ]
119+ def cb (self ) -> Selector :
120+ return Selector (
121+ types = [StudentRegistered , StudentMaxCoursesUpdated ],
122+ tags = [self .id ],
123+ )
125124
126125 @event (StudentRegistered )
127126 def _ (self ) -> None :
128127 self .student_was_registered = True
129128
130129 def execute (self ) -> None :
131130 assert self .student_was_registered
132- decision = StudentMaxCoursesUpdated (
133- tags = [self .id ], max_courses = self .max_courses
131+ self . append (
132+ StudentMaxCoursesUpdated ( tags = [self .id ], max_courses = self .max_courses )
134133 )
135- self .append (decision )
136134
137135
138136class RegisterCourse (Slice ):
@@ -142,17 +140,18 @@ def __init__(self, name: str, places: int):
142140 self .places = places
143141
144142 @property
145- def cb (self ) -> list [ Selector ] :
146- return [ Selector (types = [CourseRegistered ], tags = [self .course_id ])]
143+ def cb (self ) -> Selector :
144+ return Selector (types = [CourseRegistered ], tags = [self .course_id ])
147145
148146 def execute (self ) -> None :
149- decision = CourseRegistered (
150- course_id = self .course_id ,
151- name = self .name ,
152- places = self .places ,
153- tags = [self .course_id ],
147+ self .append (
148+ CourseRegistered (
149+ course_id = self .course_id ,
150+ name = self .name ,
151+ places = self .places ,
152+ tags = [self .course_id ],
153+ )
154154 )
155- self .append (decision )
156155
157156
158157class UpdateCourseName (Slice ):
@@ -162,17 +161,16 @@ def __init__(self, course_id: CourseID, name: str) -> None:
162161 self .course_was_registered : bool = False
163162
164163 @property
165- def cb (self ) -> list [ Selector ] :
166- return [ Selector (types = [CourseRegistered , CourseNameUpdated ], tags = [self .id ])]
164+ def cb (self ) -> Selector :
165+ return Selector (types = [CourseRegistered , CourseNameUpdated ], tags = [self .id ])
167166
168167 @event (CourseRegistered )
169168 def _ (self ) -> None :
170169 self .course_was_registered = True
171170
172171 def execute (self ) -> None :
173172 assert self .course_was_registered
174- decision = CourseNameUpdated (tags = [self .id ], name = self .name )
175- self .append (decision )
173+ self .append (CourseNameUpdated (tags = [self .id ], name = self .name ))
176174
177175
178176class UpdatePlaces (Slice ):
@@ -182,17 +180,16 @@ def __init__(self, course_id: CourseID, places: int) -> None:
182180 self .course_was_registered : bool = False
183181
184182 @property
185- def cb (self ) -> list [ Selector ] :
186- return [ Selector (types = [CourseRegistered , CoursePlacesUpdated ], tags = [self .id ])]
183+ def cb (self ) -> Selector :
184+ return Selector (types = [CourseRegistered , CoursePlacesUpdated ], tags = [self .id ])
187185
188186 @event (CourseRegistered )
189187 def _ (self ) -> None :
190188 self .course_was_registered = True
191189
192190 def execute (self ) -> None :
193191 assert self .course_was_registered
194- decision = CoursePlacesUpdated (tags = [self .id ], places = self .places )
195- self .append (decision )
192+ self .append (CoursePlacesUpdated (tags = [self .id ], places = self .places ))
196193
197194
198195class StudentJoinsCourse (Slice ):
@@ -272,12 +269,13 @@ def execute(self) -> None:
272269 raise TooManyCoursesError
273270 if self .student_id in self .students_on_course :
274271 raise AlreadyJoinedError
275- decision = StudentJoinedCourse (
276- tags = [self .student_id , self .course_id ],
277- student_id = self .student_id ,
278- course_id = self .course_id ,
272+ self .append (
273+ StudentJoinedCourse (
274+ tags = [self .student_id , self .course_id ],
275+ student_id = self .student_id ,
276+ course_id = self .course_id ,
277+ )
279278 )
280- self .append (decision )
281279
282280
283281class StudentLeavesCourse (Slice ):
@@ -291,19 +289,15 @@ def __init__(self, student_id: StudentID, course_id: CourseID) -> None:
291289
292290 @property
293291 def cb (self ) -> list [Selector ]:
294- # return [
295- # Selector(
296- # types=[StudentRegistered, StudentJoinedCourse, StudentLeftCourse],
297- # tags=[self.student_id],
298- # ),
299- # Selector(
300- # types=[CourseRegistered, StudentJoinedCourse, StudentLeftCourse],
301- # tags=[self.course_id],
302- # ),
303- # ]
304292 return [
305- Selector (types = type (self ).projected_types , tags = [tag ])
306- for tag in [self .student_id , self .course_id ]
293+ Selector (
294+ types = [StudentRegistered , StudentJoinedCourse , StudentLeftCourse ],
295+ tags = [self .student_id ],
296+ ),
297+ Selector (
298+ types = [CourseRegistered , StudentJoinedCourse , StudentLeftCourse ],
299+ tags = [self .course_id ],
300+ ),
307301 ]
308302
309303 @event (StudentRegistered )
@@ -335,12 +329,13 @@ def execute(self) -> None:
335329 raise StudentNotFoundError
336330 if self .student_id not in self .students_on_course :
337331 raise NotAlreadyJoinedError
338- decision = StudentLeftCourse (
339- tags = [self .student_id , self .course_id ],
340- student_id = self .student_id ,
341- course_id = self .course_id ,
332+ self .append (
333+ StudentLeftCourse (
334+ tags = [self .student_id , self .course_id ],
335+ student_id = self .student_id ,
336+ course_id = self .course_id ,
337+ )
342338 )
343- self .append (decision )
344339
345340
346341class StudentsIDs (Slice ):
@@ -349,13 +344,17 @@ def __init__(self, course_id: CourseID) -> None:
349344 self .student_ids : list [StudentID ] = []
350345
351346 @property
352- def cb (self ) -> list [ Selector ] :
353- return [ Selector (types = type (self ).projected_types , tags = [self .course_id ])]
347+ def cb (self ) -> Selector :
348+ return Selector (types = type (self ).projected_types , tags = [self .course_id ])
354349
355350 @event (StudentJoinedCourse )
356351 def _ (self , student_id : StudentID ) -> None :
357352 self .student_ids .append (student_id )
358353
354+ @event (StudentLeftCourse )
355+ def _ (self , student_id : StudentID ) -> None :
356+ self .student_ids .remove (student_id )
357+
359358
360359class StudentNames (Slice ):
361360 def __init__ (self , student_ids : list [StudentID ]) -> None :
@@ -366,7 +365,6 @@ def __init__(self, student_ids: list[StudentID]) -> None:
366365 @property
367366 def cb (self ) -> list [Selector ]:
368367 return [
369- # Selector(types=[StudentRegistered, StudentNameUpdated], tags=[student_id])
370368 Selector (types = type (self ).projected_types , tags = [student_id ])
371369 for student_id in self .student_id_names
372370 ]
@@ -392,14 +390,17 @@ def __init__(self, student_id: StudentID) -> None:
392390 self .course_ids : list [CourseID ] = []
393391
394392 @property
395- def cb (self ) -> list [Selector ]:
396- # return [Selector(types=[StudentJoinedCourse], tags=[self.student_id])]
397- return [Selector (types = type (self ).projected_types , tags = [self .student_id ])]
393+ def cb (self ) -> Selector :
394+ return Selector (types = type (self ).projected_types , tags = [self .student_id ])
398395
399396 @event (StudentJoinedCourse )
400397 def _ (self , course_id : CourseID ) -> None :
401398 self .course_ids .append (course_id )
402399
400+ @event (StudentLeftCourse )
401+ def _ (self , course_id : CourseID ) -> None :
402+ self .course_ids .remove (course_id )
403+
403404
404405class CourseNames (Slice ):
405406 def __init__ (self , course_ids : list [CourseID ]) -> None :
@@ -410,7 +411,6 @@ def __init__(self, course_ids: list[CourseID]) -> None:
410411 @property
411412 def cb (self ) -> list [Selector ]:
412413 return [
413- # Selector(types=[CourseRegistered, CourseNameUpdated], tags=[student_id])
414414 Selector (types = type (self ).projected_types , tags = [student_id ])
415415 for student_id in self .course_id_names
416416 ]
@@ -439,8 +439,8 @@ def __init__(self, student_id: StudentID) -> None:
439439 self .course_ids : list [CourseID ] = []
440440
441441 @property
442- def cb (self ) -> list [ Selector ] :
443- return [ Selector (tags = [self .id ])]
442+ def cb (self ) -> Selector :
443+ return Selector (tags = [self .id ])
444444
445445 @event (StudentRegistered )
446446 def _ (self , name : str , max_courses : int ) -> None :
@@ -474,8 +474,8 @@ def __init__(self, course_id: CourseID) -> None:
474474 self .student_ids : list [StudentID ] = []
475475
476476 @property
477- def cb (self ) -> list [ Selector ] :
478- return [ Selector (tags = [self .id ])]
477+ def cb (self ) -> Selector :
478+ return Selector (tags = [self .id ])
479479
480480 @event (CourseRegistered )
481481 def _ (self , name : str , places : int ) -> None :
0 commit comments