1 Commits

Author SHA1 Message Date
0a5e98f417 Added a uml diagram. 2025-02-18 18:03:34 +01:00
7 changed files with 917 additions and 98 deletions

917
design/design.gaphor Normal file
View File

@@ -0,0 +1,917 @@
<?xml version="1.0" encoding="utf-8"?>
<gaphor xmlns="https://gaphor.org/model" xmlns:Core="https://gaphor.org/modelinglanguage/Core" xmlns:UML="https://gaphor.org/modelinglanguage/UML" version="4" gaphor-version="3.0.0">
<model>
<Core:StyleSheet id="58d6989a-66f8-11ec-b4c8-0456e5e540ed">
<styleSheet>
<val>diagram {
/* line-style: sloppy 0.3; */
}
controlflow {
dash-style: 0;
}
</val>
</styleSheet>
</Core:StyleSheet>
<UML:Package id="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed">
<name>
<val>Model Name Here</val>
</name>
<nestedPackage>
<reflist>
<ref refid="a021290e-71b1-11ec-a409-f47b099bf663"/>
<ref refid="c254a76c-71b1-11ec-a409-f47b099bf663"/>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</reflist>
</nestedPackage>
<packagedElement>
<reflist>
<ref refid="a021290e-71b1-11ec-a409-f47b099bf663"/>
<ref refid="c254a76c-71b1-11ec-a409-f47b099bf663"/>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</reflist>
</packagedElement>
</UML:Package>
<UML:Package id="a021290e-71b1-11ec-a409-f47b099bf663">
<name>
<val>1. Use Cases</val>
</name>
<ownedDiagram>
<reflist>
<ref refid="0c81912e-71b2-11ec-a409-f47b099bf663"/>
<ref refid="3132c19a-71b3-11ec-a409-f47b099bf663"/>
</reflist>
</ownedDiagram>
<owningPackage>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</owningPackage>
<package>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</package>
</UML:Package>
<UML:Package id="c254a76c-71b1-11ec-a409-f47b099bf663">
<name>
<val>2. Domain Analysis</val>
</name>
<ownedDiagram>
<reflist>
<ref refid="06ecc092-71b4-11ec-a409-f47b099bf663"/>
</reflist>
</ownedDiagram>
<owningPackage>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</owningPackage>
<package>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</package>
</UML:Package>
<UML:Package id="cccf183a-71b1-11ec-a409-f47b099bf663">
<name>
<val>3. Architectural Design</val>
</name>
<ownedDiagram>
<reflist>
<ref refid="37edd9b4-71b5-11ec-a409-f47b099bf663"/>
<ref refid="ad3969b8-71b5-11ec-a409-f47b099bf663"/>
</reflist>
</ownedDiagram>
<ownedType>
<reflist>
<ref refid="b73251a0-71b5-11ec-a409-f47b099bf663"/>
</reflist>
</ownedType>
<owningPackage>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</owningPackage>
<package>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</package>
<packagedElement>
<reflist>
<ref refid="b73251a0-71b5-11ec-a409-f47b099bf663"/>
</reflist>
</packagedElement>
</UML:Package>
<UML:Package id="f3a82730-71b1-11ec-a409-f47b099bf663">
<name>
<val>4. Detailed Design</val>
</name>
<ownedDiagram>
<reflist>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
<ref refid="0b5ba60e-71b7-11ec-a409-f47b099bf663"/>
</reflist>
</ownedDiagram>
<ownedType>
<reflist>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
<ref refid="650af1b7-ee11-11ef-a839-89e86c884103"/>
<ref refid="79033e7b-ee11-11ef-bd6c-89e86c884103"/>
</reflist>
</ownedType>
<owningPackage>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</owningPackage>
<package>
<ref refid="58d6c2e8-66f8-11ec-b4c8-0456e5e540ed"/>
</package>
<packagedElement>
<reflist>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
<ref refid="650af1b7-ee11-11ef-a839-89e86c884103"/>
<ref refid="79033e7b-ee11-11ef-bd6c-89e86c884103"/>
</reflist>
</packagedElement>
</UML:Package>
<UML:UseCaseDiagram id="0c81912e-71b2-11ec-a409-f47b099bf663">
<element>
<ref refid="a021290e-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Use Cases</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="fe29995e-71b2-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:UseCaseDiagram>
<UML:Comment id="fe29884c-71b2-11ec-a409-f47b099bf663">
<body>
<val>Analyze functional requirements by
identifying user roles actors and
associating them to their use cases.</val>
</body>
<presentation>
<reflist>
<ref refid="fe29995e-71b2-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="fe29995e-71b2-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 93.76953125, 79.1953125)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>258.0</val>
</width>
<height>
<val>110.0</val>
</height>
<diagram>
<ref refid="0c81912e-71b2-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="fe29884c-71b2-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:ActivityDiagram id="3132c19a-71b3-11ec-a409-f47b099bf663">
<element>
<ref refid="a021290e-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Use Case Scenarios</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="7ff4998e-71b3-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:ActivityDiagram>
<UML:Comment id="7ff48ef8-71b3-11ec-a409-f47b099bf663">
<body>
<val>Model abstract use case implementation by creating activity diagrams visualizing activity flows for primary and secondary use case scenarios.</val>
</body>
<presentation>
<reflist>
<ref refid="7ff4998e-71b3-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="7ff4998e-71b3-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 58.0, 79.0)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>364.0</val>
</width>
<height>
<val>95.0</val>
</height>
<diagram>
<ref refid="3132c19a-71b3-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="7ff48ef8-71b3-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:ClassDiagram id="06ecc092-71b4-11ec-a409-f47b099bf663">
<element>
<ref refid="c254a76c-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Domain Entities</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="b2b559de-71b4-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:ClassDiagram>
<UML:Comment id="b2b54e26-71b4-11ec-a409-f47b099bf663">
<body>
<val>Perform domain analysis by modeling domain entities and their relationships using simplified class diagram. This diagram will serve as a visual dictionary of concepts. It will also be a starting point for your design-level data model.</val>
</body>
<presentation>
<reflist>
<ref refid="b2b559de-71b4-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="b2b559de-71b4-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 46.015625, 81.69921875)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>400.0</val>
</width>
<height>
<val>100.0</val>
</height>
<diagram>
<ref refid="06ecc092-71b4-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="b2b54e26-71b4-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:PackageDiagram id="37edd9b4-71b5-11ec-a409-f47b099bf663">
<element>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Package Dependencies</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="098cfa2c-71b6-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:PackageDiagram>
<UML:SequenceDiagram id="ad3969b8-71b5-11ec-a409-f47b099bf663">
<element>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Interactions</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="2d10bd3a-71b6-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:SequenceDiagram>
<UML:Interaction id="b73251a0-71b5-11ec-a409-f47b099bf663">
<name>
<val>Interaction</val>
</name>
<owningPackage>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="cccf183a-71b1-11ec-a409-f47b099bf663"/>
</package>
</UML:Interaction>
<UML:Comment id="098cef6e-71b6-11ec-a409-f47b099bf663">
<body>
<val>Prepare package dependencies diagram to group your implementation classes in appropriate way. This will help you maintain the code well structured and avoid design flaws such as cyclic dependencies or dependencies on unstable parts</val>
</body>
<presentation>
<reflist>
<ref refid="098cfa2c-71b6-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="098cfa2c-71b6-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 106.71484375, 51.49999999999997)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>271.5703125</val>
</width>
<height>
<val>144.0</val>
</height>
<diagram>
<ref refid="37edd9b4-71b5-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="098cef6e-71b6-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:Comment id="2d10b29a-71b6-11ec-a409-f47b099bf663">
<body>
<val>Model component interactions for use case scenarios in order to find out new methods in
existing classes or even new classes with specific responsibilities.</val>
</body>
<presentation>
<reflist>
<ref refid="2d10bd3a-71b6-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="2d10bd3a-71b6-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 43.0, 73.0)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>322.0</val>
</width>
<height>
<val>93.0</val>
</height>
<diagram>
<ref refid="ad3969b8-71b5-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="2d10b29a-71b6-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:ClassDiagram id="585f224c-71b6-11ec-a409-f47b099bf663">
<element>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Detailed Class Design</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="6e4703fe-71b6-11ec-a409-f47b099bf663"/>
<ref refid="5c2f3216-ee0f-11ef-918b-89e86c884103"/>
<ref refid="69505392-ee10-11ef-b744-89e86c884103"/>
<ref refid="650b3c91-ee11-11ef-b15a-89e86c884103"/>
<ref refid="7903854f-ee11-11ef-bbf6-89e86c884103"/>
<ref refid="bae1bc56-ee12-11ef-8a75-89e86c884103"/>
<ref refid="4b4d835f-ee11-11ef-a57a-89e86c884103"/>
<ref refid="8b31e95c-ee11-11ef-9bbf-89e86c884103"/>
<ref refid="9071eb00-ee11-11ef-a0be-89e86c884103"/>
</reflist>
</ownedPresentation>
</UML:ClassDiagram>
<UML:Comment id="6e46f7ba-71b6-11ec-a409-f47b099bf663">
<body>
<val>Create detailed class diagrams to capture your object-oriented data model.</val>
</body>
<presentation>
<reflist>
<ref refid="6e4703fe-71b6-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="6e4703fe-71b6-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 133.29296875, 17.285152435302734)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>215.0</val>
</width>
<height>
<val>76.0</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="6e46f7ba-71b6-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:ComponentDiagram id="0b5ba60e-71b7-11ec-a409-f47b099bf663">
<element>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</element>
<name>
<val>Implementation Architecture</val>
</name>
<ownedPresentation>
<reflist>
<ref refid="6203ccac-71b7-11ec-a409-f47b099bf663"/>
</reflist>
</ownedPresentation>
</UML:ComponentDiagram>
<UML:Comment id="6203b92e-71b7-11ec-a409-f47b099bf663">
<body>
<val>Define the major artifacts that manifest implementation of your components. Indicate how they are deployed on hardware nodes, their inter-dependencies and communication protocols.</val>
</body>
<presentation>
<reflist>
<ref refid="6203ccac-71b7-11ec-a409-f47b099bf663"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="6203ccac-71b7-11ec-a409-f47b099bf663">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, -7.59375, 75.08984375)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>271.0</val>
</width>
<height>
<val>129.0</val>
</height>
<diagram>
<ref refid="0b5ba60e-71b7-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="6203b92e-71b7-11ec-a409-f47b099bf663"/>
</subject>
</UML:CommentItem>
<UML:Class id="5c2ec633-ee0f-11ef-a8a3-89e86c884103">
<name>
<val>Recommender</val>
</name>
<ownedAttribute>
<reflist>
<ref refid="4c2876c8-ee11-11ef-a414-89e86c884103"/>
</reflist>
</ownedAttribute>
<ownedOperation>
<reflist>
<ref refid="b973fde1-ee0f-11ef-a571-89e86c884103"/>
<ref refid="3d78817a-ee10-11ef-b70f-89e86c884103"/>
</reflist>
</ownedOperation>
<owningPackage>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</package>
<presentation>
<reflist>
<ref refid="5c2f3216-ee0f-11ef-918b-89e86c884103"/>
</reflist>
</presentation>
</UML:Class>
<UML:ClassItem id="5c2f3216-ee0f-11ef-918b-89e86c884103">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 345.78324127197266, 680.6172180175781)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>632.0</val>
</width>
<height>
<val>205.20700073242188</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
</subject>
</UML:ClassItem>
<UML:Operation id="b973fde1-ee0f-11ef-a571-89e86c884103">
<class_>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
</class_>
<name>
<val>recommend</val>
</name>
<ownedParameter>
<reflist>
<ref refid="47e57c0d-ee10-11ef-bb28-89e86c884103"/>
</reflist>
</ownedParameter>
</UML:Operation>
<UML:Operation id="3d78817a-ee10-11ef-b70f-89e86c884103">
<class_>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
</class_>
<name>
<val>+ Recommender(history_file: string, cache_db_file: Optional(string) = None)</val>
</name>
</UML:Operation>
<UML:Parameter id="47e57c0d-ee10-11ef-bb28-89e86c884103">
<direction>
<val>in</val>
</direction>
<name>
<val>count</val>
</name>
<ownerFormalParam>
<ref refid="b973fde1-ee0f-11ef-a571-89e86c884103"/>
</ownerFormalParam>
<typeValue>
<val>int</val>
</typeValue>
</UML:Parameter>
<UML:Class id="69500f2c-ee10-11ef-a0f8-89e86c884103">
<isAbstract>
<val>1</val>
</isAbstract>
<name>
<val>History</val>
</name>
<ownedOperation>
<reflist>
<ref refid="8c325cde-ee10-11ef-b9a0-89e86c884103"/>
<ref refid="169850f1-ee11-11ef-bcb1-89e86c884103"/>
<ref refid="94fc9d0a-ee12-11ef-9424-89e86c884103"/>
<ref refid="0e62ffe8-ee13-11ef-b1cb-89e86c884103"/>
</reflist>
</ownedOperation>
<owningPackage>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</package>
<presentation>
<reflist>
<ref refid="69505392-ee10-11ef-b744-89e86c884103"/>
</reflist>
</presentation>
</UML:Class>
<UML:ClassItem id="69505392-ee10-11ef-b744-89e86c884103">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 186.63282775878906, 443.60939025878906)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>318.3008270263672</val>
</width>
<height>
<val>164.75778198242188</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<show_attributes>
<val>0</val>
</show_attributes>
<subject>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</subject>
</UML:ClassItem>
<UML:Operation id="8c325cde-ee10-11ef-b9a0-89e86c884103">
<class_>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</class_>
<isAbstract>
<val>1</val>
</isAbstract>
<name>
<val>History</val>
</name>
<ownedParameter>
<reflist>
<ref refid="902b2201-ee10-11ef-badc-89e86c884103"/>
</reflist>
</ownedParameter>
</UML:Operation>
<UML:Parameter id="902b2201-ee10-11ef-badc-89e86c884103">
<direction>
<val>in</val>
</direction>
<name>
<val>filename</val>
</name>
<ownerFormalParam>
<ref refid="8c325cde-ee10-11ef-b9a0-89e86c884103"/>
</ownerFormalParam>
<typeValue>
<val>string</val>
</typeValue>
</UML:Parameter>
<UML:Operation id="169850f1-ee11-11ef-bcb1-89e86c884103">
<class_>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</class_>
<isAbstract>
<val>1</val>
</isAbstract>
<name>
<val>__size__</val>
</name>
</UML:Operation>
<UML:AssociationItem id="4b4d835f-ee11-11ef-a57a-89e86c884103">
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<head_subject>
<ref refid="4c286855-ee11-11ef-bdfd-89e86c884103"/>
</head_subject>
<horizontal>
<val>0</val>
</horizontal>
<orthogonal>
<val>0</val>
</orthogonal>
<subject>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
</subject>
<tail_subject>
<ref refid="4c2876c8-ee11-11ef-a414-89e86c884103"/>
</tail_subject>
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 427.53533935546875, 679.4648742675781)</val>
</matrix>
<points>
<val>[(0.0, 1.15234375), (0.0, -71.09770202636719)]</val>
</points>
<head-connection>
<ref refid="5c2f3216-ee0f-11ef-918b-89e86c884103"/>
</head-connection>
<tail-connection>
<ref refid="69505392-ee10-11ef-b744-89e86c884103"/>
</tail-connection>
</UML:AssociationItem>
<UML:Association id="4c28103c-ee11-11ef-aaf7-89e86c884103">
<memberEnd>
<reflist>
<ref refid="4c286855-ee11-11ef-bdfd-89e86c884103"/>
<ref refid="4c2876c8-ee11-11ef-a414-89e86c884103"/>
</reflist>
</memberEnd>
<ownedEnd>
<reflist>
<ref refid="4c286855-ee11-11ef-bdfd-89e86c884103"/>
</reflist>
</ownedEnd>
<owningPackage>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</package>
<presentation>
<reflist>
<ref refid="4b4d835f-ee11-11ef-a57a-89e86c884103"/>
</reflist>
</presentation>
</UML:Association>
<UML:Property id="4c286855-ee11-11ef-bdfd-89e86c884103">
<association>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
</association>
<owningAssociation>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
</owningAssociation>
<type>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
</type>
<upperValue>
<val>1</val>
</upperValue>
<upperValue>
<val>1</val>
</upperValue>
</UML:Property>
<UML:Property id="4c2876c8-ee11-11ef-a414-89e86c884103">
<aggregation>
<val>composite</val>
</aggregation>
<association>
<ref refid="4c28103c-ee11-11ef-aaf7-89e86c884103"/>
</association>
<class_>
<ref refid="5c2ec633-ee0f-11ef-a8a3-89e86c884103"/>
</class_>
<type>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</type>
<upperValue>
<val>*</val>
</upperValue>
<upperValue>
<val>*</val>
</upperValue>
</UML:Property>
<UML:Class id="650af1b7-ee11-11ef-a839-89e86c884103">
<name>
<val>HistoryYouTube</val>
</name>
<owningPackage>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</package>
<presentation>
<reflist>
<ref refid="650b3c91-ee11-11ef-b15a-89e86c884103"/>
</reflist>
</presentation>
</UML:Class>
<UML:ClassItem id="650b3c91-ee11-11ef-b15a-89e86c884103">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 91.67303721110027, 224.98699188232425)</val>
</matrix>
<top-left>
<val>(0.0, 44.798164367675795)</val>
</top-left>
<width>
<val>181.64712270100912</val>
</width>
<height>
<val>58.35613250732423</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<show_attributes>
<val>0</val>
</show_attributes>
<show_operations>
<val>0</val>
</show_operations>
<subject>
<ref refid="650af1b7-ee11-11ef-a839-89e86c884103"/>
</subject>
</UML:ClassItem>
<UML:Class id="79033e7b-ee11-11ef-bd6c-89e86c884103">
<name>
<val>HistoryFreeTube</val>
</name>
<owningPackage>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</owningPackage>
<package>
<ref refid="f3a82730-71b1-11ec-a409-f47b099bf663"/>
</package>
<presentation>
<reflist>
<ref refid="7903854f-ee11-11ef-bbf6-89e86c884103"/>
</reflist>
</presentation>
</UML:Class>
<UML:ClassItem id="7903854f-ee11-11ef-bbf6-89e86c884103">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 380.05679575602204, 226.81316375732428)</val>
</matrix>
<top-left>
<val>(0.0, 43.58071645100908)</val>
</top-left>
<width>
<val>249.7537180582683</val>
</width>
<height>
<val>57.138684590657604</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<show_attributes>
<val>0</val>
</show_attributes>
<show_operations>
<val>0</val>
</show_operations>
<subject>
<ref refid="79033e7b-ee11-11ef-bd6c-89e86c884103"/>
</subject>
</UML:ClassItem>
<UML:InterfaceRealizationItem id="8b31e95c-ee11-11ef-9bbf-89e86c884103">
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<horizontal>
<val>0</val>
</horizontal>
<orthogonal>
<val>0</val>
</orthogonal>
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 223.12159220377606, 442.6041793823242)</val>
</matrix>
<points>
<val>[(0.0, 0.0), (6.154947234916875, -114.46289062499994)]</val>
</points>
<tail-connection>
<ref refid="650b3c91-ee11-11ef-b15a-89e86c884103"/>
</tail-connection>
</UML:InterfaceRealizationItem>
<UML:InterfaceRealizationItem id="9071eb00-ee11-11ef-a0be-89e86c884103">
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<horizontal>
<val>0</val>
</horizontal>
<orthogonal>
<val>0</val>
</orthogonal>
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 438.54807535807294, 442.6823043823242)</val>
</matrix>
<points>
<val>[(0.0, 0.0), (0.3684514898106386, -115.14973958333326)]</val>
</points>
<tail-connection>
<ref refid="7903854f-ee11-11ef-bbf6-89e86c884103"/>
</tail-connection>
</UML:InterfaceRealizationItem>
<UML:Operation id="94fc9d0a-ee12-11ef-9424-89e86c884103">
<class_>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</class_>
<isStatic>
<val>1</val>
</isStatic>
<name>
<val>+ parse_history(filename: string) -&gt; History</val>
</name>
</UML:Operation>
<UML:Comment id="bae1b667-ee12-11ef-a5d2-89e86c884103">
<body>
<val>When parse_history() is called, it should identify and return the correct history type. It can leverage the is_this_type() function that the implementers of this interface should implement to identify whether it's the correct type.</val>
</body>
<presentation>
<reflist>
<ref refid="bae1bc56-ee12-11ef-8a75-89e86c884103"/>
</reflist>
</presentation>
</UML:Comment>
<UML:CommentItem id="bae1bc56-ee12-11ef-8a75-89e86c884103">
<matrix>
<val>(1.0, 0.0, 0.0, 1.0, 532.4830907185875, 411.48828125)</val>
</matrix>
<top-left>
<val>(0.0, 0.0)</val>
</top-left>
<width>
<val>170.39703369140614</val>
</width>
<height>
<val>229.0</val>
</height>
<diagram>
<ref refid="585f224c-71b6-11ec-a409-f47b099bf663"/>
</diagram>
<subject>
<ref refid="bae1b667-ee12-11ef-a5d2-89e86c884103"/>
</subject>
</UML:CommentItem>
<UML:Operation id="0e62ffe8-ee13-11ef-b1cb-89e86c884103">
<class_>
<ref refid="69500f2c-ee10-11ef-a0f8-89e86c884103"/>
</class_>
<isAbstract>
<val>1</val>
</isAbstract>
<name>
<val>is_this_type</val>
</name>
<ownedParameter>
<reflist>
<ref refid="0e64ddce-ee13-11ef-961a-89e86c884103"/>
</reflist>
</ownedParameter>
</UML:Operation>
<UML:Parameter id="0e64ddce-ee13-11ef-961a-89e86c884103">
<direction>
<val>in</val>
</direction>
<name>
<val>filename</val>
</name>
<ownerFormalParam>
<ref refid="0e62ffe8-ee13-11ef-b1cb-89e86c884103"/>
</ownerFormalParam>
<typeValue>
<val>string</val>
</typeValue>
</UML:Parameter>
</model>
</gaphor>

View File

@@ -1,19 +1,3 @@
#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import shadowtube.preprocess as prep
import shadowtube.recommend as rec

View File

@@ -1,19 +1,3 @@
#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import requests
from io import BytesIO
from PIL import Image, ImageTk

View File

@@ -1,18 +1,2 @@
#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from .preprocess import *
from .recommend import *

View File

@@ -1,18 +0,0 @@
class History: #Abstract class
def __init__(self, filename):
self.history = list()
def __size__(self):
return len(history)
def parse_history(self, filename):
return history
def is_this_type(self, filename): # bool function,
return false # returns false if Youtube history
def get_video(self, index):
return history[index]
def __iter__(self):
return iter(history)

View File

@@ -1,19 +1,3 @@
#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import json
import math
from typing import List

View File

@@ -1,19 +1,3 @@
#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import sqlite3
from random import sample