Graphify / images /cd6.svg
ZahirJS's picture
Upload 52 files
da43f5e verified
<?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="2294pt" height="1216pt"
viewBox="0.00 0.00 2293.50 1216.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 1180)">
<title>%3</title>
<polygon fill="white" stroke="transparent" points="-36,36 -36,-1180 2257.5,-1180 2257.5,36 -36,36"/>
<!-- Reader -->
<g id="node1" class="node">
<title>Reader</title>
<path fill="#e8e8e8" stroke="transparent" d="M1157,-910C1157,-910 1392,-910 1392,-910 1398,-910 1404,-916 1404,-922 1404,-922 1404,-1128 1404,-1128 1404,-1134 1398,-1140 1392,-1140 1392,-1140 1157,-1140 1157,-1140 1151,-1140 1145,-1134 1145,-1128 1145,-1128 1145,-922 1145,-922 1145,-916 1151,-910 1157,-910"/>
<polygon fill="#bebebe" stroke="transparent" points="1146.5,-1117 1146.5,-1139 1403.5,-1139 1403.5,-1117 1146.5,-1117"/>
<text text-anchor="start" x="1256" y="-1126.2" font-family="Arial" font-weight="bold" font-size="11.00">Reader</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1107 1146.5,-1117 1403.5,-1117 1403.5,-1107 1146.5,-1107"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1085 1146.5,-1107 1403.5,-1107 1403.5,-1085 1146.5,-1085"/>
<text text-anchor="start" x="1151.5" y="-1093.2" font-family="Arial" font-size="11.00">&#45; readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1063 1146.5,-1085 1403.5,-1085 1403.5,-1063 1146.5,-1063"/>
<text text-anchor="start" x="1151.5" y="-1071.2" font-family="Arial" font-size="11.00">+ username : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1041 1146.5,-1063 1403.5,-1063 1403.5,-1041 1146.5,-1041"/>
<text text-anchor="start" x="1151.5" y="-1049.2" font-family="Arial" font-size="11.00">+ email : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1019 1146.5,-1041 1403.5,-1041 1403.5,-1019 1146.5,-1019"/>
<text text-anchor="start" x="1151.5" y="-1027.2" font-family="Arial" font-size="11.00">+ membershipType : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-997 1146.5,-1019 1403.5,-1019 1403.5,-997 1146.5,-997"/>
<text text-anchor="start" x="1151.5" y="-1005.2" font-family="Arial" font-size="11.00">+ readingStreak : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-987 1146.5,-997 1403.5,-997 1403.5,-987 1146.5,-987"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-977 1146.5,-987 1403.5,-987 1403.5,-977 1146.5,-977"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-955 1146.5,-977 1403.5,-977 1403.5,-955 1146.5,-955"/>
<text text-anchor="start" x="1151.5" y="-963.2" font-family="Arial" font-size="11.00">+ Reader(username: String, email: String) : Reader</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-933 1146.5,-955 1403.5,-955 1403.5,-933 1146.5,-933"/>
<text text-anchor="start" x="1151.5" y="-941.2" font-family="Arial" font-size="11.00">+ borrowBook(bookId: String) : BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-911 1146.5,-933 1403.5,-933 1403.5,-911 1146.5,-911"/>
<text text-anchor="start" x="1151.5" y="-919.2" font-family="Arial" font-size="11.00">+ addToWishlist(bookId: String) : void</text>
<polygon fill="black" stroke="black" points="1145.5,-1117 1145.5,-1117 1404.5,-1117 1404.5,-1117 1145.5,-1117"/>
<polygon fill="black" stroke="black" points="1145.5,-987 1145.5,-987 1404.5,-987 1404.5,-987 1145.5,-987"/>
<path fill="none" stroke="black" d="M1157,-910C1157,-910 1392,-910 1392,-910 1398,-910 1404,-916 1404,-922 1404,-922 1404,-1128 1404,-1128 1404,-1134 1398,-1140 1392,-1140 1392,-1140 1157,-1140 1157,-1140 1151,-1140 1145,-1134 1145,-1128 1145,-1128 1145,-922 1145,-922 1145,-916 1151,-910 1157,-910"/>
</g>
<!-- BorrowRecord -->
<g id="node2" class="node">
<title>BorrowRecord</title>
<path fill="#e8e8e8" stroke="transparent" d="M291.5,-608C291.5,-608 595.5,-608 595.5,-608 601.5,-608 607.5,-614 607.5,-620 607.5,-620 607.5,-804 607.5,-804 607.5,-810 601.5,-816 595.5,-816 595.5,-816 291.5,-816 291.5,-816 285.5,-816 279.5,-810 279.5,-804 279.5,-804 279.5,-620 279.5,-620 279.5,-614 285.5,-608 291.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="280.5,-793 280.5,-815 606.5,-815 606.5,-793 280.5,-793"/>
<text text-anchor="start" x="404.5" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-783 280.5,-793 606.5,-793 606.5,-783 280.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-761 280.5,-783 606.5,-783 606.5,-761 280.5,-761"/>
<text text-anchor="start" x="285.5" y="-769.2" font-family="Arial" font-size="11.00">&#45; borrowId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-739 280.5,-761 606.5,-761 606.5,-739 280.5,-739"/>
<text text-anchor="start" x="285.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-717 280.5,-739 606.5,-739 606.5,-717 280.5,-717"/>
<text text-anchor="start" x="285.5" y="-725.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-695 280.5,-717 606.5,-717 606.5,-695 280.5,-695"/>
<text text-anchor="start" x="285.5" y="-703.2" font-family="Arial" font-size="11.00">+ borrowDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-673 280.5,-695 606.5,-695 606.5,-673 280.5,-673"/>
<text text-anchor="start" x="285.5" y="-681.2" font-family="Arial" font-size="11.00">+ dueDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-663 280.5,-673 606.5,-673 606.5,-663 280.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-653 280.5,-663 606.5,-663 606.5,-653 280.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-631 280.5,-653 606.5,-653 606.5,-631 280.5,-631"/>
<text text-anchor="start" x="285.5" y="-639.2" font-family="Arial" font-size="11.00">+ BorrowRecord(readerId: String, bookId: String) : BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-609 280.5,-631 606.5,-631 606.5,-609 280.5,-609"/>
<text text-anchor="start" x="285.5" y="-617.2" font-family="Arial" font-size="11.00">+ extendDueDate(days: int) : void</text>
<polygon fill="black" stroke="black" points="279.5,-793 279.5,-793 607.5,-793 607.5,-793 279.5,-793"/>
<polygon fill="black" stroke="black" points="279.5,-663 279.5,-663 607.5,-663 607.5,-663 279.5,-663"/>
<path fill="none" stroke="black" d="M291.5,-608C291.5,-608 595.5,-608 595.5,-608 601.5,-608 607.5,-614 607.5,-620 607.5,-620 607.5,-804 607.5,-804 607.5,-810 601.5,-816 595.5,-816 595.5,-816 291.5,-816 291.5,-816 285.5,-816 279.5,-810 279.5,-804 279.5,-804 279.5,-620 279.5,-620 279.5,-614 285.5,-608 291.5,-608"/>
</g>
<!-- Reader&#45;&gt;BorrowRecord -->
<g id="edge1" class="edge">
<title>Reader&#45;&gt;BorrowRecord</title>
<path fill="none" stroke="#4a4a4a" d="M1136.81,-1064C900.65,-1064 443.5,-1064 443.5,-1064 443.5,-1064 443.5,-830 443.5,-830"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="447,-830 443.5,-820 440,-830 447,-830"/>
<text text-anchor="middle" x="441.5" y="-822.8" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1133.81" y="-1066.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Review -->
<g id="node9" class="node">
<title>Review</title>
<path fill="#e8e8e8" stroke="transparent" d="M1250,-4C1250,-4 1485,-4 1485,-4 1491,-4 1497,-10 1497,-16 1497,-16 1497,-200 1497,-200 1497,-206 1491,-212 1485,-212 1485,-212 1250,-212 1250,-212 1244,-212 1238,-206 1238,-200 1238,-200 1238,-16 1238,-16 1238,-10 1244,-4 1250,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="1239.5,-189 1239.5,-211 1496.5,-211 1496.5,-189 1239.5,-189"/>
<text text-anchor="start" x="1349" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">Review</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-179 1239.5,-189 1496.5,-189 1496.5,-179 1239.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-157 1239.5,-179 1496.5,-179 1496.5,-157 1239.5,-157"/>
<text text-anchor="start" x="1244.5" y="-165.2" font-family="Arial" font-size="11.00">&#45; reviewId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-135 1239.5,-157 1496.5,-157 1496.5,-135 1239.5,-135"/>
<text text-anchor="start" x="1244.5" y="-143.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-113 1239.5,-135 1496.5,-135 1496.5,-113 1239.5,-113"/>
<text text-anchor="start" x="1244.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-91 1239.5,-113 1496.5,-113 1496.5,-91 1239.5,-91"/>
<text text-anchor="start" x="1244.5" y="-99.2" font-family="Arial" font-size="11.00">+ rating : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-69 1239.5,-91 1496.5,-91 1496.5,-69 1239.5,-69"/>
<text text-anchor="start" x="1244.5" y="-77.2" font-family="Arial" font-size="11.00">+ comment : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-59 1239.5,-69 1496.5,-69 1496.5,-59 1239.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-49 1239.5,-59 1496.5,-59 1496.5,-49 1239.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-27 1239.5,-49 1496.5,-49 1496.5,-27 1239.5,-27"/>
<text text-anchor="start" x="1244.5" y="-35.2" font-family="Arial" font-size="11.00">+ Review(readerId: String, bookId: String) : Review</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-5 1239.5,-27 1496.5,-27 1496.5,-5 1239.5,-5"/>
<text text-anchor="start" x="1244.5" y="-13.2" font-family="Arial" font-size="11.00">+ updateRating(newRating: int) : void</text>
<polygon fill="black" stroke="black" points="1238.5,-189 1238.5,-189 1497.5,-189 1497.5,-189 1238.5,-189"/>
<polygon fill="black" stroke="black" points="1238.5,-59 1238.5,-59 1497.5,-59 1497.5,-59 1238.5,-59"/>
<path fill="none" stroke="black" d="M1250,-4C1250,-4 1485,-4 1485,-4 1491,-4 1497,-10 1497,-16 1497,-16 1497,-200 1497,-200 1497,-206 1491,-212 1485,-212 1485,-212 1250,-212 1250,-212 1244,-212 1238,-206 1238,-200 1238,-200 1238,-16 1238,-16 1238,-10 1244,-4 1250,-4"/>
</g>
<!-- Reader&#45;&gt;Review -->
<g id="edge8" class="edge">
<title>Reader&#45;&gt;Review</title>
<path fill="none" stroke="#4a4a4a" d="M1326.33,-905.59C1326.33,-905.59 1326.33,-226.26 1326.33,-226.26"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1329.83,-226.26 1326.33,-216.26 1322.83,-226.26 1329.83,-226.26"/>
<text text-anchor="middle" x="1324.33" y="-219.06" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1323.33" y="-898.39" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Recommendation -->
<g id="node10" class="node">
<title>Recommendation</title>
<path fill="#e8e8e8" stroke="transparent" d="M1869.5,-608C1869.5,-608 2201.5,-608 2201.5,-608 2207.5,-608 2213.5,-614 2213.5,-620 2213.5,-620 2213.5,-804 2213.5,-804 2213.5,-810 2207.5,-816 2201.5,-816 2201.5,-816 1869.5,-816 1869.5,-816 1863.5,-816 1857.5,-810 1857.5,-804 1857.5,-804 1857.5,-620 1857.5,-620 1857.5,-614 1863.5,-608 1869.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1858.5,-793 1858.5,-815 2212.5,-815 2212.5,-793 1858.5,-793"/>
<text text-anchor="start" x="1989" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Recommendation</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-783 1858.5,-793 2212.5,-793 2212.5,-783 1858.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-761 1858.5,-783 2212.5,-783 2212.5,-761 1858.5,-761"/>
<text text-anchor="start" x="1863.5" y="-769.2" font-family="Arial" font-size="11.00">&#45; recommendationId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-739 1858.5,-761 2212.5,-761 2212.5,-739 1858.5,-739"/>
<text text-anchor="start" x="1863.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-717 1858.5,-739 2212.5,-739 2212.5,-717 1858.5,-717"/>
<text text-anchor="start" x="1863.5" y="-725.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-695 1858.5,-717 2212.5,-717 2212.5,-695 1858.5,-695"/>
<text text-anchor="start" x="1863.5" y="-703.2" font-family="Arial" font-size="11.00">+ confidence : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-673 1858.5,-695 2212.5,-695 2212.5,-673 1858.5,-673"/>
<text text-anchor="start" x="1863.5" y="-681.2" font-family="Arial" font-size="11.00">+ reason : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-663 1858.5,-673 2212.5,-673 2212.5,-663 1858.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-653 1858.5,-663 2212.5,-663 2212.5,-653 1858.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-631 1858.5,-653 2212.5,-653 2212.5,-631 1858.5,-631"/>
<text text-anchor="start" x="1863.5" y="-639.2" font-family="Arial" font-size="11.00">+ Recommendation(readerId: String, bookId: String) : Recommendation</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-609 1858.5,-631 2212.5,-631 2212.5,-609 1858.5,-609"/>
<text text-anchor="start" x="1863.5" y="-617.2" font-family="Arial" font-size="11.00">+ calculateConfidence() : double</text>
<polygon fill="black" stroke="black" points="1857.5,-793 1857.5,-793 2213.5,-793 2213.5,-793 1857.5,-793"/>
<polygon fill="black" stroke="black" points="1857.5,-663 1857.5,-663 2213.5,-663 2213.5,-663 1857.5,-663"/>
<path fill="none" stroke="black" d="M1869.5,-608C1869.5,-608 2201.5,-608 2201.5,-608 2207.5,-608 2213.5,-614 2213.5,-620 2213.5,-620 2213.5,-804 2213.5,-804 2213.5,-810 2207.5,-816 2201.5,-816 2201.5,-816 1869.5,-816 1869.5,-816 1863.5,-816 1857.5,-810 1857.5,-804 1857.5,-804 1857.5,-620 1857.5,-620 1857.5,-614 1863.5,-608 1869.5,-608"/>
</g>
<!-- Reader&#45;&gt;Recommendation -->
<g id="edge11" class="edge">
<title>Reader&#45;&gt;Recommendation</title>
<path fill="none" stroke="#4a4a4a" d="M1412.22,-917C1615.9,-917 1973.67,-917 1973.67,-917 1973.67,-917 1973.67,-830.2 1973.67,-830.2"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1977.17,-830.2 1973.67,-820.2 1970.17,-830.2 1977.17,-830.2"/>
<text text-anchor="middle" x="1971.67" y="-823" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1415.22" y="-919.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- ReadingProgress -->
<g id="node12" class="node">
<title>ReadingProgress</title>
<path fill="#e8e8e8" stroke="transparent" d="M816,-4C816,-4 1147,-4 1147,-4 1153,-4 1159,-10 1159,-16 1159,-16 1159,-200 1159,-200 1159,-206 1153,-212 1147,-212 1147,-212 816,-212 816,-212 810,-212 804,-206 804,-200 804,-200 804,-16 804,-16 804,-10 810,-4 816,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="805.5,-189 805.5,-211 1158.5,-211 1158.5,-189 805.5,-189"/>
<text text-anchor="start" x="936" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">ReadingProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-179 805.5,-189 1158.5,-189 1158.5,-179 805.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-157 805.5,-179 1158.5,-179 1158.5,-157 805.5,-157"/>
<text text-anchor="start" x="810.5" y="-165.2" font-family="Arial" font-size="11.00">&#45; progressId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-135 805.5,-157 1158.5,-157 1158.5,-135 805.5,-135"/>
<text text-anchor="start" x="810.5" y="-143.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-113 805.5,-135 1158.5,-135 1158.5,-113 805.5,-113"/>
<text text-anchor="start" x="810.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-91 805.5,-113 1158.5,-113 1158.5,-91 805.5,-91"/>
<text text-anchor="start" x="810.5" y="-99.2" font-family="Arial" font-size="11.00">+ currentPage : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-69 805.5,-91 1158.5,-91 1158.5,-69 805.5,-69"/>
<text text-anchor="start" x="810.5" y="-77.2" font-family="Arial" font-size="11.00">+ totalPages : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-59 805.5,-69 1158.5,-69 1158.5,-59 805.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-49 805.5,-59 1158.5,-59 1158.5,-49 805.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-27 805.5,-49 1158.5,-49 1158.5,-27 805.5,-27"/>
<text text-anchor="start" x="810.5" y="-35.2" font-family="Arial" font-size="11.00">+ ReadingProgress(readerId: String, bookId: String) : ReadingProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-5 805.5,-27 1158.5,-27 1158.5,-5 805.5,-5"/>
<text text-anchor="start" x="810.5" y="-13.2" font-family="Arial" font-size="11.00">+ updateProgress(page: int) : void</text>
<polygon fill="black" stroke="black" points="804.5,-189 804.5,-189 1159.5,-189 1159.5,-189 804.5,-189"/>
<polygon fill="black" stroke="black" points="804.5,-59 804.5,-59 1159.5,-59 1159.5,-59 804.5,-59"/>
<path fill="none" stroke="black" d="M816,-4C816,-4 1147,-4 1147,-4 1153,-4 1159,-10 1159,-16 1159,-16 1159,-200 1159,-200 1159,-206 1153,-212 1147,-212 1147,-212 816,-212 816,-212 810,-212 804,-206 804,-200 804,-200 804,-16 804,-16 804,-10 810,-4 816,-4"/>
</g>
<!-- Reader&#45;&gt;ReadingProgress -->
<g id="edge12" class="edge">
<title>Reader&#45;&gt;ReadingProgress</title>
<path fill="none" stroke="#4a4a4a" d="M1136.89,-985C1060.7,-985 981.25,-985 981.25,-985 981.25,-985 981.25,-226.42 981.25,-226.42"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="984.75,-226.42 981.25,-216.42 977.75,-226.42 984.75,-226.42"/>
<text text-anchor="middle" x="979.25" y="-219.22" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1133.89" y="-987.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Analytics -->
<g id="node13" class="node">
<title>Analytics</title>
<path fill="#e8e8e8" stroke="transparent" d="M1089.5,-608C1089.5,-608 1263.5,-608 1263.5,-608 1269.5,-608 1275.5,-614 1275.5,-620 1275.5,-620 1275.5,-804 1275.5,-804 1275.5,-810 1269.5,-816 1263.5,-816 1263.5,-816 1089.5,-816 1089.5,-816 1083.5,-816 1077.5,-810 1077.5,-804 1077.5,-804 1077.5,-620 1077.5,-620 1077.5,-614 1083.5,-608 1089.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1078.5,-793 1078.5,-815 1274.5,-815 1274.5,-793 1078.5,-793"/>
<text text-anchor="start" x="1152" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Analytics</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-783 1078.5,-793 1274.5,-793 1274.5,-783 1078.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-761 1078.5,-783 1274.5,-783 1274.5,-761 1078.5,-761"/>
<text text-anchor="start" x="1083.5" y="-769.2" font-family="Arial" font-size="11.00">&#45; analyticsId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-739 1078.5,-761 1274.5,-761 1274.5,-739 1078.5,-739"/>
<text text-anchor="start" x="1083.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-717 1078.5,-739 1274.5,-739 1274.5,-717 1078.5,-717"/>
<text text-anchor="start" x="1083.5" y="-725.2" font-family="Arial" font-size="11.00">+ totalBooksRead : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-695 1078.5,-717 1274.5,-717 1274.5,-695 1078.5,-695"/>
<text text-anchor="start" x="1083.5" y="-703.2" font-family="Arial" font-size="11.00">+ averageRating : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-673 1078.5,-695 1274.5,-695 1274.5,-673 1078.5,-673"/>
<text text-anchor="start" x="1083.5" y="-681.2" font-family="Arial" font-size="11.00">+ readingTime : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-663 1078.5,-673 1274.5,-673 1274.5,-663 1078.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-653 1078.5,-663 1274.5,-663 1274.5,-653 1078.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-631 1078.5,-653 1274.5,-653 1274.5,-631 1078.5,-631"/>
<text text-anchor="start" x="1083.5" y="-639.2" font-family="Arial" font-size="11.00">+ Analytics(readerId: String) : Analytics</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-609 1078.5,-631 1274.5,-631 1274.5,-609 1078.5,-609"/>
<text text-anchor="start" x="1083.5" y="-617.2" font-family="Arial" font-size="11.00">+ generateReport() : String</text>
<polygon fill="black" stroke="black" points="1077.5,-793 1077.5,-793 1275.5,-793 1275.5,-793 1077.5,-793"/>
<polygon fill="black" stroke="black" points="1077.5,-663 1077.5,-663 1275.5,-663 1275.5,-663 1077.5,-663"/>
<path fill="none" stroke="black" d="M1089.5,-608C1089.5,-608 1263.5,-608 1263.5,-608 1269.5,-608 1275.5,-614 1275.5,-620 1275.5,-620 1275.5,-804 1275.5,-804 1275.5,-810 1269.5,-816 1263.5,-816 1263.5,-816 1089.5,-816 1089.5,-816 1083.5,-816 1077.5,-810 1077.5,-804 1077.5,-804 1077.5,-620 1077.5,-620 1077.5,-614 1083.5,-608 1089.5,-608"/>
</g>
<!-- Reader&#45;&gt;Analytics -->
<g id="edge14" class="edge">
<title>Reader&#45;&gt;Analytics</title>
<path fill="none" stroke="#4a4a4a" d="M1210.25,-905.78C1210.25,-905.78 1210.25,-830.11 1210.25,-830.11"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1213.75,-830.11 1210.25,-820.11 1206.75,-830.11 1213.75,-830.11"/>
<text text-anchor="middle" x="1207.25" y="-822.91" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="1207.25" y="-898.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Subscription -->
<g id="node14" class="node">
<title>Subscription</title>
<path fill="#e8e8e8" stroke="transparent" d="M1479.5,-608C1479.5,-608 1771.5,-608 1771.5,-608 1777.5,-608 1783.5,-614 1783.5,-620 1783.5,-620 1783.5,-804 1783.5,-804 1783.5,-810 1777.5,-816 1771.5,-816 1771.5,-816 1479.5,-816 1479.5,-816 1473.5,-816 1467.5,-810 1467.5,-804 1467.5,-804 1467.5,-620 1467.5,-620 1467.5,-614 1473.5,-608 1479.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1468.5,-793 1468.5,-815 1782.5,-815 1782.5,-793 1468.5,-793"/>
<text text-anchor="start" x="1591.5" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Subscription</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-783 1468.5,-793 1782.5,-793 1782.5,-783 1468.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-761 1468.5,-783 1782.5,-783 1782.5,-761 1468.5,-761"/>
<text text-anchor="start" x="1473.5" y="-769.2" font-family="Arial" font-size="11.00">&#45; subscriptionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-739 1468.5,-761 1782.5,-761 1782.5,-739 1468.5,-739"/>
<text text-anchor="start" x="1473.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-717 1468.5,-739 1782.5,-739 1782.5,-717 1468.5,-717"/>
<text text-anchor="start" x="1473.5" y="-725.2" font-family="Arial" font-size="11.00">+ planType : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-695 1468.5,-717 1782.5,-717 1782.5,-695 1468.5,-695"/>
<text text-anchor="start" x="1473.5" y="-703.2" font-family="Arial" font-size="11.00">+ monthlyFee : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-673 1468.5,-695 1782.5,-695 1782.5,-673 1468.5,-673"/>
<text text-anchor="start" x="1473.5" y="-681.2" font-family="Arial" font-size="11.00">+ accessLevel : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-663 1468.5,-673 1782.5,-673 1782.5,-663 1468.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-653 1468.5,-663 1782.5,-663 1782.5,-653 1468.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-631 1468.5,-653 1782.5,-653 1782.5,-631 1468.5,-631"/>
<text text-anchor="start" x="1473.5" y="-639.2" font-family="Arial" font-size="11.00">+ Subscription(readerId: String, planType: String) : Subscription</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-609 1468.5,-631 1782.5,-631 1782.5,-609 1468.5,-609"/>
<text text-anchor="start" x="1473.5" y="-617.2" font-family="Arial" font-size="11.00">+ upgradeAccess(newLevel: String) : void</text>
<polygon fill="black" stroke="black" points="1467.5,-793 1467.5,-793 1783.5,-793 1783.5,-793 1467.5,-793"/>
<polygon fill="black" stroke="black" points="1467.5,-663 1467.5,-663 1783.5,-663 1783.5,-663 1467.5,-663"/>
<path fill="none" stroke="black" d="M1479.5,-608C1479.5,-608 1771.5,-608 1771.5,-608 1777.5,-608 1783.5,-614 1783.5,-620 1783.5,-620 1783.5,-804 1783.5,-804 1783.5,-810 1777.5,-816 1771.5,-816 1771.5,-816 1479.5,-816 1479.5,-816 1473.5,-816 1467.5,-810 1467.5,-804 1467.5,-804 1467.5,-620 1467.5,-620 1467.5,-614 1473.5,-608 1479.5,-608"/>
</g>
<!-- Reader&#45;&gt;Subscription -->
<g id="edge15" class="edge">
<title>Reader&#45;&gt;Subscription</title>
<path fill="none" stroke="#4a4a4a" d="M1369.17,-905.78C1369.17,-817.32 1369.17,-712 1369.17,-712 1369.17,-712 1449.18,-712 1449.18,-712"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1449.18,-715.5 1459.18,-712 1449.18,-708.5 1449.18,-715.5"/>
<text text-anchor="middle" x="1456.18" y="-714.8" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="1366.17" y="-898.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook -->
<g id="node3" class="node">
<title>DigitalBook</title>
<path fill="#e8e8e8" stroke="transparent" d="M638,-306C638,-306 873,-306 873,-306 879,-306 885,-312 885,-318 885,-318 885,-502 885,-502 885,-508 879,-514 873,-514 873,-514 638,-514 638,-514 632,-514 626,-508 626,-502 626,-502 626,-318 626,-318 626,-312 632,-306 638,-306"/>
<polygon fill="#bebebe" stroke="transparent" points="627.5,-491 627.5,-513 884.5,-513 884.5,-491 627.5,-491"/>
<text text-anchor="start" x="725" y="-500.2" font-family="Arial" font-weight="bold" font-size="11.00">DigitalBook</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-481 627.5,-491 884.5,-491 884.5,-481 627.5,-481"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-459 627.5,-481 884.5,-481 884.5,-459 627.5,-459"/>
<text text-anchor="start" x="632.5" y="-467.2" font-family="Arial" font-size="11.00">&#45; bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-437 627.5,-459 884.5,-459 884.5,-437 627.5,-437"/>
<text text-anchor="start" x="632.5" y="-445.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-415 627.5,-437 884.5,-437 884.5,-415 627.5,-415"/>
<text text-anchor="start" x="632.5" y="-423.2" font-family="Arial" font-size="11.00">+ isbn : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-393 627.5,-415 884.5,-415 884.5,-393 627.5,-393"/>
<text text-anchor="start" x="632.5" y="-401.2" font-family="Arial" font-size="11.00">+ fileFormat : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-371 627.5,-393 884.5,-393 884.5,-371 627.5,-371"/>
<text text-anchor="start" x="632.5" y="-379.2" font-family="Arial" font-size="11.00">+ fileSize : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-361 627.5,-371 884.5,-371 884.5,-361 627.5,-361"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-351 627.5,-361 884.5,-361 884.5,-351 627.5,-351"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-329 627.5,-351 884.5,-351 884.5,-329 627.5,-329"/>
<text text-anchor="start" x="632.5" y="-337.2" font-family="Arial" font-size="11.00">+ DigitalBook(title: String, isbn: String) : DigitalBook</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-307 627.5,-329 884.5,-329 884.5,-307 627.5,-307"/>
<text text-anchor="start" x="632.5" y="-315.2" font-family="Arial" font-size="11.00">+ download(readerId: String) : String</text>
<polygon fill="black" stroke="black" points="626.5,-491 626.5,-491 885.5,-491 885.5,-491 626.5,-491"/>
<polygon fill="black" stroke="black" points="626.5,-361 626.5,-361 885.5,-361 885.5,-361 626.5,-361"/>
<path fill="none" stroke="black" d="M638,-306C638,-306 873,-306 873,-306 879,-306 885,-312 885,-318 885,-318 885,-502 885,-502 885,-508 879,-514 873,-514 873,-514 638,-514 638,-514 632,-514 626,-508 626,-502 626,-502 626,-318 626,-318 626,-312 632,-306 638,-306"/>
</g>
<!-- BorrowRecord&#45;&gt;DigitalBook -->
<g id="edge2" class="edge">
<title>BorrowRecord&#45;&gt;DigitalBook</title>
<path fill="none" stroke="#4a4a4a" d="M587.5,-603.81C587.5,-556.68 587.5,-512 587.5,-512 587.5,-512 607.92,-512 607.92,-512"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="607.92,-515.5 617.92,-512 607.92,-508.5 607.92,-515.5"/>
<text text-anchor="middle" x="614.92" y="-514.8" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="585.5" y="-596.61" font-family="Arial" font-size="9.00">*</text>
</g>
<!-- BookCollection -->
<g id="node6" class="node">
<title>BookCollection</title>
<path fill="#e8e8e8" stroke="transparent" d="M20,-4C20,-4 339,-4 339,-4 345,-4 351,-10 351,-16 351,-16 351,-200 351,-200 351,-206 345,-212 339,-212 339,-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 350.5,-211 350.5,-189 9.5,-189"/>
<text text-anchor="start" x="139" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">BookCollection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-179 9.5,-189 350.5,-189 350.5,-179 9.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-157 9.5,-179 350.5,-179 350.5,-157 9.5,-157"/>
<text text-anchor="start" x="14.5" y="-165.2" font-family="Arial" font-size="11.00">&#45; relationId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-135 9.5,-157 350.5,-157 350.5,-135 9.5,-135"/>
<text text-anchor="start" x="14.5" y="-143.2" font-family="Arial" font-size="11.00">+ collectionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-113 9.5,-135 350.5,-135 350.5,-113 9.5,-113"/>
<text text-anchor="start" x="14.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-91 9.5,-113 350.5,-113 350.5,-91 9.5,-91"/>
<text text-anchor="start" x="14.5" y="-99.2" font-family="Arial" font-size="11.00">+ addedDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-69 9.5,-91 350.5,-91 350.5,-69 9.5,-69"/>
<text text-anchor="start" x="14.5" y="-77.2" font-family="Arial" font-size="11.00">+ priority : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-59 9.5,-69 350.5,-69 350.5,-59 9.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-49 9.5,-59 350.5,-59 350.5,-49 9.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-27 9.5,-49 350.5,-49 350.5,-27 9.5,-27"/>
<text text-anchor="start" x="14.5" y="-35.2" font-family="Arial" font-size="11.00">+ BookCollection(collectionId: String, bookId: String) : BookCollection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-5 9.5,-27 350.5,-27 350.5,-5 9.5,-5"/>
<text text-anchor="start" x="14.5" y="-13.2" font-family="Arial" font-size="11.00">+ setPriority(priority: int) : void</text>
<polygon fill="black" stroke="black" points="8.5,-189 8.5,-189 351.5,-189 351.5,-189 8.5,-189"/>
<polygon fill="black" stroke="black" points="8.5,-59 8.5,-59 351.5,-59 351.5,-59 8.5,-59"/>
<path fill="none" stroke="black" d="M20,-4C20,-4 339,-4 339,-4 345,-4 351,-10 351,-16 351,-16 351,-200 351,-200 351,-206 345,-212 339,-212 339,-212 20,-212 20,-212 14,-212 8,-206 8,-200 8,-200 8,-16 8,-16 8,-10 14,-4 20,-4"/>
</g>
<!-- DigitalBook&#45;&gt;BookCollection -->
<g id="edge5" class="edge">
<title>DigitalBook&#45;&gt;BookCollection</title>
<path fill="none" stroke="#4a4a4a" d="M617.85,-307C501.03,-307 352.25,-307 352.25,-307 352.25,-307 352.25,-226.24 352.25,-226.24"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="355.75,-226.24 352.25,-216.24 348.75,-226.24 355.75,-226.24"/>
<text text-anchor="middle" x="350.25" y="-219.04" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="614.85" y="-309.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- SearchResult -->
<g id="node8" class="node">
<title>SearchResult</title>
<path fill="#e8e8e8" stroke="transparent" d="M437.5,-4C437.5,-4 717.5,-4 717.5,-4 723.5,-4 729.5,-10 729.5,-16 729.5,-16 729.5,-200 729.5,-200 729.5,-206 723.5,-212 717.5,-212 717.5,-212 437.5,-212 437.5,-212 431.5,-212 425.5,-206 425.5,-200 425.5,-200 425.5,-16 425.5,-16 425.5,-10 431.5,-4 437.5,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="426.5,-189 426.5,-211 728.5,-211 728.5,-189 426.5,-189"/>
<text text-anchor="start" x="542" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">SearchResult</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-179 426.5,-189 728.5,-189 728.5,-179 426.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-157 426.5,-179 728.5,-179 728.5,-157 426.5,-157"/>
<text text-anchor="start" x="431.5" y="-165.2" font-family="Arial" font-size="11.00">&#45; resultId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-135 426.5,-157 728.5,-157 728.5,-135 426.5,-135"/>
<text text-anchor="start" x="431.5" y="-143.2" font-family="Arial" font-size="11.00">+ query : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-113 426.5,-135 728.5,-135 728.5,-113 426.5,-113"/>
<text text-anchor="start" x="431.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-91 426.5,-113 728.5,-113 728.5,-91 426.5,-91"/>
<text text-anchor="start" x="431.5" y="-99.2" font-family="Arial" font-size="11.00">+ relevanceScore : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-69 426.5,-91 728.5,-91 728.5,-69 426.5,-69"/>
<text text-anchor="start" x="431.5" y="-77.2" font-family="Arial" font-size="11.00">+ timestamp : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-59 426.5,-69 728.5,-69 728.5,-59 426.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-49 426.5,-59 728.5,-59 728.5,-49 426.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-27 426.5,-49 728.5,-49 728.5,-27 426.5,-27"/>
<text text-anchor="start" x="431.5" y="-35.2" font-family="Arial" font-size="11.00">+ SearchResult(query: String, bookId: String) : SearchResult</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-5 426.5,-27 728.5,-27 728.5,-5 426.5,-5"/>
<text text-anchor="start" x="431.5" y="-13.2" font-family="Arial" font-size="11.00">+ calculateRelevance() : double</text>
<polygon fill="black" stroke="black" points="425.5,-189 425.5,-189 729.5,-189 729.5,-189 425.5,-189"/>
<polygon fill="black" stroke="black" points="425.5,-59 425.5,-59 729.5,-59 729.5,-59 425.5,-59"/>
<path fill="none" stroke="black" d="M437.5,-4C437.5,-4 717.5,-4 717.5,-4 723.5,-4 729.5,-10 729.5,-16 729.5,-16 729.5,-200 729.5,-200 729.5,-206 723.5,-212 717.5,-212 717.5,-212 437.5,-212 437.5,-212 431.5,-212 425.5,-206 425.5,-200 425.5,-200 425.5,-16 425.5,-16 425.5,-10 431.5,-4 437.5,-4"/>
</g>
<!-- DigitalBook&#45;&gt;SearchResult -->
<g id="edge7" class="edge">
<title>DigitalBook&#45;&gt;SearchResult</title>
<path fill="none" stroke="#4a4a4a" d="M677.75,-301.82C677.75,-301.82 677.75,-226.18 677.75,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="681.25,-226.18 677.75,-216.18 674.25,-226.18 681.25,-226.18"/>
<text text-anchor="middle" x="675.75" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="674.75" y="-294.62" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook&#45;&gt;Review -->
<g id="edge9" class="edge">
<title>DigitalBook&#45;&gt;Review</title>
<path fill="none" stroke="#4a4a4a" d="M893.13,-410C1041.52,-410 1256.75,-410 1256.75,-410 1256.75,-410 1256.75,-226.18 1256.75,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1260.25,-226.18 1256.75,-216.18 1253.25,-226.18 1260.25,-226.18"/>
<text text-anchor="middle" x="1254.75" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="896.13" y="-412.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook&#45;&gt;ReadingProgress -->
<g id="edge13" class="edge">
<title>DigitalBook&#45;&gt;ReadingProgress</title>
<path fill="none" stroke="#4a4a4a" d="M844.5,-301.82C844.5,-301.82 844.5,-226.18 844.5,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="848,-226.18 844.5,-216.18 841,-226.18 848,-226.18"/>
<text text-anchor="middle" x="842.5" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="841.5" y="-294.62" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Author -->
<g id="node4" class="node">
<title>Author</title>
<path fill="#e8e8e8" stroke="transparent" d="M694,-619C694,-619 873,-619 873,-619 879,-619 885,-625 885,-631 885,-631 885,-793 885,-793 885,-799 879,-805 873,-805 873,-805 694,-805 694,-805 688,-805 682,-799 682,-793 682,-793 682,-631 682,-631 682,-625 688,-619 694,-619"/>
<polygon fill="#bebebe" stroke="transparent" points="683.5,-782 683.5,-804 884.5,-804 884.5,-782 683.5,-782"/>
<text text-anchor="start" x="765.5" y="-791.2" font-family="Arial" font-weight="bold" font-size="11.00">Author</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-772 683.5,-782 884.5,-782 884.5,-772 683.5,-772"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-750 683.5,-772 884.5,-772 884.5,-750 683.5,-750"/>
<text text-anchor="start" x="688.5" y="-758.2" font-family="Arial" font-size="11.00">&#45; authorId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-728 683.5,-750 884.5,-750 884.5,-728 683.5,-728"/>
<text text-anchor="start" x="688.5" y="-736.2" font-family="Arial" font-size="11.00">+ name : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-706 683.5,-728 884.5,-728 884.5,-706 683.5,-706"/>
<text text-anchor="start" x="688.5" y="-714.2" font-family="Arial" font-size="11.00">+ biography : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-684 683.5,-706 884.5,-706 884.5,-684 683.5,-684"/>
<text text-anchor="start" x="688.5" y="-692.2" font-family="Arial" font-size="11.00">+ nationality : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-674 683.5,-684 884.5,-684 884.5,-674 683.5,-674"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-664 683.5,-674 884.5,-674 884.5,-664 683.5,-664"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-642 683.5,-664 884.5,-664 884.5,-642 683.5,-642"/>
<text text-anchor="start" x="688.5" y="-650.2" font-family="Arial" font-size="11.00">+ Author(name: String) : Author</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-620 683.5,-642 884.5,-642 884.5,-620 683.5,-620"/>
<text text-anchor="start" x="688.5" y="-628.2" font-family="Arial" font-size="11.00">+ publishBook(title: String) : DigitalBook</text>
<polygon fill="black" stroke="black" points="682.5,-782 682.5,-782 885.5,-782 885.5,-782 682.5,-782"/>
<polygon fill="black" stroke="black" points="682.5,-674 682.5,-674 885.5,-674 885.5,-674 682.5,-674"/>
<path fill="none" stroke="black" d="M694,-619C694,-619 873,-619 873,-619 879,-619 885,-625 885,-631 885,-631 885,-793 885,-793 885,-799 879,-805 873,-805 873,-805 694,-805 694,-805 688,-805 682,-799 682,-793 682,-793 682,-631 682,-631 682,-625 688,-619 694,-619"/>
</g>
<!-- Author&#45;&gt;DigitalBook -->
<g id="edge3" class="edge">
<title>Author&#45;&gt;DigitalBook</title>
<path fill="none" stroke="#4a4a4a" d="M783.5,-614.78C783.5,-614.78 783.5,-528.03 783.5,-528.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="787,-528.03 783.5,-518.03 780,-528.03 787,-528.03"/>
<text text-anchor="middle" x="781.5" y="-520.83" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="780.5" y="-607.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Collection -->
<g id="node5" class="node">
<title>Collection</title>
<path fill="#e8e8e8" stroke="transparent" d="M94,-306C94,-306 265,-306 265,-306 271,-306 277,-312 277,-318 277,-318 277,-502 277,-502 277,-508 271,-514 265,-514 265,-514 94,-514 94,-514 88,-514 82,-508 82,-502 82,-502 82,-318 82,-318 82,-312 88,-306 94,-306"/>
<polygon fill="#bebebe" stroke="transparent" points="83.5,-491 83.5,-513 276.5,-513 276.5,-491 83.5,-491"/>
<text text-anchor="start" x="153" y="-500.2" font-family="Arial" font-weight="bold" font-size="11.00">Collection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-481 83.5,-491 276.5,-491 276.5,-481 83.5,-481"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-459 83.5,-481 276.5,-481 276.5,-459 83.5,-459"/>
<text text-anchor="start" x="88.5" y="-467.2" font-family="Arial" font-size="11.00">&#45; collectionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-437 83.5,-459 276.5,-459 276.5,-437 83.5,-437"/>
<text text-anchor="start" x="88.5" y="-445.2" font-family="Arial" font-size="11.00">+ name : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-415 83.5,-437 276.5,-437 276.5,-415 83.5,-415"/>
<text text-anchor="start" x="88.5" y="-423.2" font-family="Arial" font-size="11.00">+ description : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-393 83.5,-415 276.5,-415 276.5,-393 83.5,-393"/>
<text text-anchor="start" x="88.5" y="-401.2" font-family="Arial" font-size="11.00">+ theme : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-371 83.5,-393 276.5,-393 276.5,-371 83.5,-371"/>
<text text-anchor="start" x="88.5" y="-379.2" font-family="Arial" font-size="11.00">+ isPublic : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-361 83.5,-371 276.5,-371 276.5,-361 83.5,-361"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-351 83.5,-361 276.5,-361 276.5,-351 83.5,-351"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-329 83.5,-351 276.5,-351 276.5,-329 83.5,-329"/>
<text text-anchor="start" x="88.5" y="-337.2" font-family="Arial" font-size="11.00">+ Collection(name: String) : Collection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-307 83.5,-329 276.5,-329 276.5,-307 83.5,-307"/>
<text text-anchor="start" x="88.5" y="-315.2" font-family="Arial" font-size="11.00">+ addBook(bookId: String) : void</text>
<polygon fill="black" stroke="black" points="82.5,-491 82.5,-491 277.5,-491 277.5,-491 82.5,-491"/>
<polygon fill="black" stroke="black" points="82.5,-361 82.5,-361 277.5,-361 277.5,-361 82.5,-361"/>
<path fill="none" stroke="black" d="M94,-306C94,-306 265,-306 265,-306 271,-306 277,-312 277,-318 277,-318 277,-502 277,-502 277,-508 271,-514 265,-514 265,-514 94,-514 94,-514 88,-514 82,-508 82,-502 82,-502 82,-318 82,-318 82,-312 88,-306 94,-306"/>
</g>
<!-- Collection&#45;&gt;BookCollection -->
<g id="edge4" class="edge">
<title>Collection&#45;&gt;BookCollection</title>
<path fill="none" stroke="#4a4a4a" d="M179.5,-289.82C179.5,-289.82 179.5,-226.18 179.5,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="179.5,-228.18 175.5,-222.18 179.5,-216.18 183.5,-222.18 179.5,-228.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="176,-291.82 179.5,-301.82 183,-291.82 176,-291.82"/>
<text text-anchor="middle" x="177.5" y="-294.62" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="176.5" y="-218.98" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- SearchEngine -->
<g id="node7" class="node">
<title>SearchEngine</title>
<path fill="#e8e8e8" stroke="transparent" d="M365.5,-317C365.5,-317 539.5,-317 539.5,-317 545.5,-317 551.5,-323 551.5,-329 551.5,-329 551.5,-491 551.5,-491 551.5,-497 545.5,-503 539.5,-503 539.5,-503 365.5,-503 365.5,-503 359.5,-503 353.5,-497 353.5,-491 353.5,-491 353.5,-329 353.5,-329 353.5,-323 359.5,-317 365.5,-317"/>
<polygon fill="#bebebe" stroke="transparent" points="354.5,-480 354.5,-502 550.5,-502 550.5,-480 354.5,-480"/>
<text text-anchor="start" x="415.5" y="-489.2" font-family="Arial" font-weight="bold" font-size="11.00">SearchEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-470 354.5,-480 550.5,-480 550.5,-470 354.5,-470"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-448 354.5,-470 550.5,-470 550.5,-448 354.5,-448"/>
<text text-anchor="start" x="359.5" y="-456.2" font-family="Arial" font-size="11.00">&#45; engineId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-426 354.5,-448 550.5,-448 550.5,-426 354.5,-426"/>
<text text-anchor="start" x="359.5" y="-434.2" font-family="Arial" font-size="11.00">+ indexSize : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-404 354.5,-426 550.5,-426 550.5,-404 354.5,-404"/>
<text text-anchor="start" x="359.5" y="-412.2" font-family="Arial" font-size="11.00">+ lastUpdated : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-382 354.5,-404 550.5,-404 550.5,-382 354.5,-382"/>
<text text-anchor="start" x="359.5" y="-390.2" font-family="Arial" font-size="11.00">+ isOnline : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-372 354.5,-382 550.5,-382 550.5,-372 354.5,-372"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-362 354.5,-372 550.5,-372 550.5,-362 354.5,-362"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-340 354.5,-362 550.5,-362 550.5,-340 354.5,-340"/>
<text text-anchor="start" x="359.5" y="-348.2" font-family="Arial" font-size="11.00">+ SearchEngine() : SearchEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-318 354.5,-340 550.5,-340 550.5,-318 354.5,-318"/>
<text text-anchor="start" x="359.5" y="-326.2" font-family="Arial" font-size="11.00">+ search(query: String) : SearchResult</text>
<polygon fill="black" stroke="black" points="353.5,-480 353.5,-480 551.5,-480 551.5,-480 353.5,-480"/>
<polygon fill="black" stroke="black" points="353.5,-372 353.5,-372 551.5,-372 551.5,-372 353.5,-372"/>
<path fill="none" stroke="black" d="M365.5,-317C365.5,-317 539.5,-317 539.5,-317 545.5,-317 551.5,-323 551.5,-329 551.5,-329 551.5,-491 551.5,-491 551.5,-497 545.5,-503 539.5,-503 539.5,-503 365.5,-503 365.5,-503 359.5,-503 353.5,-497 353.5,-491 353.5,-491 353.5,-329 353.5,-329 353.5,-323 359.5,-317 365.5,-317"/>
</g>
<!-- SearchEngine&#45;&gt;SearchResult -->
<g id="edge6" class="edge">
<title>SearchEngine&#45;&gt;SearchResult</title>
<path fill="none" stroke="#4a4a4a" d="M488.5,-312.78C488.5,-312.78 488.5,-226.03 488.5,-226.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="492,-226.03 488.5,-216.03 485,-226.03 492,-226.03"/>
<text text-anchor="middle" x="486.5" y="-218.83" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="485.5" y="-305.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- RecommendationEngine -->
<g id="node11" class="node">
<title>RecommendationEngine</title>
<path fill="#e8e8e8" stroke="transparent" d="M1870,-932C1870,-932 2201,-932 2201,-932 2207,-932 2213,-938 2213,-944 2213,-944 2213,-1106 2213,-1106 2213,-1112 2207,-1118 2201,-1118 2201,-1118 1870,-1118 1870,-1118 1864,-1118 1858,-1112 1858,-1106 1858,-1106 1858,-944 1858,-944 1858,-938 1864,-932 1870,-932"/>
<polygon fill="#bebebe" stroke="transparent" points="1859.5,-1095 1859.5,-1117 2212.5,-1117 2212.5,-1095 1859.5,-1095"/>
<text text-anchor="start" x="1971" y="-1104.2" font-family="Arial" font-weight="bold" font-size="11.00">RecommendationEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1085 1859.5,-1095 2212.5,-1095 2212.5,-1085 1859.5,-1085"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1063 1859.5,-1085 2212.5,-1085 2212.5,-1063 1859.5,-1063"/>
<text text-anchor="start" x="1864.5" y="-1071.2" font-family="Arial" font-size="11.00">&#45; engineId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1041 1859.5,-1063 2212.5,-1063 2212.5,-1041 1859.5,-1041"/>
<text text-anchor="start" x="1864.5" y="-1049.2" font-family="Arial" font-size="11.00">+ algorithm : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1019 1859.5,-1041 2212.5,-1041 2212.5,-1019 1859.5,-1019"/>
<text text-anchor="start" x="1864.5" y="-1027.2" font-family="Arial" font-size="11.00">+ accuracy : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-997 1859.5,-1019 2212.5,-1019 2212.5,-997 1859.5,-997"/>
<text text-anchor="start" x="1864.5" y="-1005.2" font-family="Arial" font-size="11.00">+ isActive : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-987 1859.5,-997 2212.5,-997 2212.5,-987 1859.5,-987"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-977 1859.5,-987 2212.5,-987 2212.5,-977 1859.5,-977"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-955 1859.5,-977 2212.5,-977 2212.5,-955 1859.5,-955"/>
<text text-anchor="start" x="1864.5" y="-963.2" font-family="Arial" font-size="11.00">+ RecommendationEngine(algorithm: String) : RecommendationEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-933 1859.5,-955 2212.5,-955 2212.5,-933 1859.5,-933"/>
<text text-anchor="start" x="1864.5" y="-941.2" font-family="Arial" font-size="11.00">+ generateRecommendations(readerId: String) : Recommendation</text>
<polygon fill="black" stroke="black" points="1858.5,-1095 1858.5,-1095 2213.5,-1095 2213.5,-1095 1858.5,-1095"/>
<polygon fill="black" stroke="black" points="1858.5,-987 1858.5,-987 2213.5,-987 2213.5,-987 1858.5,-987"/>
<path fill="none" stroke="black" d="M1870,-932C1870,-932 2201,-932 2201,-932 2207,-932 2213,-938 2213,-944 2213,-944 2213,-1106 2213,-1106 2213,-1112 2207,-1118 2201,-1118 2201,-1118 1870,-1118 1870,-1118 1864,-1118 1858,-1112 1858,-1106 1858,-1106 1858,-944 1858,-944 1858,-938 1864,-932 1870,-932"/>
</g>
<!-- RecommendationEngine&#45;&gt;Recommendation -->
<g id="edge10" class="edge">
<title>RecommendationEngine&#45;&gt;Recommendation</title>
<path fill="none" stroke="#4a4a4a" d="M2097.33,-927.68C2097.33,-927.68 2097.33,-830.16 2097.33,-830.16"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="2100.83,-830.16 2097.33,-820.16 2093.83,-830.16 2100.83,-830.16"/>
<text text-anchor="middle" x="2095.33" y="-822.96" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="2094.33" y="-920.48" font-family="Arial" font-size="9.00">1</text>
</g>
</g>
</svg>