# bunnycoder1999/tasks-be architecture

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

- Interactive diagram: https://gitdiagram.com/bunnycoder1999/tasks-be
- Repository: https://github.com/bunnycoder1999/tasks-be

## Overview

#### Purpose and Runtime
Task Tracker is a Spring Boot REST backend for CRUD management of task lists and their tasks. The README describes a React/Vite client, but no frontend source exists in this repository. The application runs on Java/Spring Boot, exposes REST endpoints, and persists through Spring Data JPA to PostgreSQL; Docker Compose provisions the database.
- `src/main/java/com/springbunny/tasks/TasksApplication.java`
- `pom.xml`
- `docker-compose.yml`

#### Application Entry and HTTP Boundary
`TasksApplication` is the Spring Boot bootstrap entry point. REST controllers form the external API boundary, with task-list routes prefixed by `/api/task-lists`; task operations are likely nested under or coordinated with list operations.
- `src/main/java/com/springbunny/tasks/controllers/TaskListController.java`
- `src/main/java/com/springbunny/tasks/controllers/TaskController.java`
- `src/main/java/com/springbunny/tasks/TasksApplication.java`

#### Task-List Domain Stage
Task lists are a primary aggregate for organizing tasks. The controller delegates list CRUD to a service, which persists through a repository and presents DTOs rather than exposing entities directly.
- `src/main/java/com/springbunny/tasks/domain/entities/TaskList.java`
- `src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java`
- `src/main/java/com/springbunny/tasks/repositories/TaskListRepository.java`

#### Task Domain Stage
Tasks belong to the task-management model and carry status and priority domain values. Task service logic is the principal place for operations such as creation, updates to title/description/status, deletion, and association with a task list.
- `src/main/java/com/springbunny/tasks/domain/entities/Task.java`
- `src/main/java/com/springbunny/tasks/domain/entities/TaskStatus.java`
- `src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java`

#### API Contract and Mapping Boundary
Controllers exchange `TaskDto` and `TaskListDto` contracts. Dedicated mappers isolate entity-to-DTO conversion, allowing JPA relationships and persistence details to remain behind the service/API boundary.
- `src/main/java/com/springbunny/tasks/domain/dto/TaskDto.java`
- `src/main/java/com/springbunny/tasks/mappers/impl/TaskMapperImpl.java`
- `src/main/java/com/springbunny/tasks/mappers/impl/TaskListMapperImpl.java`

#### Persistence and Infrastructure
Repository interfaces provide the data-access boundary over JPA entities. PostgreSQL is the material external dependency, expected to run via Docker Compose; runtime database settings are supplied through Spring application properties.
- `src/main/java/com/springbunny/tasks/repositories/TaskRepository.java`
- `src/main/java/com/springbunny/tasks/repositories/TaskListRepository.java`
- `src/main/resources/application.properties`

#### Error Flow
Request validation or service failures are centrally translated into API error responses by controller advice. This prevents persistence/domain exceptions from leaking directly through REST endpoints.
- `src/main/java/com/springbunny/tasks/controllers/GlobalExceptionHandler.java`
- `src/main/java/com/springbunny/tasks/domain/dto/ErrorResponse.java`

