# ivankovchugo/todoapp architecture

> Architecture diagram of the GitHub repository ivankovchugo/todoapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ivankovchugo/todoapp
- Repository: https://github.com/ivankovchugo/todoapp

## Overview

This is a JavaFX desktop to-do list: users view tasks, add or edit descriptions, details and deadlines, and delete tasks; the app loads and saves the list as tab-separated text. The sampled code supports the app lifecycle, controller actions, dialog processing, model and persistence links. The README is empty, and the FXML files were not sampled, so their internal bindings and layout details are not inferred.

Main entry points: [`src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoData.java`](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoData.java) (Task collection), [`src/main/java/com/ivan_kauchuha/todoapp/Controller.java`](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/Controller.java) (Task controller), [`src/main/java/com/ivan_kauchuha/todoapp/DialogController.java`](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/DialogController.java) (Dialog processing), [`src/main/resources/com/ivan_kauchuha/todoapp/mainwindow.fxml`](https://github.com/ivankovchugo/todoapp/blob/master/src/main/resources/com/ivan_kauchuha/todoapp/mainwindow.fxml) (Main window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["JavaFX interface"]
  node_main["App lifecycle<br/>[Main.java]"]
  node_mainview["Main window<br/>[mainwindow.fxml]"]
  node_dialogview["Task dialog"]
end

subgraph group_tasks["Task management"]
  node_controller["Task controller<br/>[Controller.java]"]
  node_dialogcontroller["Dialog processing"]
  node_data["Task collection<br/>[TodoData.java]"]
  node_item["Task model<br/>[TodoItem.java]"]
end

subgraph group_storage["Persistence"]
  node_file["Task list file<br/>[TodoListItems.txt]"]
end

node_user(("User"))

node_user -->|"uses"| node_mainview
node_main -->|"loads and saves"| node_data
node_main -->|"loads"| node_mainview
node_mainview -->|"binds view"| node_controller
node_controller -->|"reads and mutates"| node_data
node_controller -->|"loads dialog"| node_dialogview
node_dialogview -->|"binds fields"| node_dialogcontroller
node_controller -->|"delegates edits"| node_dialogcontroller
node_dialogcontroller -->|"adds task"| node_data
node_data -->|"creates tasks"| node_item
node_dialogcontroller -->|"creates task"| node_item
node_data -->|"reads and writes"| node_file

click node_main "https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/Main.java"
click node_mainview "https://github.com/ivankovchugo/todoapp/blob/master/src/main/resources/com/ivan_kauchuha/todoapp/mainwindow.fxml"
click node_controller "https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/Controller.java"
click node_dialogview "https://github.com/ivankovchugo/todoapp/blob/master/src/main/resources/com/ivan_kauchuha/todoapp/todoItemDialog.fxml"
click node_dialogcontroller "https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/DialogController.java"
click node_data "https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoData.java"
click node_item "https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoItem.java"
click node_file "https://github.com/ivankovchugo/todoapp/blob/master/TodoListItems.txt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_mainview,node_dialogview,node_user toneBlue
class node_controller,node_dialogcontroller,node_data,node_item toneAmber
class node_file toneMint
```

## Components

### JavaFX interface

- [App lifecycle](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/Main.java): `src/main/java/com/ivan_kauchuha/todoapp/Main.java`
- [Main window](https://github.com/ivankovchugo/todoapp/blob/master/src/main/resources/com/ivan_kauchuha/todoapp/mainwindow.fxml): `src/main/resources/com/ivan_kauchuha/todoapp/mainwindow.fxml`
- [Task dialog](https://github.com/ivankovchugo/todoapp/blob/master/src/main/resources/com/ivan_kauchuha/todoapp/todoItemDialog.fxml): `src/main/resources/com/ivan_kauchuha/todoapp/todoItemDialog.fxml`

### Task management

- [Task controller](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/Controller.java): `src/main/java/com/ivan_kauchuha/todoapp/Controller.java`
- [Dialog processing](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/DialogController.java): `src/main/java/com/ivan_kauchuha/todoapp/DialogController.java`
- [Task collection](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoData.java): `src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoData.java`
- [Task model](https://github.com/ivankovchugo/todoapp/blob/master/src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoItem.java): `src/main/java/com/ivan_kauchuha/todoapp/datamodel/TodoItem.java`

### Persistence

- [Task list file](https://github.com/ivankovchugo/todoapp/blob/master/TodoListItems.txt): `TodoListItems.txt`

### Other components

- **User**

## Connections

- User → Main window: uses
- App lifecycle → Task collection: loads and saves
- App lifecycle → Main window: loads
- Main window → Task controller: binds view
- Task controller → Task collection: reads and mutates
- Task controller → Task dialog: loads dialog
- Task dialog → Dialog processing: binds fields
- Task controller → Dialog processing: delegates edits
- Dialog processing → Task collection: adds task
- Task collection → Task model: creates tasks
- Dialog processing → Task model: creates task
- Task collection → Task list file: reads and writes
