# gurushetty18/life-link architecture

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

- Interactive diagram: https://gitdiagram.com/gurushetty18/life-link
- Repository: https://github.com/gurushetty18/life-link

## Overview

LifeLink is a Spring Boot blood-donation coordination backend. Its main workflow accepts hospital or patient blood requests, persists them, and alerts compatible donors; patient requests wait for administrator approval. Registration and role-based access control support that workflow, while OTP email verification, Twilio calling, and a Gemini assistant provide distinct supporting capabilities. The graph combines explicit README descriptions with shown service behavior and SOURCE INDEX references; most unsampled controllers and services are represented only where their role is documented or their connections are indexed.

Main entry points: [`src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java`](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java) (Request lifecycle), [`src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java) (Request endpoints), [`src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java`](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java) (Patient request endpoints), [`src/main/java/com/blooddonation/blood_donation_system/repository/BloodRequestRepository.java`](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/repository/BloodRequestRepository.java) (Blood request records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and registration"]
  node_auth["Authentication and RBAC"]
  node_login["User lookup"]
  node_registration["Role registration"]
  node_otp["Email OTP verification"]
end

subgraph group_requests["Blood request workflow"]
  node_requests_api["Request endpoints"]
  node_user_api["Patient request endpoints"]
  node_request_service["Request lifecycle"]
  node_admin["Admin approval"]
  node_request_store[("Blood request records")]
  node_domain["Domain entities"]
end

subgraph group_donor["Donor coordination"]
  node_donor_search["Donor matching"]
  node_donor_alerts["Donor notifications"]
  node_donor_store[("Donor records")]
end

subgraph group_platform["Platform and integrations"]
  node_chatbot["AI assistant"]
  node_chat_api["Chat endpoint"]
  node_calls["Voice calling<br/>[CallService.java]"]
end

node_users(("Platform users"))
node_twilio{{"Twilio Voice"}}
node_gemini{{"Gemini API"}}
node_mail{{"SMTP email"}}
node_database[("Relational database")]

node_users -->|"signs in"| node_auth
node_auth -->|"loads identity"| node_login
node_users -->|"registers"| node_registration
node_registration -->|"requests OTP"| node_otp
node_otp -->|"emails code"| node_mail
node_users -->|"submits hospital request"| node_requests_api
node_users -->|"submits patient request"| node_user_api
node_requests_api -->|"creates request"| node_request_service
node_user_api -->|"creates request"| node_request_service
node_request_service -->|"saves request"| node_request_store
node_request_service -->|"notifies hospital requests"| node_donor_alerts
node_admin -->|"manages requests"| node_request_store
node_admin -->|"notifies approved requests"| node_donor_alerts
node_requests_api -->|"searches donors"| node_donor_search
node_user_api -->|"searches donors"| node_donor_search
node_donor_search -->|"queries donors"| node_donor_store
node_donor_alerts -.->|"finds recipients"| node_donor_store
node_request_store -->|"persists records"| node_database
node_donor_store -->|"persists records"| node_database
node_chat_api -.->|"handles chat"| node_chatbot
node_chatbot -->|"requests guidance"| node_gemini
node_requests_api -->|"initiates calls"| node_calls
node_calls -->|"connects voice"| node_twilio
node_request_service -->|"builds request entities"| node_domain

click node_auth "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/config/SecurityConfig.java"
click node_login "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/security/CustomUserDetailsService.java"
click node_registration "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorRegistrationService.java"
click node_otp "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/EmailVerificationService.java"
click node_requests_api "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java"
click node_user_api "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java"
click node_request_service "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java"
click node_admin "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/AdminController.java"
click node_request_store "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/repository/BloodRequestRepository.java"
click node_domain "https://github.com/gurushetty18/life-link/tree/main/src/main/java/com/blooddonation/blood_donation_system/entity"
click node_donor_search "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorSearchService.java"
click node_donor_alerts "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorNotificationService.java"
click node_donor_store "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/repository/DonorRepository.java"
click node_chatbot "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/ChatbotService.java"
click node_chat_api "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/ChatbotController.java"
click node_calls "https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/CallService.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_auth,node_login,node_registration,node_otp,node_users toneBlue
class node_requests_api,node_user_api,node_request_service,node_admin,node_request_store,node_domain,node_database toneAmber
class node_donor_search,node_donor_alerts,node_donor_store,node_gemini toneMint
class node_chatbot,node_chat_api,node_calls toneRose
class node_twilio,node_mail toneIndigo
```

## Components

### Access and registration

- [Authentication and RBAC](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/config/SecurityConfig.java): `src/main/java/com/blooddonation/blood_donation_system/config/SecurityConfig.java`
- [User lookup](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/security/CustomUserDetailsService.java): `src/main/java/com/blooddonation/blood_donation_system/security/CustomUserDetailsService.java`
- [Role registration](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorRegistrationService.java): `src/main/java/com/blooddonation/blood_donation_system/service/DonorRegistrationService.java`
- [Email OTP verification](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/EmailVerificationService.java): `src/main/java/com/blooddonation/blood_donation_system/service/EmailVerificationService.java`

### Blood request workflow

- [Request endpoints](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java): `src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`
- [Patient request endpoints](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java): `src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java`
- [Request lifecycle](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java): `src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java`
- [Admin approval](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/AdminController.java): `src/main/java/com/blooddonation/blood_donation_system/controller/AdminController.java`
- [Blood request records](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/repository/BloodRequestRepository.java): `src/main/java/com/blooddonation/blood_donation_system/repository/BloodRequestRepository.java`
- [Domain entities](https://github.com/gurushetty18/life-link/tree/main/src/main/java/com/blooddonation/blood_donation_system/entity): `src/main/java/com/blooddonation/blood_donation_system/entity`

### Donor coordination

- [Donor matching](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorSearchService.java): `src/main/java/com/blooddonation/blood_donation_system/service/DonorSearchService.java`
- [Donor notifications](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/DonorNotificationService.java): `src/main/java/com/blooddonation/blood_donation_system/service/DonorNotificationService.java`
- [Donor records](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/repository/DonorRepository.java): `src/main/java/com/blooddonation/blood_donation_system/repository/DonorRepository.java`

### Platform and integrations

- [AI assistant](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/ChatbotService.java): `src/main/java/com/blooddonation/blood_donation_system/service/ChatbotService.java`
- [Chat endpoint](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/controller/ChatbotController.java): `src/main/java/com/blooddonation/blood_donation_system/controller/ChatbotController.java`
- [Voice calling](https://github.com/gurushetty18/life-link/blob/main/src/main/java/com/blooddonation/blood_donation_system/service/CallService.java): `src/main/java/com/blooddonation/blood_donation_system/service/CallService.java`

### Other components

- **Platform users**
- **Twilio Voice**
- **Gemini API**
- **SMTP email**
- **Relational database**

## Connections

- Platform users → Authentication and RBAC: signs in
- Authentication and RBAC → User lookup: loads identity (evidence: `src/main/java/com/blooddonation/blood_donation_system/security/CustomUserDetailsService.java`)
- Platform users → Role registration: registers
- Role registration → Email OTP verification: requests OTP (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/DonorRegistrationService.java`)
- Email OTP verification → SMTP email: emails code
- Platform users → Request endpoints: submits hospital request (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`)
- Platform users → Patient request endpoints: submits patient request (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java`)
- Request endpoints → Request lifecycle: creates request (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`)
- Patient request endpoints → Request lifecycle: creates request (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java`)
- Request lifecycle → Blood request records: saves request (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java`)
- Request lifecycle → Donor notifications: notifies hospital requests (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java`)
- Admin approval → Blood request records: manages requests (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/AdminController.java`)
- Admin approval → Donor notifications: notifies approved requests (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/AdminController.java`)
- Request endpoints → Donor matching: searches donors (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`)
- Patient request endpoints → Donor matching: searches donors (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/UserController.java`)
- Donor matching → Donor records: queries donors (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/DonorSearchService.java`)
- Donor notifications → Donor records: finds recipients (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/DonorNotificationService.java`)
- Blood request records → Relational database: persists records
- Donor records → Relational database: persists records
- Chat endpoint → AI assistant: handles chat (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/ChatbotController.java`)
- AI assistant → Gemini API: requests guidance
- Request endpoints → Voice calling: initiates calls (evidence: `src/main/java/com/blooddonation/blood_donation_system/controller/HospitalController.java`)
- Voice calling → Twilio Voice: connects voice
- Request lifecycle → Domain entities: builds request entities (evidence: `src/main/java/com/blooddonation/blood_donation_system/service/BloodRequestService.java`)