Main entry points: [`src/main/java/com/springbunny/tasks/controllers/TaskListController.java`](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskListController.java) (Task list controller), [`src/main/java/com/springbunny/tasks/controllers/TaskController.java`](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskController.java) (Task controller), [`src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java`](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java) (Task service), [`src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java`](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java) (Task list service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_task_list_controller["Task list controller<br/>REST controller"]
  node_task_controller["Task controller<br/>REST controller"]
  node_exception_handler["Exception handler<br/>controller advice"]
  node_error_response["Error response<br/>API DTO<br/>[ErrorResponse.java]"]
  node_task_list_dto["Task list DTO<br/>API DTO"]
  node_task_dto["Task DTO<br/>API DTO<br/>[TaskDto.java]"]
end

subgraph group_domain["Task Domain"]
  node_task_list_service["Task list service<br/>service implementation"]
  node_task_service["Task service<br/>service implementation"]
  node_task_list_mapper["Task list mapper<br/>DTO mapper"]
  node_task_mapper["Task mapper<br/>DTO mapper"]
  node_task_list["Task list<br/>JPA entity<br/>[TaskList.java]"]
  node_task["Task<br/>JPA entity<br/>[Task.java]"]
  node_task_status["Task status<br/>domain enum<br/>[TaskStatus.java]"]
end

subgraph group_persistence["Persistence"]
  node_task_list_repository["Task list repository<br/>Spring Data JPA"]
  node_task_repository["Task repository<br/>Spring Data JPA"]
  node_postgresql[("PostgreSQL<br/>database<br/>[docker-compose.yml]")]
  node_app_properties["Application properties<br/>runtime configuration"]
end

node_app{{"Spring Boot app<br/>bootstrap"}}
node_maven_build["Maven build<br/>build definition<br/>[pom.xml]"]

node_maven_build -->|"builds"| node_app
node_app -->|"serves"| node_task_list_controller
node_app -->|"serves"| node_task_controller
node_task_list_controller -->|"delegates CRUD"| node_task_list_service
node_task_controller -->|"delegates operations"| node_task_service
node_task_list_controller -->|"uses"| node_task_list_dto
node_task_controller -->|"uses"| node_task_dto
node_task_list_service -->|"maps"| node_task_list_mapper
node_task_service -->|"maps"| node_task_mapper
node_task_list_mapper -->|"converts"| node_task_list
node_task_mapper -->|"converts"| node_task
node_task_list_service -->|"persists via"| node_task_list_repository
node_task_service -->|"persists via"| node_task_repository
node_task_service -->|"associates with"| node_task_list_repository
node_task -->|"belongs to"| node_task_list
node_task -->|"has status"| node_task_status
node_task_list_repository -->|"JPA access"| node_postgresql
node_task_repository -->|"JPA access"| node_postgresql
node_app_properties -.->|"configures connection"| node_postgresql
node_exception_handler -->|"returns"| node_error_response
node_task_list_controller -.->|"failures handled by"| node_exception_handler
node_task_controller -.->|"failures handled by"| node_exception_handler

click node_app "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/TasksApplication.java"
click node_task_list_controller "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskListController.java"
click node_task_controller "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskController.java"
click node_exception_handler "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/GlobalExceptionHandler.java"
click node_error_response "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/dto/ErrorResponse.java"
click node_task_dto "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/dto/TaskDto.java"
click node_task_list_service "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java"
click node_task_service "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java"
click node_task_list_mapper "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/mappers/impl/TaskListMapperImpl.java"
click node_task_mapper "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/mappers/impl/TaskMapperImpl.java"
click node_task_list "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/TaskList.java"
click node_task "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/Task.java"
click node_task_status "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/TaskStatus.java"
click node_task_list_repository "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/repositories/TaskListRepository.java"
click node_task_repository "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/repositories/TaskRepository.java"
click node_postgresql "https://github.com/bunnycoder1999/tasks-be/blob/main/docker-compose.yml"
click node_app_properties "https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/resources/application.properties"
click node_maven_build "https://github.com/bunnycoder1999/tasks-be/blob/main/pom.xml"

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_task_list_controller,node_task_controller,node_exception_handler,node_error_response,node_task_list_dto,node_task_dto toneBlue
class node_task_list_service,node_task_service,node_task_list_mapper,node_task_mapper,node_task_list,node_task,node_task_status toneAmber
class node_task_list_repository,node_task_repository,node_postgresql,node_app_properties toneMint
class node_app,node_maven_build toneNeutral
```

## Components

### REST API

- [Task list controller](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskListController.java): REST controller · Exposes /api/task-lists CRUD routes. · `src/main/java/com/springbunny/tasks/controllers/TaskListController.java`
- [Task controller](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/TaskController.java): REST controller · Exposes task operations. · `src/main/java/com/springbunny/tasks/controllers/TaskController.java`
- [Exception handler](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/controllers/GlobalExceptionHandler.java): controller advice · Translates failures into API errors. · `src/main/java/com/springbunny/tasks/controllers/GlobalExceptionHandler.java`
- [Error response](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/dto/ErrorResponse.java): API DTO · `src/main/java/com/springbunny/tasks/domain/dto/ErrorResponse.java`
- **Task list DTO**: API DTO
- [Task DTO](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/dto/TaskDto.java): API DTO · `src/main/java/com/springbunny/tasks/domain/dto/TaskDto.java`

### Task Domain

- [Task list service](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java): service implementation · Coordinates task-list CRUD. · `src/main/java/com/springbunny/tasks/services/impl/TaskListServiceImpl.java`
- [Task service](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java): service implementation · Manages task lifecycle and list association. · `src/main/java/com/springbunny/tasks/services/impl/TaskServiceImpl.java`
- [Task list mapper](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/mappers/impl/TaskListMapperImpl.java): DTO mapper · `src/main/java/com/springbunny/tasks/mappers/impl/TaskListMapperImpl.java`
- [Task mapper](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/mappers/impl/TaskMapperImpl.java): DTO mapper · `src/main/java/com/springbunny/tasks/mappers/impl/TaskMapperImpl.java`
- [Task list](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/TaskList.java): JPA entity · Aggregate that organizes tasks. · `src/main/java/com/springbunny/tasks/domain/entities/TaskList.java`
- [Task](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/Task.java): JPA entity · Task with status and priority. · `src/main/java/com/springbunny/tasks/domain/entities/Task.java`
- [Task status](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/domain/entities/TaskStatus.java): domain enum · `src/main/java/com/springbunny/tasks/domain/entities/TaskStatus.java`

### Persistence

- [Task list repository](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/repositories/TaskListRepository.java): Spring Data JPA · `src/main/java/com/springbunny/tasks/repositories/TaskListRepository.java`
- [Task repository](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/repositories/TaskRepository.java): Spring Data JPA · `src/main/java/com/springbunny/tasks/repositories/TaskRepository.java`
- [PostgreSQL](https://github.com/bunnycoder1999/tasks-be/blob/main/docker-compose.yml): database · Provisioned by Docker Compose. · `docker-compose.yml`
- [Application properties](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/resources/application.properties): runtime configuration · Supplies database settings. · `src/main/resources/application.properties`

### Other components

- [Spring Boot app](https://github.com/bunnycoder1999/tasks-be/blob/main/src/main/java/com/springbunny/tasks/TasksApplication.java): bootstrap · Application entry point. · `src/main/java/com/springbunny/tasks/TasksApplication.java`
- [Maven build](https://github.com/bunnycoder1999/tasks-be/blob/main/pom.xml): build definition · `pom.xml`

## Connections

- Maven build → Spring Boot app: builds
- Spring Boot app → Task list controller: serves
- Spring Boot app → Task controller: serves
- Task list controller → Task list service: delegates CRUD
- Task controller → Task service: delegates operations
- Task list controller → Task list DTO: uses
- Task controller → Task DTO: uses
- Task list service → Task list mapper: maps
- Task service → Task mapper: maps
- Task list mapper → Task list: converts
- Task mapper → Task: converts
- Task list service → Task list repository: persists via
- Task service → Task repository: persists via
- Task service → Task list repository: associates with
- Task → Task list: belongs to
- Task → Task status: has status
- Task list repository → PostgreSQL: JPA access
- Task repository → PostgreSQL: JPA access
- Application properties → PostgreSQL: configures connection
- Exception handler → Error response: returns
- Task list controller → Exception handler: failures handled by
- Task controller → Exception handler: failures handled by
