# SDD
## Class/Object Diagram
```graphviz
digraph obj
{
bgcolor="transparent"
node[
shape=Mrecord
style=filled
color="#bda9ea"
fillcolor="#ececff"
fontname=Helvetica
fontsize=8
fontcolor="#3b0053"];
edge [color=black, penwidth=0.4 arrowsize=0.7]
rankdir="TD";
TermProject [label="{TermProject
|
+ current_window: Window
|
display_main()
|
Initialize the project, \n and create the main window.
}"];
ImportWindow [label = "{ImportWindow
|
No attributes
|
search_system() \n
user_button_callback() \n
lower_time_callback() \n
upper_time_callback() \n
display_graphs() \n
|
Allow the user to pick the .csv \n
from the file system, and specify \n
simple filters to the data \n
before opening them in the graph view.
}"];
GraphWindow [label = "{GraphWindow
|
No attributes
|
reset_view() \n
aggregate_view() \n
timezone_toggle() \n
exec_query() \n
timebox_display() \n
|
Display biometric data in a pleasing\n
way, allow the user to further query,\n
aggregate, and zoom in on data.
}"];
DataHandler [label = "{DataHandler
|
+ database: sqlite3.Connection \n
+ cursor: sqlite3.Cursor \n
+ csv_path: str \n
|
is_valid_csv(file_path) \n
create_database() \n
|
Handle the data, and allow the user to\n
query the data in a variety of ways.
}"];
TimeBox [label = "{TimeBox
|
+ lower_bound: datetime \n
+ upper_bound: datetime \n
|
No operations
|
This class will represent the custom time\n
box PyQT6 widget. It will basically act like\n
a slider with two nobs that collide with\n
eachother, where each value is a date time.
}"];
TermProject -> GraphWindow
GraphWindow -> ImportWindow
TimeBox -> GraphWindow
DataHandler -> GraphWindow
GraphWindow -> DataHandler
ImportWindow -> DataHandler
}
```
## Specific Requirements Analysis
| Requirement | 1 | 2 | 3 | 4 | 5 |
|:---------------------------- |:---:|:---:|:---:|:---:|:---:|
| Load User Data | | | | | x |
| Select Filters | | | | | x |
| Load Time Zone Info | | | | | x |
| Switch between UTC and local | | | | x | |
| Sync Time Series | | | | | x |
| Zoom in on data | | | | x | |
| Time Box Visual | | | | x | |
| Aggregate Data | | | | x | |
| Description of Data | | | x | | |
| Query Interface | | x | | | |
| Analyze Data Correlations | x | | | | |
| Mine Patterns | x | | | | |
## State Transition Diagram
```mermaid
flowchart LR
Start --> import{Import?}
import -- button pressed --> pick([Pick File])
pick --> valid{Is Valid?}
valid -- yes --> append([Append Database]) --> import
Start --> hasData{Has Data?}
hasData -- no --> hasData
hasData -- yes --> gen([Generate Graphs])
gen --> settings{UI/Settings Changed?}
settings -- yes --> gen
settings -- no --> settings
```