# 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 ```