# jonathangunawan30/fundraiser-backend architecture

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

- Interactive diagram: https://gitdiagram.com/jonathangunawan30/fundraiser-backend
- Repository: https://github.com/jonathangunawan30/fundraiser-backend

## Overview

FundRaiser is a headless crowdfunding API. Users authenticate, discover or create campaigns, and donate through payment processing; administrators verify campaigns and manage platform operations. The map preserves documented payment, withdrawal, content administration, audit, queued messaging, and real-time capabilities. The sampled campaign and authentication code supports the key controller/service/repository relationships; README claims identify additional capabilities, but their detailed wiring was not sampled.

Main entry points: [`routes/api.php`](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/routes/api.php) (API routes), [`app/Http/Controllers/Api/AdminController.php`](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/AdminController.php) (Admin API), [`app/Services/Implementations/AuthService.php`](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuthService.php) (Authentication service), [`app/Http/Controllers/Api/CampaignController.php`](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/CampaignController.php) (Campaign API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API surface"]
  node_routes["API routes<br/>[api.php]"]
  node_campaign_controller["Campaign API"]
  node_donation_api["Donation API"]
  node_payment_api["Payment API"]
  node_withdrawal_api["Withdrawal API"]
  node_auth_api["Authentication API<br/>[AuthController.php]"]
  node_admin_api["Admin API"]
  node_api_response["JSON responses<br/>[ApiResponse.php]"]
end

subgraph group_fundraising["Fundraising"]
  node_campaign_service["Campaign service"]
  node_campaign_repo["Campaign repository"]
  node_campaign_models[("Campaign records<br/>[Campaign.php]")]
  node_donation_service["Donation service"]
  node_payment_service["Payment service"]
  node_midtrans_service["Midtrans integration"]
  node_withdrawal_service["Withdrawal service"]
end

subgraph group_identity["Identity"]
  node_auth_service["Authentication service<br/>[AuthService.php]"]
  node_auth_repo["Authentication repository<br/>[AuthRepository.php]"]
  node_oauth_accounts[("OAuth accounts<br/>[OauthAccount.php]")]
end

subgraph group_operations["Administration"]
  node_admin_service["Admin service<br/>[AdminService.php]"]
  node_admin_content["Admin content controls"]
  node_settings_faq["Settings and FAQs"]
  node_audit["Audit logging"]
end

subgraph group_platform["Messaging and state"]
  node_queue_jobs["Queued jobs"]
  node_notifications["Notifications"]
  node_redis[("Redis OTP store<br/>[AuthService.php]")]
end

node_client(("API clients"))
node_midtrans{{"Midtrans"}}
node_social_providers{{"Google / GitHub"}}
node_reverb{{"Reverb WebSockets"}}
node_mail{{"Resend email"}}

node_client -->|"sends requests"| node_routes
node_routes -->|"dispatches"| node_campaign_controller
node_routes -->|"dispatches"| node_donation_api
node_routes -->|"dispatches"| node_payment_api
node_routes -->|"dispatches"| node_withdrawal_api
node_routes -->|"dispatches"| node_auth_api
node_routes -->|"dispatches"| node_admin_api
node_campaign_controller -->|"calls"| node_campaign_service
node_campaign_service -->|"calls"| node_campaign_repo
node_campaign_repo -->|"reads and writes"| node_campaign_models
node_campaign_controller -->|"formats"| node_api_response
node_donation_api -->|"calls"| node_donation_service
node_payment_api -->|"calls"| node_payment_service
node_payment_service -->|"calls"| node_midtrans_service
node_midtrans_service -->|"processes payments"| node_midtrans
node_withdrawal_api -->|"calls"| node_withdrawal_service
node_auth_api -->|"calls"| node_auth_service
node_auth_service -->|"calls"| node_auth_repo
node_auth_repo -->|"reads and writes"| node_oauth_accounts
node_social_providers -.->|"OAuth identity"| node_auth_api
node_auth_service -->|"stores and checks OTP"| node_redis
node_auth_service -->|"dispatches OTP job"| node_queue_jobs
node_admin_api -->|"calls"| node_admin_service
node_admin_api -->|"verifies campaigns"| node_campaign_service
node_admin_content -.->|"administers"| node_settings_faq
node_admin_api -.->|"records actions"| node_audit
node_queue_jobs -.->|"sends email"| node_mail
node_notifications -.->|"broadcasts alerts"| node_reverb

click node_routes "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/routes/api.php"
click node_campaign_controller "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/CampaignController.php"
click node_campaign_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/CampaignService.php"
click node_campaign_repo "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Repositories/Implementations/CampaignRepository.php"
click node_campaign_models "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Models/Campaign.php"
click node_donation_api "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/DonationController.php"
click node_donation_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/DonationService.php"
click node_payment_api "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/DonationPaymentController.php"
click node_payment_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/DonationPaymentService.php"
click node_midtrans_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/MidtransService.php"
click node_withdrawal_api "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/WithdrawalController.php"
click node_withdrawal_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/WithdrawalService.php"
click node_auth_api "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/AuthController.php"
click node_auth_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuthService.php"
click node_auth_repo "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Repositories/Implementations/AuthRepository.php"
click node_oauth_accounts "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Models/OauthAccount.php"
click node_admin_api "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/AdminController.php"
click node_admin_service "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AdminService.php"
click node_admin_content "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/BannerController.php"
click node_settings_faq "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/SiteSettingController.php"
click node_audit "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuditLogService.php"
click node_queue_jobs "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Jobs/ProcessSuccessfulDonation.php"
click node_notifications "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/NotificationService.php"
click node_redis "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuthService.php"
click node_api_response "https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Traits/ApiResponse.php"

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_routes,node_campaign_controller,node_donation_api,node_payment_api,node_withdrawal_api,node_auth_api,node_admin_api,node_api_response,node_client toneBlue
class node_campaign_service,node_campaign_repo,node_campaign_models,node_donation_service,node_payment_service,node_midtrans_service,node_withdrawal_service toneAmber
class node_auth_service,node_auth_repo,node_oauth_accounts toneMint
class node_admin_service,node_admin_content,node_settings_faq,node_audit toneRose
class node_queue_jobs,node_notifications,node_redis,node_midtrans,node_social_providers,node_reverb,node_mail toneIndigo
```

## Components

### API surface

- [API routes](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/routes/api.php): `routes/api.php`
- [Campaign API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/CampaignController.php): `app/Http/Controllers/Api/CampaignController.php`
- [Donation API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/DonationController.php): `app/Http/Controllers/Api/DonationController.php`
- [Payment API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/DonationPaymentController.php): `app/Http/Controllers/Api/DonationPaymentController.php`
- [Withdrawal API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/WithdrawalController.php): `app/Http/Controllers/Api/WithdrawalController.php`
- [Authentication API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/AuthController.php): `app/Http/Controllers/Api/AuthController.php`
- [Admin API](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/AdminController.php): `app/Http/Controllers/Api/AdminController.php`
- [JSON responses](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Traits/ApiResponse.php): `app/Traits/ApiResponse.php`

### Fundraising

- [Campaign service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/CampaignService.php): `app/Services/Implementations/CampaignService.php`
- [Campaign repository](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Repositories/Implementations/CampaignRepository.php): `app/Repositories/Implementations/CampaignRepository.php`
- [Campaign records](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Models/Campaign.php): `app/Models/Campaign.php`
- [Donation service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/DonationService.php): `app/Services/Implementations/DonationService.php`
- [Payment service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/DonationPaymentService.php): `app/Services/Implementations/DonationPaymentService.php`
- [Midtrans integration](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/MidtransService.php): `app/Services/Implementations/MidtransService.php`
- [Withdrawal service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/WithdrawalService.php): `app/Services/Implementations/WithdrawalService.php`

### Identity

- [Authentication service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuthService.php): `app/Services/Implementations/AuthService.php`
- [Authentication repository](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Repositories/Implementations/AuthRepository.php): `app/Repositories/Implementations/AuthRepository.php`
- [OAuth accounts](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Models/OauthAccount.php): `app/Models/OauthAccount.php`

### Administration

- [Admin service](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AdminService.php): `app/Services/Implementations/AdminService.php`
- [Admin content controls](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/BannerController.php): `app/Http/Controllers/Api/BannerController.php`
- [Settings and FAQs](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Http/Controllers/Api/SiteSettingController.php): `app/Http/Controllers/Api/SiteSettingController.php`
- [Audit logging](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuditLogService.php): `app/Services/Implementations/AuditLogService.php`

### Messaging and state

- [Queued jobs](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Jobs/ProcessSuccessfulDonation.php): `app/Jobs/ProcessSuccessfulDonation.php`
- [Notifications](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/NotificationService.php): `app/Services/Implementations/NotificationService.php`
- [Redis OTP store](https://github.com/jonathangunawan30/fundraiser-backend/blob/main/app/Services/Implementations/AuthService.php): `app/Services/Implementations/AuthService.php`

### Other components

- **API clients**
- **Midtrans**
- **Google / GitHub**
- **Reverb WebSockets**
- **Resend email**

## Connections

- API clients → API routes: sends requests
- API routes → Campaign API: dispatches
- API routes → Donation API: dispatches
- API routes → Payment API: dispatches
- API routes → Withdrawal API: dispatches
- API routes → Authentication API: dispatches
- API routes → Admin API: dispatches
- Campaign API → Campaign service: calls
- Campaign service → Campaign repository: calls
- Campaign repository → Campaign records: reads and writes
- Campaign API → JSON responses: formats
- Donation API → Donation service: calls
- Payment API → Payment service: calls
- Payment service → Midtrans integration: calls
- Midtrans integration → Midtrans: processes payments
- Withdrawal API → Withdrawal service: calls
- Authentication API → Authentication service: calls
- Authentication service → Authentication repository: calls
- Authentication repository → OAuth accounts: reads and writes
- Google / GitHub → Authentication API: OAuth identity
- Authentication service → Redis OTP store: stores and checks OTP
- Authentication service → Queued jobs: dispatches OTP job
- Admin API → Admin service: calls
- Admin API → Campaign service: verifies campaigns
- Admin content controls → Settings and FAQs: administers
- Admin API → Audit logging: records actions
- Queued jobs → Resend email: sends email
- Notifications → Reverb WebSockets: broadcasts alerts
