File size: 51,765 Bytes
da43f5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
 -->
<!-- Title: %3 Pages: 1 -->
<svg width="1786pt" height="1820pt"
 viewBox="0.00 0.00 1786.00 1820.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(36 1784)">
<title>%3</title>
<polygon fill="white" stroke="transparent" points="-36,36 -36,-1784 1750,-1784 1750,36 -36,36"/>
<!-- Student -->
<g id="node1" class="node">
<title>Student</title>
<path fill="#e8e8e8" stroke="transparent" d="M1081.5,-1514C1081.5,-1514 1319.5,-1514 1319.5,-1514 1325.5,-1514 1331.5,-1520 1331.5,-1526 1331.5,-1526 1331.5,-1732 1331.5,-1732 1331.5,-1738 1325.5,-1744 1319.5,-1744 1319.5,-1744 1081.5,-1744 1081.5,-1744 1075.5,-1744 1069.5,-1738 1069.5,-1732 1069.5,-1732 1069.5,-1526 1069.5,-1526 1069.5,-1520 1075.5,-1514 1081.5,-1514"/>
<polygon fill="#bebebe" stroke="transparent" points="1070.5,-1721 1070.5,-1743 1330.5,-1743 1330.5,-1721 1070.5,-1721"/>
<text text-anchor="start" x="1179.5" y="-1730.2" font-family="Arial" font-weight="bold" font-size="11.00">Student</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1711 1070.5,-1721 1330.5,-1721 1330.5,-1711 1070.5,-1711"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1689 1070.5,-1711 1330.5,-1711 1330.5,-1689 1070.5,-1689"/>
<text text-anchor="start" x="1075.5" y="-1697.2" font-family="Arial" font-size="11.00">&#45; studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1667 1070.5,-1689 1330.5,-1689 1330.5,-1667 1070.5,-1667"/>
<text text-anchor="start" x="1075.5" y="-1675.2" font-family="Arial" font-size="11.00">+ username : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1645 1070.5,-1667 1330.5,-1667 1330.5,-1645 1070.5,-1645"/>
<text text-anchor="start" x="1075.5" y="-1653.2" font-family="Arial" font-size="11.00">+ email : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1623 1070.5,-1645 1330.5,-1645 1330.5,-1623 1070.5,-1623"/>
<text text-anchor="start" x="1075.5" y="-1631.2" font-family="Arial" font-size="11.00">+ enrollmentDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1601 1070.5,-1623 1330.5,-1623 1330.5,-1601 1070.5,-1601"/>
<text text-anchor="start" x="1075.5" y="-1609.2" font-family="Arial" font-size="11.00">+ currentLevel : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1591 1070.5,-1601 1330.5,-1601 1330.5,-1591 1070.5,-1591"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1581 1070.5,-1591 1330.5,-1591 1330.5,-1581 1070.5,-1581"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1559 1070.5,-1581 1330.5,-1581 1330.5,-1559 1070.5,-1559"/>
<text text-anchor="start" x="1075.5" y="-1567.2" font-family="Arial" font-size="11.00">+ Student(username: String, email: String) : Student</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1537 1070.5,-1559 1330.5,-1559 1330.5,-1537 1070.5,-1537"/>
<text text-anchor="start" x="1075.5" y="-1545.2" font-family="Arial" font-size="11.00">+ enrollCourse(courseId: String) : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1070.5,-1515 1070.5,-1537 1330.5,-1537 1330.5,-1515 1070.5,-1515"/>
<text text-anchor="start" x="1075.5" y="-1523.2" font-family="Arial" font-size="11.00">+ updateProgress(lessonId: String) : void</text>
<polygon fill="black" stroke="black" points="1069.5,-1721 1069.5,-1721 1331.5,-1721 1331.5,-1721 1069.5,-1721"/>
<polygon fill="black" stroke="black" points="1069.5,-1591 1069.5,-1591 1331.5,-1591 1331.5,-1591 1069.5,-1591"/>
<path fill="none" stroke="black" d="M1081.5,-1514C1081.5,-1514 1319.5,-1514 1319.5,-1514 1325.5,-1514 1331.5,-1520 1331.5,-1526 1331.5,-1526 1331.5,-1732 1331.5,-1732 1331.5,-1738 1325.5,-1744 1319.5,-1744 1319.5,-1744 1081.5,-1744 1081.5,-1744 1075.5,-1744 1069.5,-1738 1069.5,-1732 1069.5,-1732 1069.5,-1526 1069.5,-1526 1069.5,-1520 1075.5,-1514 1081.5,-1514"/>
</g>
<!-- CourseEnrollment -->
<g id="node2" class="node">
<title>CourseEnrollment</title>
<path fill="#e8e8e8" stroke="transparent" d="M268,-1212C268,-1212 617,-1212 617,-1212 623,-1212 629,-1218 629,-1224 629,-1224 629,-1408 629,-1408 629,-1414 623,-1420 617,-1420 617,-1420 268,-1420 268,-1420 262,-1420 256,-1414 256,-1408 256,-1408 256,-1224 256,-1224 256,-1218 262,-1212 268,-1212"/>
<polygon fill="#bebebe" stroke="transparent" points="257.5,-1397 257.5,-1419 628.5,-1419 628.5,-1397 257.5,-1397"/>
<text text-anchor="start" x="394.5" y="-1406.2" font-family="Arial" font-weight="bold" font-size="11.00">CourseEnrollment</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1387 257.5,-1397 628.5,-1397 628.5,-1387 257.5,-1387"/>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1365 257.5,-1387 628.5,-1387 628.5,-1365 257.5,-1365"/>
<text text-anchor="start" x="262.5" y="-1373.2" font-family="Arial" font-size="11.00">&#45; enrollmentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1343 257.5,-1365 628.5,-1365 628.5,-1343 257.5,-1343"/>
<text text-anchor="start" x="262.5" y="-1351.2" font-family="Arial" font-size="11.00">+ studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1321 257.5,-1343 628.5,-1343 628.5,-1321 257.5,-1321"/>
<text text-anchor="start" x="262.5" y="-1329.2" font-family="Arial" font-size="11.00">+ courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1299 257.5,-1321 628.5,-1321 628.5,-1299 257.5,-1299"/>
<text text-anchor="start" x="262.5" y="-1307.2" font-family="Arial" font-size="11.00">+ enrollmentDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1277 257.5,-1299 628.5,-1299 628.5,-1277 257.5,-1277"/>
<text text-anchor="start" x="262.5" y="-1285.2" font-family="Arial" font-size="11.00">+ progress : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1267 257.5,-1277 628.5,-1277 628.5,-1267 257.5,-1267"/>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1257 257.5,-1267 628.5,-1267 628.5,-1257 257.5,-1257"/>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1235 257.5,-1257 628.5,-1257 628.5,-1235 257.5,-1235"/>
<text text-anchor="start" x="262.5" y="-1243.2" font-family="Arial" font-size="11.00">+ CourseEnrollment(studentId: String, courseId: String) : CourseEnrollment</text>
<polygon fill="#e8e8e8" stroke="transparent" points="257.5,-1213 257.5,-1235 628.5,-1235 628.5,-1213 257.5,-1213"/>
<text text-anchor="start" x="262.5" y="-1221.2" font-family="Arial" font-size="11.00">+ calculateProgress() : double</text>
<polygon fill="black" stroke="black" points="256.5,-1397 256.5,-1397 629.5,-1397 629.5,-1397 256.5,-1397"/>
<polygon fill="black" stroke="black" points="256.5,-1267 256.5,-1267 629.5,-1267 629.5,-1267 256.5,-1267"/>
<path fill="none" stroke="black" d="M268,-1212C268,-1212 617,-1212 617,-1212 623,-1212 629,-1218 629,-1224 629,-1224 629,-1408 629,-1408 629,-1414 623,-1420 617,-1420 617,-1420 268,-1420 268,-1420 262,-1420 256,-1414 256,-1408 256,-1408 256,-1224 256,-1224 256,-1218 262,-1212 268,-1212"/>
</g>
<!-- Student&#45;&gt;CourseEnrollment -->
<g id="edge1" class="edge">
<title>Student&#45;&gt;CourseEnrollment</title>
<path fill="none" stroke="#4a4a4a" d="M1061.47,-1589C842.64,-1589 442.5,-1589 442.5,-1589 442.5,-1589 442.5,-1434.29 442.5,-1434.29"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="446,-1434.29 442.5,-1424.29 439,-1434.29 446,-1434.29"/>
<text text-anchor="middle" x="440.5" y="-1427.09" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1058.47" y="-1591.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- WatchProgress -->
<g id="node7" class="node">
<title>WatchProgress</title>
<path fill="#e8e8e8" stroke="transparent" d="M1168.5,-15C1168.5,-15 1484.5,-15 1484.5,-15 1490.5,-15 1496.5,-21 1496.5,-27 1496.5,-27 1496.5,-189 1496.5,-189 1496.5,-195 1490.5,-201 1484.5,-201 1484.5,-201 1168.5,-201 1168.5,-201 1162.5,-201 1156.5,-195 1156.5,-189 1156.5,-189 1156.5,-27 1156.5,-27 1156.5,-21 1162.5,-15 1168.5,-15"/>
<polygon fill="#bebebe" stroke="transparent" points="1157.5,-178 1157.5,-200 1495.5,-200 1495.5,-178 1157.5,-178"/>
<text text-anchor="start" x="1286" y="-187.2" font-family="Arial" font-weight="bold" font-size="11.00">WatchProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-168 1157.5,-178 1495.5,-178 1495.5,-168 1157.5,-168"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-146 1157.5,-168 1495.5,-168 1495.5,-146 1157.5,-146"/>
<text text-anchor="start" x="1162.5" y="-154.2" font-family="Arial" font-size="11.00">&#45; progressId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-124 1157.5,-146 1495.5,-146 1495.5,-124 1157.5,-124"/>
<text text-anchor="start" x="1162.5" y="-132.2" font-family="Arial" font-size="11.00">+ studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-102 1157.5,-124 1495.5,-124 1495.5,-102 1157.5,-102"/>
<text text-anchor="start" x="1162.5" y="-110.2" font-family="Arial" font-size="11.00">+ videoId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-80 1157.5,-102 1495.5,-102 1495.5,-80 1157.5,-80"/>
<text text-anchor="start" x="1162.5" y="-88.2" font-family="Arial" font-size="11.00">+ watchedMinutes : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-70 1157.5,-80 1495.5,-80 1495.5,-70 1157.5,-70"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-60 1157.5,-70 1495.5,-70 1495.5,-60 1157.5,-60"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-38 1157.5,-60 1495.5,-60 1495.5,-38 1157.5,-38"/>
<text text-anchor="start" x="1162.5" y="-46.2" font-family="Arial" font-size="11.00">+ WatchProgress(studentId: String, videoId: String) : WatchProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1157.5,-16 1157.5,-38 1495.5,-38 1495.5,-16 1157.5,-16"/>
<text text-anchor="start" x="1162.5" y="-24.2" font-family="Arial" font-size="11.00">+ updateProgress(minutes: int) : void</text>
<polygon fill="black" stroke="black" points="1156.5,-178 1156.5,-178 1496.5,-178 1496.5,-178 1156.5,-178"/>
<polygon fill="black" stroke="black" points="1156.5,-70 1156.5,-70 1496.5,-70 1496.5,-70 1156.5,-70"/>
<path fill="none" stroke="black" d="M1168.5,-15C1168.5,-15 1484.5,-15 1484.5,-15 1490.5,-15 1496.5,-21 1496.5,-27 1496.5,-27 1496.5,-189 1496.5,-189 1496.5,-195 1490.5,-201 1484.5,-201 1484.5,-201 1168.5,-201 1168.5,-201 1162.5,-201 1156.5,-195 1156.5,-189 1156.5,-189 1156.5,-27 1156.5,-27 1156.5,-21 1162.5,-15 1168.5,-15"/>
</g>
<!-- Student&#45;&gt;WatchProgress -->
<g id="edge6" class="edge">
<title>Student&#45;&gt;WatchProgress</title>
<path fill="none" stroke="#4a4a4a" d="M1339.67,-1589C1366.27,-1589 1386,-1589 1386,-1589 1386,-1589 1386,-215.17 1386,-215.17"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1389.5,-215.17 1386,-205.17 1382.5,-215.17 1389.5,-215.17"/>
<text text-anchor="middle" x="1384" y="-207.97" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1342.67" y="-1591.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- QuizAttempt -->
<g id="node10" class="node">
<title>QuizAttempt</title>
<path fill="#e8e8e8" stroke="transparent" d="M20,-4C20,-4 301,-4 301,-4 307,-4 313,-10 313,-16 313,-16 313,-200 313,-200 313,-206 307,-212 301,-212 301,-212 20,-212 20,-212 14,-212 8,-206 8,-200 8,-200 8,-16 8,-16 8,-10 14,-4 20,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="9.5,-189 9.5,-211 312.5,-211 312.5,-189 9.5,-189"/>
<text text-anchor="start" x="128" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">QuizAttempt</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-179 9.5,-189 312.5,-189 312.5,-179 9.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-157 9.5,-179 312.5,-179 312.5,-157 9.5,-157"/>
<text text-anchor="start" x="14.5" y="-165.2" font-family="Arial" font-size="11.00">&#45; attemptId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-135 9.5,-157 312.5,-157 312.5,-135 9.5,-135"/>
<text text-anchor="start" x="14.5" y="-143.2" font-family="Arial" font-size="11.00">+ studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-113 9.5,-135 312.5,-135 312.5,-113 9.5,-113"/>
<text text-anchor="start" x="14.5" y="-121.2" font-family="Arial" font-size="11.00">+ quizId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-91 9.5,-113 312.5,-113 312.5,-91 9.5,-91"/>
<text text-anchor="start" x="14.5" y="-99.2" font-family="Arial" font-size="11.00">+ score : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-69 9.5,-91 312.5,-91 312.5,-69 9.5,-69"/>
<text text-anchor="start" x="14.5" y="-77.2" font-family="Arial" font-size="11.00">+ attemptDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-59 9.5,-69 312.5,-69 312.5,-59 9.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-49 9.5,-59 312.5,-59 312.5,-49 9.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-27 9.5,-49 312.5,-49 312.5,-27 9.5,-27"/>
<text text-anchor="start" x="14.5" y="-35.2" font-family="Arial" font-size="11.00">+ QuizAttempt(studentId: String, quizId: String) : QuizAttempt</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-5 9.5,-27 312.5,-27 312.5,-5 9.5,-5"/>
<text text-anchor="start" x="14.5" y="-13.2" font-family="Arial" font-size="11.00">+ submitAnswer(questionId: String, answer: String) : void</text>
<polygon fill="black" stroke="black" points="8.5,-189 8.5,-189 313.5,-189 313.5,-189 8.5,-189"/>
<polygon fill="black" stroke="black" points="8.5,-59 8.5,-59 313.5,-59 313.5,-59 8.5,-59"/>
<path fill="none" stroke="black" d="M20,-4C20,-4 301,-4 301,-4 307,-4 313,-10 313,-16 313,-16 313,-200 313,-200 313,-206 307,-212 301,-212 301,-212 20,-212 20,-212 14,-212 8,-206 8,-200 8,-200 8,-16 8,-16 8,-10 14,-4 20,-4"/>
</g>
<!-- Student&#45;&gt;QuizAttempt -->
<g id="edge10" class="edge">
<title>Student&#45;&gt;QuizAttempt</title>
<path fill="none" stroke="#4a4a4a" d="M1061.42,-1668C770.41,-1668 124,-1668 124,-1668 124,-1668 124,-226.15 124,-226.15"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="127.5,-226.15 124,-216.15 120.5,-226.15 127.5,-226.15"/>
<text text-anchor="middle" x="122" y="-218.95" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1058.42" y="-1670.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Certificate -->
<g id="node13" class="node">
<title>Certificate</title>
<path fill="#e8e8e8" stroke="transparent" d="M1064,-1212C1064,-1212 1337,-1212 1337,-1212 1343,-1212 1349,-1218 1349,-1224 1349,-1224 1349,-1408 1349,-1408 1349,-1414 1343,-1420 1337,-1420 1337,-1420 1064,-1420 1064,-1420 1058,-1420 1052,-1414 1052,-1408 1052,-1408 1052,-1224 1052,-1224 1052,-1218 1058,-1212 1064,-1212"/>
<polygon fill="#bebebe" stroke="transparent" points="1053.5,-1397 1053.5,-1419 1348.5,-1419 1348.5,-1397 1053.5,-1397"/>
<text text-anchor="start" x="1173.5" y="-1406.2" font-family="Arial" font-weight="bold" font-size="11.00">Certificate</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1387 1053.5,-1397 1348.5,-1397 1348.5,-1387 1053.5,-1387"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1365 1053.5,-1387 1348.5,-1387 1348.5,-1365 1053.5,-1365"/>
<text text-anchor="start" x="1058.5" y="-1373.2" font-family="Arial" font-size="11.00">&#45; certificateId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1343 1053.5,-1365 1348.5,-1365 1348.5,-1343 1053.5,-1343"/>
<text text-anchor="start" x="1058.5" y="-1351.2" font-family="Arial" font-size="11.00">+ studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1321 1053.5,-1343 1348.5,-1343 1348.5,-1321 1053.5,-1321"/>
<text text-anchor="start" x="1058.5" y="-1329.2" font-family="Arial" font-size="11.00">+ courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1299 1053.5,-1321 1348.5,-1321 1348.5,-1299 1053.5,-1299"/>
<text text-anchor="start" x="1058.5" y="-1307.2" font-family="Arial" font-size="11.00">+ issueDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1277 1053.5,-1299 1348.5,-1299 1348.5,-1277 1053.5,-1277"/>
<text text-anchor="start" x="1058.5" y="-1285.2" font-family="Arial" font-size="11.00">+ grade : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1267 1053.5,-1277 1348.5,-1277 1348.5,-1267 1053.5,-1267"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1257 1053.5,-1267 1348.5,-1267 1348.5,-1257 1053.5,-1257"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1235 1053.5,-1257 1348.5,-1257 1348.5,-1235 1053.5,-1235"/>
<text text-anchor="start" x="1058.5" y="-1243.2" font-family="Arial" font-size="11.00">+ Certificate(studentId: String, courseId: String) : Certificate</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1053.5,-1213 1053.5,-1235 1348.5,-1235 1348.5,-1213 1053.5,-1213"/>
<text text-anchor="start" x="1058.5" y="-1221.2" font-family="Arial" font-size="11.00">+ generatePDF() : String</text>
<polygon fill="black" stroke="black" points="1052.5,-1397 1052.5,-1397 1349.5,-1397 1349.5,-1397 1052.5,-1397"/>
<polygon fill="black" stroke="black" points="1052.5,-1267 1052.5,-1267 1349.5,-1267 1349.5,-1267 1052.5,-1267"/>
<path fill="none" stroke="black" d="M1064,-1212C1064,-1212 1337,-1212 1337,-1212 1343,-1212 1349,-1218 1349,-1224 1349,-1224 1349,-1408 1349,-1408 1349,-1414 1343,-1420 1337,-1420 1337,-1420 1064,-1420 1064,-1420 1058,-1420 1052,-1414 1052,-1408 1052,-1408 1052,-1224 1052,-1224 1052,-1218 1058,-1212 1064,-1212"/>
</g>
<!-- Student&#45;&gt;Certificate -->
<g id="edge14" class="edge">
<title>Student&#45;&gt;Certificate</title>
<path fill="none" stroke="#4a4a4a" d="M1200.5,-1509.78C1200.5,-1509.78 1200.5,-1434.11 1200.5,-1434.11"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1204,-1434.11 1200.5,-1424.11 1197,-1434.11 1204,-1434.11"/>
<text text-anchor="middle" x="1198.5" y="-1426.91" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1197.5" y="-1502.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Payment -->
<g id="node14" class="node">
<title>Payment</title>
<path fill="#e8e8e8" stroke="transparent" d="M1435,-1212C1435,-1212 1694,-1212 1694,-1212 1700,-1212 1706,-1218 1706,-1224 1706,-1224 1706,-1408 1706,-1408 1706,-1414 1700,-1420 1694,-1420 1694,-1420 1435,-1420 1435,-1420 1429,-1420 1423,-1414 1423,-1408 1423,-1408 1423,-1224 1423,-1224 1423,-1218 1429,-1212 1435,-1212"/>
<polygon fill="#bebebe" stroke="transparent" points="1424.5,-1397 1424.5,-1419 1705.5,-1419 1705.5,-1397 1424.5,-1397"/>
<text text-anchor="start" x="1542" y="-1406.2" font-family="Arial" font-weight="bold" font-size="11.00">Payment</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1387 1424.5,-1397 1705.5,-1397 1705.5,-1387 1424.5,-1387"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1365 1424.5,-1387 1705.5,-1387 1705.5,-1365 1424.5,-1365"/>
<text text-anchor="start" x="1429.5" y="-1373.2" font-family="Arial" font-size="11.00">&#45; paymentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1343 1424.5,-1365 1705.5,-1365 1705.5,-1343 1424.5,-1343"/>
<text text-anchor="start" x="1429.5" y="-1351.2" font-family="Arial" font-size="11.00">+ studentId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1321 1424.5,-1343 1705.5,-1343 1705.5,-1321 1424.5,-1321"/>
<text text-anchor="start" x="1429.5" y="-1329.2" font-family="Arial" font-size="11.00">+ courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1299 1424.5,-1321 1705.5,-1321 1705.5,-1299 1424.5,-1299"/>
<text text-anchor="start" x="1429.5" y="-1307.2" font-family="Arial" font-size="11.00">+ amount : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1277 1424.5,-1299 1705.5,-1299 1705.5,-1277 1424.5,-1277"/>
<text text-anchor="start" x="1429.5" y="-1285.2" font-family="Arial" font-size="11.00">+ paymentDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1267 1424.5,-1277 1705.5,-1277 1705.5,-1267 1424.5,-1267"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1257 1424.5,-1267 1705.5,-1267 1705.5,-1257 1424.5,-1257"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1235 1424.5,-1257 1705.5,-1257 1705.5,-1235 1424.5,-1235"/>
<text text-anchor="start" x="1429.5" y="-1243.2" font-family="Arial" font-size="11.00">+ Payment(studentId: String, amount: double) : Payment</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1424.5,-1213 1424.5,-1235 1705.5,-1235 1705.5,-1213 1424.5,-1213"/>
<text text-anchor="start" x="1429.5" y="-1221.2" font-family="Arial" font-size="11.00">+ processPayment() : boolean</text>
<polygon fill="black" stroke="black" points="1423.5,-1397 1423.5,-1397 1706.5,-1397 1706.5,-1397 1423.5,-1397"/>
<polygon fill="black" stroke="black" points="1423.5,-1267 1423.5,-1267 1706.5,-1267 1706.5,-1267 1423.5,-1267"/>
<path fill="none" stroke="black" d="M1435,-1212C1435,-1212 1694,-1212 1694,-1212 1700,-1212 1706,-1218 1706,-1224 1706,-1224 1706,-1408 1706,-1408 1706,-1414 1700,-1420 1694,-1420 1694,-1420 1435,-1420 1435,-1420 1429,-1420 1423,-1414 1423,-1408 1423,-1408 1423,-1224 1423,-1224 1423,-1218 1429,-1212 1435,-1212"/>
</g>
<!-- Student&#45;&gt;Payment -->
<g id="edge15" class="edge">
<title>Student&#45;&gt;Payment</title>
<path fill="none" stroke="#4a4a4a" d="M1339.67,-1668C1442.43,-1668 1564.5,-1668 1564.5,-1668 1564.5,-1668 1564.5,-1434 1564.5,-1434"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1568,-1434 1564.5,-1424 1561,-1434 1568,-1434"/>
<text text-anchor="middle" x="1562.5" y="-1426.8" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1342.67" y="-1670.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Course -->
<g id="node3" class="node">
<title>Course</title>
<path fill="#e8e8e8" stroke="transparent" d="M759.5,-910C759.5,-910 917.5,-910 917.5,-910 923.5,-910 929.5,-916 929.5,-922 929.5,-922 929.5,-1106 929.5,-1106 929.5,-1112 923.5,-1118 917.5,-1118 917.5,-1118 759.5,-1118 759.5,-1118 753.5,-1118 747.5,-1112 747.5,-1106 747.5,-1106 747.5,-922 747.5,-922 747.5,-916 753.5,-910 759.5,-910"/>
<polygon fill="#bebebe" stroke="transparent" points="748.5,-1095 748.5,-1117 928.5,-1117 928.5,-1095 748.5,-1095"/>
<text text-anchor="start" x="819" y="-1104.2" font-family="Arial" font-weight="bold" font-size="11.00">Course</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-1085 748.5,-1095 928.5,-1095 928.5,-1085 748.5,-1085"/>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-1063 748.5,-1085 928.5,-1085 928.5,-1063 748.5,-1063"/>
<text text-anchor="start" x="753.5" y="-1071.2" font-family="Arial" font-size="11.00">&#45; courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-1041 748.5,-1063 928.5,-1063 928.5,-1041 748.5,-1041"/>
<text text-anchor="start" x="753.5" y="-1049.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-1019 748.5,-1041 928.5,-1041 928.5,-1019 748.5,-1019"/>
<text text-anchor="start" x="753.5" y="-1027.2" font-family="Arial" font-size="11.00">+ description : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-997 748.5,-1019 928.5,-1019 928.5,-997 748.5,-997"/>
<text text-anchor="start" x="753.5" y="-1005.2" font-family="Arial" font-size="11.00">+ difficulty : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-975 748.5,-997 928.5,-997 928.5,-975 748.5,-975"/>
<text text-anchor="start" x="753.5" y="-983.2" font-family="Arial" font-size="11.00">+ duration : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-965 748.5,-975 928.5,-975 928.5,-965 748.5,-965"/>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-955 748.5,-965 928.5,-965 928.5,-955 748.5,-955"/>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-933 748.5,-955 928.5,-955 928.5,-933 748.5,-933"/>
<text text-anchor="start" x="753.5" y="-941.2" font-family="Arial" font-size="11.00">+ Course(title: String) : Course</text>
<polygon fill="#e8e8e8" stroke="transparent" points="748.5,-911 748.5,-933 928.5,-933 928.5,-911 748.5,-911"/>
<text text-anchor="start" x="753.5" y="-919.2" font-family="Arial" font-size="11.00">+ addLesson(lesson: Lesson) : void</text>
<polygon fill="black" stroke="black" points="747.5,-1095 747.5,-1095 929.5,-1095 929.5,-1095 747.5,-1095"/>
<polygon fill="black" stroke="black" points="747.5,-965 747.5,-965 929.5,-965 929.5,-965 747.5,-965"/>
<path fill="none" stroke="black" d="M759.5,-910C759.5,-910 917.5,-910 917.5,-910 923.5,-910 929.5,-916 929.5,-922 929.5,-922 929.5,-1106 929.5,-1106 929.5,-1112 923.5,-1118 917.5,-1118 917.5,-1118 759.5,-1118 759.5,-1118 753.5,-1118 747.5,-1112 747.5,-1106 747.5,-1106 747.5,-922 747.5,-922 747.5,-916 753.5,-910 759.5,-910"/>
</g>
<!-- CourseEnrollment&#45;&gt;Course -->
<g id="edge2" class="edge">
<title>CourseEnrollment&#45;&gt;Course</title>
<path fill="none" stroke="#4a4a4a" d="M637.02,-1213C723.23,-1213 805.5,-1213 805.5,-1213 805.5,-1213 805.5,-1132.24 805.5,-1132.24"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="809,-1132.24 805.5,-1122.24 802,-1132.24 809,-1132.24"/>
<text text-anchor="middle" x="802.5" y="-1125.04" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="639.02" y="-1215.8" font-family="Arial" font-size="9.00">*</text>
</g>
<!-- Lesson -->
<g id="node5" class="node">
<title>Lesson</title>
<path fill="#e8e8e8" stroke="transparent" d="M743.5,-608C743.5,-608 933.5,-608 933.5,-608 939.5,-608 945.5,-614 945.5,-620 945.5,-620 945.5,-804 945.5,-804 945.5,-810 939.5,-816 933.5,-816 933.5,-816 743.5,-816 743.5,-816 737.5,-816 731.5,-810 731.5,-804 731.5,-804 731.5,-620 731.5,-620 731.5,-614 737.5,-608 743.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="732.5,-793 732.5,-815 944.5,-815 944.5,-793 732.5,-793"/>
<text text-anchor="start" x="819" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Lesson</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-783 732.5,-793 944.5,-793 944.5,-783 732.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-761 732.5,-783 944.5,-783 944.5,-761 732.5,-761"/>
<text text-anchor="start" x="737.5" y="-769.2" font-family="Arial" font-size="11.00">&#45; lessonId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-739 732.5,-761 944.5,-761 944.5,-739 732.5,-739"/>
<text text-anchor="start" x="737.5" y="-747.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-717 732.5,-739 944.5,-739 944.5,-717 732.5,-717"/>
<text text-anchor="start" x="737.5" y="-725.2" font-family="Arial" font-size="11.00">+ courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-695 732.5,-717 944.5,-717 944.5,-695 732.5,-695"/>
<text text-anchor="start" x="737.5" y="-703.2" font-family="Arial" font-size="11.00">+ duration : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-673 732.5,-695 944.5,-695 944.5,-673 732.5,-673"/>
<text text-anchor="start" x="737.5" y="-681.2" font-family="Arial" font-size="11.00">+ order : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-663 732.5,-673 944.5,-673 944.5,-663 732.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-653 732.5,-663 944.5,-663 944.5,-653 732.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-631 732.5,-653 944.5,-653 944.5,-631 732.5,-631"/>
<text text-anchor="start" x="737.5" y="-639.2" font-family="Arial" font-size="11.00">+ Lesson(title: String) : Lesson</text>
<polygon fill="#e8e8e8" stroke="transparent" points="732.5,-609 732.5,-631 944.5,-631 944.5,-609 732.5,-609"/>
<text text-anchor="start" x="737.5" y="-617.2" font-family="Arial" font-size="11.00">+ markCompleted(studentId: String) : void</text>
<polygon fill="black" stroke="black" points="731.5,-793 731.5,-793 945.5,-793 945.5,-793 731.5,-793"/>
<polygon fill="black" stroke="black" points="731.5,-663 731.5,-663 945.5,-663 945.5,-663 731.5,-663"/>
<path fill="none" stroke="black" d="M743.5,-608C743.5,-608 933.5,-608 933.5,-608 939.5,-608 945.5,-614 945.5,-620 945.5,-620 945.5,-804 945.5,-804 945.5,-810 939.5,-816 933.5,-816 933.5,-816 743.5,-816 743.5,-816 737.5,-816 731.5,-810 731.5,-804 731.5,-804 731.5,-620 731.5,-620 731.5,-614 737.5,-608 743.5,-608"/>
</g>
<!-- Course&#45;&gt;Lesson -->
<g id="edge4" class="edge">
<title>Course&#45;&gt;Lesson</title>
<path fill="none" stroke="#4a4a4a" d="M838.5,-893.82C838.5,-893.82 838.5,-830.18 838.5,-830.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="838.5,-832.18 834.5,-826.18 838.5,-820.18 842.5,-826.18 838.5,-832.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="835,-895.82 838.5,-905.82 842,-895.82 835,-895.82"/>
<text text-anchor="middle" x="836.5" y="-898.62" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="835.5" y="-822.98" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Discussion -->
<g id="node11" class="node">
<title>Discussion</title>
<path fill="#e8e8e8" stroke="transparent" d="M1053,-619C1053,-619 1290,-619 1290,-619 1296,-619 1302,-625 1302,-631 1302,-631 1302,-793 1302,-793 1302,-799 1296,-805 1290,-805 1290,-805 1053,-805 1053,-805 1047,-805 1041,-799 1041,-793 1041,-793 1041,-631 1041,-631 1041,-625 1047,-619 1053,-619"/>
<polygon fill="#bebebe" stroke="transparent" points="1042.5,-782 1042.5,-804 1301.5,-804 1301.5,-782 1042.5,-782"/>
<text text-anchor="start" x="1142.5" y="-791.2" font-family="Arial" font-weight="bold" font-size="11.00">Discussion</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-772 1042.5,-782 1301.5,-782 1301.5,-772 1042.5,-772"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-750 1042.5,-772 1301.5,-772 1301.5,-750 1042.5,-750"/>
<text text-anchor="start" x="1047.5" y="-758.2" font-family="Arial" font-size="11.00">&#45; discussionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-728 1042.5,-750 1301.5,-750 1301.5,-728 1042.5,-728"/>
<text text-anchor="start" x="1047.5" y="-736.2" font-family="Arial" font-size="11.00">+ courseId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-706 1042.5,-728 1301.5,-728 1301.5,-706 1042.5,-706"/>
<text text-anchor="start" x="1047.5" y="-714.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-684 1042.5,-706 1301.5,-706 1301.5,-684 1042.5,-684"/>
<text text-anchor="start" x="1047.5" y="-692.2" font-family="Arial" font-size="11.00">+ createdDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-674 1042.5,-684 1301.5,-684 1301.5,-674 1042.5,-674"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-664 1042.5,-674 1301.5,-674 1301.5,-664 1042.5,-664"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-642 1042.5,-664 1301.5,-664 1301.5,-642 1042.5,-642"/>
<text text-anchor="start" x="1047.5" y="-650.2" font-family="Arial" font-size="11.00">+ Discussion(title: String) : Discussion</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1042.5,-620 1042.5,-642 1301.5,-642 1301.5,-620 1042.5,-620"/>
<text text-anchor="start" x="1047.5" y="-628.2" font-family="Arial" font-size="11.00">+ addPost(studentId: String, message: String) : void</text>
<polygon fill="black" stroke="black" points="1041.5,-782 1041.5,-782 1302.5,-782 1302.5,-782 1041.5,-782"/>
<polygon fill="black" stroke="black" points="1041.5,-674 1041.5,-674 1302.5,-674 1302.5,-674 1041.5,-674"/>
<path fill="none" stroke="black" d="M1053,-619C1053,-619 1290,-619 1290,-619 1296,-619 1302,-625 1302,-631 1302,-631 1302,-793 1302,-793 1302,-799 1296,-805 1290,-805 1290,-805 1053,-805 1053,-805 1047,-805 1041,-799 1041,-793 1041,-793 1041,-631 1041,-631 1041,-625 1047,-619 1053,-619"/>
</g>
<!-- Course&#45;&gt;Discussion -->
<g id="edge12" class="edge">
<title>Course&#45;&gt;Discussion</title>
<path fill="none" stroke="#4a4a4a" d="M949.62,-1014C949.62,-1014 1038.5,-1014 1038.5,-1014 1038.5,-1014 1038.5,-819.22 1038.5,-819.22"/>
<polygon fill="none" stroke="#4a4a4a" points="949.62,-1014 943.62,-1018 937.62,-1014 943.62,-1010 949.62,-1014"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1042,-819.22 1038.5,-809.22 1035,-819.22 1042,-819.22"/>
<text text-anchor="middle" x="1036.5" y="-812.02" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="940.62" y="-1016.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Instructor -->
<g id="node4" class="node">
<title>Instructor</title>
<path fill="#e8e8e8" stroke="transparent" d="M715.5,-1223C715.5,-1223 965.5,-1223 965.5,-1223 971.5,-1223 977.5,-1229 977.5,-1235 977.5,-1235 977.5,-1397 977.5,-1397 977.5,-1403 971.5,-1409 965.5,-1409 965.5,-1409 715.5,-1409 715.5,-1409 709.5,-1409 703.5,-1403 703.5,-1397 703.5,-1397 703.5,-1235 703.5,-1235 703.5,-1229 709.5,-1223 715.5,-1223"/>
<polygon fill="#bebebe" stroke="transparent" points="704.5,-1386 704.5,-1408 976.5,-1408 976.5,-1386 704.5,-1386"/>
<text text-anchor="start" x="814.5" y="-1395.2" font-family="Arial" font-weight="bold" font-size="11.00">Instructor</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1376 704.5,-1386 976.5,-1386 976.5,-1376 704.5,-1376"/>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1354 704.5,-1376 976.5,-1376 976.5,-1354 704.5,-1354"/>
<text text-anchor="start" x="709.5" y="-1362.2" font-family="Arial" font-size="11.00">&#45; instructorId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1332 704.5,-1354 976.5,-1354 976.5,-1332 704.5,-1332"/>
<text text-anchor="start" x="709.5" y="-1340.2" font-family="Arial" font-size="11.00">+ name : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1310 704.5,-1332 976.5,-1332 976.5,-1310 704.5,-1310"/>
<text text-anchor="start" x="709.5" y="-1318.2" font-family="Arial" font-size="11.00">+ expertise : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1288 704.5,-1310 976.5,-1310 976.5,-1288 704.5,-1288"/>
<text text-anchor="start" x="709.5" y="-1296.2" font-family="Arial" font-size="11.00">+ rating : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1278 704.5,-1288 976.5,-1288 976.5,-1278 704.5,-1278"/>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1268 704.5,-1278 976.5,-1278 976.5,-1268 704.5,-1268"/>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1246 704.5,-1268 976.5,-1268 976.5,-1246 704.5,-1246"/>
<text text-anchor="start" x="709.5" y="-1254.2" font-family="Arial" font-size="11.00">+ Instructor(name: String, expertise: String) : Instructor</text>
<polygon fill="#e8e8e8" stroke="transparent" points="704.5,-1224 704.5,-1246 976.5,-1246 976.5,-1224 704.5,-1224"/>
<text text-anchor="start" x="709.5" y="-1232.2" font-family="Arial" font-size="11.00">+ createCourse(title: String) : Course</text>
<polygon fill="black" stroke="black" points="703.5,-1386 703.5,-1386 977.5,-1386 977.5,-1386 703.5,-1386"/>
<polygon fill="black" stroke="black" points="703.5,-1278 703.5,-1278 977.5,-1278 977.5,-1278 703.5,-1278"/>
<path fill="none" stroke="black" d="M715.5,-1223C715.5,-1223 965.5,-1223 965.5,-1223 971.5,-1223 977.5,-1229 977.5,-1235 977.5,-1235 977.5,-1397 977.5,-1397 977.5,-1403 971.5,-1409 965.5,-1409 965.5,-1409 715.5,-1409 715.5,-1409 709.5,-1409 703.5,-1403 703.5,-1397 703.5,-1397 703.5,-1235 703.5,-1235 703.5,-1229 709.5,-1223 715.5,-1223"/>
</g>
<!-- Instructor&#45;&gt;Course -->
<g id="edge3" class="edge">
<title>Instructor&#45;&gt;Course</title>
<path fill="none" stroke="#4a4a4a" d="M871.5,-1218.78C871.5,-1218.78 871.5,-1132.03 871.5,-1132.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="875,-1132.03 871.5,-1122.03 868,-1132.03 875,-1132.03"/>
<text text-anchor="middle" x="869.5" y="-1124.83" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="868.5" y="-1211.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- VideoContent -->
<g id="node6" class="node">
<title>VideoContent</title>
<path fill="#e8e8e8" stroke="transparent" d="M688,-317C688,-317 989,-317 989,-317 995,-317 1001,-323 1001,-329 1001,-329 1001,-491 1001,-491 1001,-497 995,-503 989,-503 989,-503 688,-503 688,-503 682,-503 676,-497 676,-491 676,-491 676,-329 676,-329 676,-323 682,-317 688,-317"/>
<polygon fill="#bebebe" stroke="transparent" points="677.5,-480 677.5,-502 1000.5,-502 1000.5,-480 677.5,-480"/>
<text text-anchor="start" x="802.5" y="-489.2" font-family="Arial" font-weight="bold" font-size="11.00">VideoContent</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-470 677.5,-480 1000.5,-480 1000.5,-470 677.5,-470"/>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-448 677.5,-470 1000.5,-470 1000.5,-448 677.5,-448"/>
<text text-anchor="start" x="682.5" y="-456.2" font-family="Arial" font-size="11.00">&#45; videoId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-426 677.5,-448 1000.5,-448 1000.5,-426 677.5,-426"/>
<text text-anchor="start" x="682.5" y="-434.2" font-family="Arial" font-size="11.00">+ lessonId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-404 677.5,-426 1000.5,-426 1000.5,-404 677.5,-404"/>
<text text-anchor="start" x="682.5" y="-412.2" font-family="Arial" font-size="11.00">+ videoUrl : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-382 677.5,-404 1000.5,-404 1000.5,-382 677.5,-382"/>
<text text-anchor="start" x="682.5" y="-390.2" font-family="Arial" font-size="11.00">+ duration : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-372 677.5,-382 1000.5,-382 1000.5,-372 677.5,-372"/>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-362 677.5,-372 1000.5,-372 1000.5,-362 677.5,-362"/>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-340 677.5,-362 1000.5,-362 1000.5,-340 677.5,-340"/>
<text text-anchor="start" x="682.5" y="-348.2" font-family="Arial" font-size="11.00">+ VideoContent(lessonId: String, videoUrl: String) : VideoContent</text>
<polygon fill="#e8e8e8" stroke="transparent" points="677.5,-318 677.5,-340 1000.5,-340 1000.5,-318 677.5,-318"/>
<text text-anchor="start" x="682.5" y="-326.2" font-family="Arial" font-size="11.00">+ play() : void</text>
<polygon fill="black" stroke="black" points="676.5,-480 676.5,-480 1001.5,-480 1001.5,-480 676.5,-480"/>
<polygon fill="black" stroke="black" points="676.5,-372 676.5,-372 1001.5,-372 1001.5,-372 676.5,-372"/>
<path fill="none" stroke="black" d="M688,-317C688,-317 989,-317 989,-317 995,-317 1001,-323 1001,-329 1001,-329 1001,-491 1001,-491 1001,-497 995,-503 989,-503 989,-503 688,-503 688,-503 682,-503 676,-497 676,-491 676,-491 676,-329 676,-329 676,-323 682,-317 688,-317"/>
</g>
<!-- Lesson&#45;&gt;VideoContent -->
<g id="edge5" class="edge">
<title>Lesson&#45;&gt;VideoContent</title>
<path fill="none" stroke="#4a4a4a" d="M838.5,-603.82C838.5,-603.82 838.5,-517.38 838.5,-517.38"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="842,-517.38 838.5,-507.38 835,-517.38 842,-517.38"/>
<text text-anchor="middle" x="836.5" y="-510.18" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="835.5" y="-596.62" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Quiz -->
<g id="node8" class="node">
<title>Quiz</title>
<path fill="#e8e8e8" stroke="transparent" d="M405.5,-317C405.5,-317 589.5,-317 589.5,-317 595.5,-317 601.5,-323 601.5,-329 601.5,-329 601.5,-491 601.5,-491 601.5,-497 595.5,-503 589.5,-503 589.5,-503 405.5,-503 405.5,-503 399.5,-503 393.5,-497 393.5,-491 393.5,-491 393.5,-329 393.5,-329 393.5,-323 399.5,-317 405.5,-317"/>
<polygon fill="#bebebe" stroke="transparent" points="394.5,-480 394.5,-502 600.5,-502 600.5,-480 394.5,-480"/>
<text text-anchor="start" x="485.5" y="-489.2" font-family="Arial" font-weight="bold" font-size="11.00">Quiz</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-470 394.5,-480 600.5,-480 600.5,-470 394.5,-470"/>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-448 394.5,-470 600.5,-470 600.5,-448 394.5,-448"/>
<text text-anchor="start" x="399.5" y="-456.2" font-family="Arial" font-size="11.00">&#45; quizId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-426 394.5,-448 600.5,-448 600.5,-426 394.5,-426"/>
<text text-anchor="start" x="399.5" y="-434.2" font-family="Arial" font-size="11.00">+ lessonId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-404 394.5,-426 600.5,-426 600.5,-404 394.5,-404"/>
<text text-anchor="start" x="399.5" y="-412.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-382 394.5,-404 600.5,-404 600.5,-382 394.5,-382"/>
<text text-anchor="start" x="399.5" y="-390.2" font-family="Arial" font-size="11.00">+ passingScore : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-372 394.5,-382 600.5,-382 600.5,-372 394.5,-372"/>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-362 394.5,-372 600.5,-372 600.5,-362 394.5,-362"/>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-340 394.5,-362 600.5,-362 600.5,-340 394.5,-340"/>
<text text-anchor="start" x="399.5" y="-348.2" font-family="Arial" font-size="11.00">+ Quiz(title: String) : Quiz</text>
<polygon fill="#e8e8e8" stroke="transparent" points="394.5,-318 394.5,-340 600.5,-340 600.5,-318 394.5,-318"/>
<text text-anchor="start" x="399.5" y="-326.2" font-family="Arial" font-size="11.00">+ addQuestion(question: Question) : void</text>
<polygon fill="black" stroke="black" points="393.5,-480 393.5,-480 601.5,-480 601.5,-480 393.5,-480"/>
<polygon fill="black" stroke="black" points="393.5,-372 393.5,-372 601.5,-372 601.5,-372 393.5,-372"/>
<path fill="none" stroke="black" d="M405.5,-317C405.5,-317 589.5,-317 589.5,-317 595.5,-317 601.5,-323 601.5,-329 601.5,-329 601.5,-491 601.5,-491 601.5,-497 595.5,-503 589.5,-503 589.5,-503 405.5,-503 405.5,-503 399.5,-503 393.5,-497 393.5,-491 393.5,-491 393.5,-329 393.5,-329 393.5,-323 399.5,-317 405.5,-317"/>
</g>
<!-- Lesson&#45;&gt;Quiz -->
<g id="edge8" class="edge">
<title>Lesson&#45;&gt;Quiz</title>
<path fill="none" stroke="#4a4a4a" d="M723.05,-712C624.13,-712 497.5,-712 497.5,-712 497.5,-712 497.5,-517.22 497.5,-517.22"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="501,-517.22 497.5,-507.22 494,-517.22 501,-517.22"/>
<text text-anchor="middle" x="495.5" y="-510.02" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="720.05" y="-714.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- VideoContent&#45;&gt;WatchProgress -->
<g id="edge7" class="edge">
<title>VideoContent&#45;&gt;WatchProgress</title>
<path fill="none" stroke="#4a4a4a" d="M838.5,-312.78C838.5,-224.5 838.5,-108 838.5,-108 838.5,-108 1138.25,-108 1138.25,-108"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1138.25,-111.5 1148.25,-108 1138.25,-104.5 1138.25,-111.5"/>
<text text-anchor="middle" x="1146.25" y="-110.8" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="835.5" y="-305.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Question -->
<g id="node9" class="node">
<title>Question</title>
<path fill="#e8e8e8" stroke="transparent" d="M400,-15C400,-15 595,-15 595,-15 601,-15 607,-21 607,-27 607,-27 607,-189 607,-189 607,-195 601,-201 595,-201 595,-201 400,-201 400,-201 394,-201 388,-195 388,-189 388,-189 388,-27 388,-27 388,-21 394,-15 400,-15"/>
<polygon fill="#bebebe" stroke="transparent" points="389.5,-178 389.5,-200 606.5,-200 606.5,-178 389.5,-178"/>
<text text-anchor="start" x="474" y="-187.2" font-family="Arial" font-weight="bold" font-size="11.00">Question</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-168 389.5,-178 606.5,-178 606.5,-168 389.5,-168"/>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-146 389.5,-168 606.5,-168 606.5,-146 389.5,-146"/>
<text text-anchor="start" x="394.5" y="-154.2" font-family="Arial" font-size="11.00">&#45; questionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-124 389.5,-146 606.5,-146 606.5,-124 389.5,-124"/>
<text text-anchor="start" x="394.5" y="-132.2" font-family="Arial" font-size="11.00">+ quizId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-102 389.5,-124 606.5,-124 606.5,-102 389.5,-102"/>
<text text-anchor="start" x="394.5" y="-110.2" font-family="Arial" font-size="11.00">+ questionText : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-80 389.5,-102 606.5,-102 606.5,-80 389.5,-80"/>
<text text-anchor="start" x="394.5" y="-88.2" font-family="Arial" font-size="11.00">+ questionType : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-70 389.5,-80 606.5,-80 606.5,-70 389.5,-70"/>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-60 389.5,-70 606.5,-70 606.5,-60 389.5,-60"/>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-38 389.5,-60 606.5,-60 606.5,-38 389.5,-38"/>
<text text-anchor="start" x="394.5" y="-46.2" font-family="Arial" font-size="11.00">+ Question(questionText: String) : Question</text>
<polygon fill="#e8e8e8" stroke="transparent" points="389.5,-16 389.5,-38 606.5,-38 606.5,-16 389.5,-16"/>
<text text-anchor="start" x="394.5" y="-24.2" font-family="Arial" font-size="11.00">+ addOption(option: String) : void</text>
<polygon fill="black" stroke="black" points="388.5,-178 388.5,-178 607.5,-178 607.5,-178 388.5,-178"/>
<polygon fill="black" stroke="black" points="388.5,-70 388.5,-70 607.5,-70 607.5,-70 388.5,-70"/>
<path fill="none" stroke="black" d="M400,-15C400,-15 595,-15 595,-15 601,-15 607,-21 607,-27 607,-27 607,-189 607,-189 607,-195 601,-201 595,-201 595,-201 400,-201 400,-201 394,-201 388,-195 388,-189 388,-189 388,-27 388,-27 388,-21 394,-15 400,-15"/>
</g>
<!-- Quiz&#45;&gt;Question -->
<g id="edge9" class="edge">
<title>Quiz&#45;&gt;Question</title>
<path fill="none" stroke="#4a4a4a" d="M534.83,-300.78C534.83,-300.78 534.83,-215.03 534.83,-215.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="534.83,-217.03 530.83,-211.03 534.83,-205.03 538.83,-211.03 534.83,-217.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="531.33,-302.78 534.83,-312.78 538.33,-302.78 531.33,-302.78"/>
<text text-anchor="middle" x="532.83" y="-305.58" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="531.83" y="-207.83" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Quiz&#45;&gt;QuizAttempt -->
<g id="edge11" class="edge">
<title>Quiz&#45;&gt;QuizAttempt</title>
<path fill="none" stroke="#4a4a4a" d="M460.17,-312.93C460.17,-261.97 460.17,-210 460.17,-210 460.17,-210 331.3,-210 331.3,-210"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="331.3,-206.5 321.3,-210 331.3,-213.5 331.3,-206.5"/>
<text text-anchor="middle" x="323.3" y="-212.8" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="457.17" y="-305.73" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Post -->
<g id="node12" class="node">
<title>Post</title>
<path fill="#e8e8e8" stroke="transparent" d="M1087.5,-306C1087.5,-306 1295.5,-306 1295.5,-306 1301.5,-306 1307.5,-312 1307.5,-318 1307.5,-318 1307.5,-502 1307.5,-502 1307.5,-508 1301.5,-514 1295.5,-514 1295.5,-514 1087.5,-514 1087.5,-514 1081.5,-514 1075.5,-508 1075.5,-502 1075.5,-502 1075.5,-318 1075.5,-318 1075.5,-312 1081.5,-306 1087.5,-306"/>
<polygon fill="#bebebe" stroke="transparent" points="1076.5,-491 1076.5,-513 1306.5,-513 1306.5,-491 1076.5,-491"/>
<text text-anchor="start" x="1179" y="-500.2" font-family="Arial" font-weight="bold" font-size="11.00">Post</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-481 1076.5,-491 1306.5,-491 1306.5,-481 1076.5,-481"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-459 1076.5,-481 1306.5,-481 1306.5,-459 1076.5,-459"/>
<text text-anchor="start" x="1081.5" y="-467.2" font-family="Arial" font-size="11.00">&#45; postId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-437 1076.5,-459 1306.5,-459 1306.5,-437 1076.5,-437"/>
<text text-anchor="start" x="1081.5" y="-445.2" font-family="Arial" font-size="11.00">+ discussionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-415 1076.5,-437 1306.5,-437 1306.5,-415 1076.5,-415"/>
<text text-anchor="start" x="1081.5" y="-423.2" font-family="Arial" font-size="11.00">+ authorId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-393 1076.5,-415 1306.5,-415 1306.5,-393 1076.5,-393"/>
<text text-anchor="start" x="1081.5" y="-401.2" font-family="Arial" font-size="11.00">+ content : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-371 1076.5,-393 1306.5,-393 1306.5,-371 1076.5,-371"/>
<text text-anchor="start" x="1081.5" y="-379.2" font-family="Arial" font-size="11.00">+ postDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-361 1076.5,-371 1306.5,-371 1306.5,-361 1076.5,-361"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-351 1076.5,-361 1306.5,-361 1306.5,-351 1076.5,-351"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-329 1076.5,-351 1306.5,-351 1306.5,-329 1076.5,-329"/>
<text text-anchor="start" x="1081.5" y="-337.2" font-family="Arial" font-size="11.00">+ Post(authorId: String, content: String) : Post</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1076.5,-307 1076.5,-329 1306.5,-329 1306.5,-307 1076.5,-307"/>
<text text-anchor="start" x="1081.5" y="-315.2" font-family="Arial" font-size="11.00">+ reply(replyContent: String) : void</text>
<polygon fill="black" stroke="black" points="1075.5,-491 1075.5,-491 1307.5,-491 1307.5,-491 1075.5,-491"/>
<polygon fill="black" stroke="black" points="1075.5,-361 1075.5,-361 1307.5,-361 1307.5,-361 1075.5,-361"/>
<path fill="none" stroke="black" d="M1087.5,-306C1087.5,-306 1295.5,-306 1295.5,-306 1301.5,-306 1307.5,-312 1307.5,-318 1307.5,-318 1307.5,-502 1307.5,-502 1307.5,-508 1301.5,-514 1295.5,-514 1295.5,-514 1087.5,-514 1087.5,-514 1081.5,-514 1075.5,-508 1075.5,-502 1075.5,-502 1075.5,-318 1075.5,-318 1075.5,-312 1081.5,-306 1087.5,-306"/>
</g>
<!-- Discussion&#45;&gt;Post -->
<g id="edge13" class="edge">
<title>Discussion&#45;&gt;Post</title>
<path fill="none" stroke="#4a4a4a" d="M1188.75,-602.78C1188.75,-602.78 1188.75,-528.03 1188.75,-528.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1188.75,-530.03 1184.75,-524.03 1188.75,-518.03 1192.75,-524.03 1188.75,-530.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1185.25,-604.78 1188.75,-614.78 1192.25,-604.78 1185.25,-604.78"/>
<text text-anchor="middle" x="1186.75" y="-607.58" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1185.75" y="-520.83" font-family="Arial" font-size="9.00">1</text>
</g>
</g>
</svg>