# martyns254/duaratrust architecture

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

- Interactive diagram: https://gitdiagram.com/martyns254/duaratrust
- Repository: https://github.com/martyns254/duaratrust

## Overview

Duaratrust is a Spring Boot API for managing users and savings groups, including member records and group withdrawal requests governed by member approvals. The principal workflow is a member submitting a withdrawal, the service recording votes and applying the group’s approval threshold, then returning the updated request. Registration and login provide a separate authentication workflow; group creation and member creation are additional domain operations. Service-to-repository links and withdrawal approval decisions are supported by sampled source. The README is empty, and several security and domain modules were not sampled, so their internal wiring is not expanded.

Main entry points: [`src/main/java/com/duaratrust/duaratrust/service/WithdrawalService.java`](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/WithdrawalService.java) (Withdrawal service), [`src/main/java/com/duaratrust/duaratrust/service/UserService.java`](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/UserService.java) (User service), [`src/main/java/com/duaratrust/duaratrust/repository/GroupRepository.java`](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/GroupRepository.java) (Group repository), [`src/main/java/com/duaratrust/duaratrust/controller/UserController.java`](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/UserController.java) (User API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_user_controller["User API"]
  node_group_controller["Group API"]
  node_member_controller["Member API"]
  node_withdrawal_controller["Withdrawal API"]
end

subgraph group_domain["Group operations"]
  node_group_service["Group service<br/>[GroupService.java]"]
  node_group_repository["Group repository"]
  node_member_service["Member service<br/>[MemberService.java]"]
  node_member_repository["Member repository"]
end

subgraph group_withdrawals["Withdrawal approvals"]
  node_withdrawal_service["Withdrawal service"]
  node_withdrawal_repository["Withdrawal repository"]
  node_approval_repository["Approval repository"]
end

subgraph group_security["Identity and security"]
  node_user_service["User service<br/>[UserService.java]"]
  node_user_repository["User repository"]
  node_jwt_filter["JWT filter<br/>[JwtAuthFilter.java]"]
  node_jwt_util["JWT utility<br/>[JwtUtil.java]"]
  node_security_config["Security config"]
end

node_member(("Member"))
node_database[("Relational database")]
node_password_encoder["Password encoder"]

node_member -->|"register or login"| node_user_controller
node_member -->|"create group"| node_group_controller
node_member -->|"create member"| node_member_controller
node_member -->|"request or vote"| node_withdrawal_controller
node_user_controller -->|"dispatches"| node_user_service
node_group_controller -->|"dispatches"| node_group_service
node_member_controller -->|"dispatches"| node_member_service
node_withdrawal_controller -->|"dispatches"| node_withdrawal_service
node_user_service -->|"reads and writes"| node_user_repository
node_user_service -->|"encodes and checks"| node_password_encoder
node_user_service -->|"generates token"| node_jwt_util
node_group_service -->|"saves group"| node_group_repository
node_member_service -->|"saves member"| node_member_repository
node_withdrawal_service -->|"reads and writes requests"| node_withdrawal_repository
node_withdrawal_service -->|"checks and saves votes"| node_approval_repository
node_withdrawal_service -->|"reads threshold"| node_group_repository
node_user_repository -->|"persists users"| node_database
node_group_repository -->|"persists groups"| node_database
node_member_repository -->|"persists members"| node_database
node_withdrawal_repository -->|"persists requests"| node_database
node_approval_repository -->|"persists approvals"| node_database

click node_user_controller "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/UserController.java"
click node_group_controller "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/GroupController.java"
click node_member_controller "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/MemberController.java"
click node_withdrawal_controller "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/WithdrawalController.java"
click node_user_service "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/UserService.java"
click node_user_repository "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/UserRepository.java"
click node_group_service "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/GroupService.java"
click node_group_repository "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/GroupRepository.java"
click node_member_service "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/MemberService.java"
click node_member_repository "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/MemberRepository.java"
click node_withdrawal_service "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/WithdrawalService.java"
click node_withdrawal_repository "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/WithdrawalRequestRepository.java"
click node_approval_repository "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/ApprovalRepository.java"
click node_jwt_filter "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/JwtAuthFilter.java"
click node_jwt_util "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/JwtUtil.java"
click node_security_config "https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/SecurityConfig.java"

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_user_controller,node_group_controller,node_member_controller,node_withdrawal_controller toneBlue
class node_group_service,node_group_repository,node_member_service,node_member_repository,node_database toneAmber
class node_withdrawal_service,node_withdrawal_repository,node_approval_repository toneMint
class node_user_service,node_user_repository,node_jwt_filter,node_jwt_util,node_security_config toneRose
class node_member,node_password_encoder toneIndigo
```

## Components

### API

- [User API](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/UserController.java): `src/main/java/com/duaratrust/duaratrust/controller/UserController.java`
- [Group API](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/GroupController.java): `src/main/java/com/duaratrust/duaratrust/controller/GroupController.java`
- [Member API](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/MemberController.java): `src/main/java/com/duaratrust/duaratrust/controller/MemberController.java`
- [Withdrawal API](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/controller/WithdrawalController.java): `src/main/java/com/duaratrust/duaratrust/controller/WithdrawalController.java`

### Group operations

- [Group service](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/GroupService.java): `src/main/java/com/duaratrust/duaratrust/service/GroupService.java`
- [Group repository](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/GroupRepository.java): `src/main/java/com/duaratrust/duaratrust/repository/GroupRepository.java`
- [Member service](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/MemberService.java): `src/main/java/com/duaratrust/duaratrust/service/MemberService.java`
- [Member repository](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/MemberRepository.java): `src/main/java/com/duaratrust/duaratrust/repository/MemberRepository.java`

### Withdrawal approvals

- [Withdrawal service](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/WithdrawalService.java): `src/main/java/com/duaratrust/duaratrust/service/WithdrawalService.java`
- [Withdrawal repository](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/WithdrawalRequestRepository.java): `src/main/java/com/duaratrust/duaratrust/repository/WithdrawalRequestRepository.java`
- [Approval repository](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/ApprovalRepository.java): `src/main/java/com/duaratrust/duaratrust/repository/ApprovalRepository.java`

### Identity and security

- [User service](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/service/UserService.java): `src/main/java/com/duaratrust/duaratrust/service/UserService.java`
- [User repository](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/repository/UserRepository.java): `src/main/java/com/duaratrust/duaratrust/repository/UserRepository.java`
- [JWT filter](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/JwtAuthFilter.java): `src/main/java/com/duaratrust/duaratrust/config/JwtAuthFilter.java`
- [JWT utility](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/JwtUtil.java): `src/main/java/com/duaratrust/duaratrust/config/JwtUtil.java`
- [Security config](https://github.com/martyns254/duaratrust/blob/main/src/main/java/com/duaratrust/duaratrust/config/SecurityConfig.java): `src/main/java/com/duaratrust/duaratrust/config/SecurityConfig.java`

### Other components

- **Member**
- **Relational database**
- **Password encoder**

## Connections

- Member → User API: register or login
- Member → Group API: create group
- Member → Member API: create member
- Member → Withdrawal API: request or vote
- User API → User service: dispatches
- Group API → Group service: dispatches
- Member API → Member service: dispatches
- Withdrawal API → Withdrawal service: dispatches
- User service → User repository: reads and writes
- User service → Password encoder: encodes and checks
- User service → JWT utility: generates token
- Group service → Group repository: saves group
- Member service → Member repository: saves member
- Withdrawal service → Withdrawal repository: reads and writes requests
- Withdrawal service → Approval repository: checks and saves votes
- Withdrawal service → Group repository: reads threshold
- User repository → Relational database: persists users
- Group repository → Relational database: persists groups
- Member repository → Relational database: persists members
- Withdrawal repository → Relational database: persists requests
- Approval repository → Relational database: persists approvals
