# dwi2febri/lelang-bkkjateng architecture

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

- Interactive diagram: https://gitdiagram.com/dwi2febri/lelang-bkkjateng
- Repository: https://github.com/dwi2febri/lelang-bkkjateng

## Overview

Portal Lelang BKK Jateng is a public auction-asset catalog with an authenticated administration portal. Visitors browse and filter assets, inspect details and schedules, save favorites, and submit interest; administrators manage assets and follow up on submissions. The graph separates public and admin workflows, API domain services, and persistence. Some frontend-to-admin API wiring and unsampled feature implementations are documented but not shown in excerpts, so those connections are dashed rather than asserted as inspected calls.

Main entry points: [`apps/api/src/database/database.service.ts`](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/database/database.service.ts) (MySQL database), [`apps/api/src/admin/admin.controller.ts`](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/admin/admin.controller.ts) (Admin API), [`apps/web/src/features/aset/components/aset-form.tsx`](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/aset/components/aset-form.tsx) (Asset management), [`apps/web/src/features/pengajuan/components/pengajuan-list.tsx`](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/pengajuan/components/pengajuan-list.tsx) (Submission management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_public_ui["Public catalog<br/>[catalog-page.tsx]"]
  node_asset_detail["Asset detail<br/>[asset-detail.tsx]"]
  node_schedule["Auction schedule"]
  node_favorites["Favorites"]
  node_public_account_ui["Public account"]
  node_admin_assets_ui["Asset management<br/>[aset-form.tsx]"]
  node_submission_ui["Submission management<br/>[pengajuan-list.tsx]"]
  node_dashboard_ui["Admin dashboard<br/>[dashboard.tsx]"]
  node_catalog_client["Catalog client<br/>[catalog-service.ts]"]
end

subgraph group_api["API domains"]
  node_public_assets_api["Public asset API"]
  node_admin_api["Admin API"]
  node_categories_api["Category settings"]
  node_uploads_api["Asset uploads"]
end

subgraph group_identity["Identity and follow-up"]
  node_auth_api["Admin authentication<br/>[auth.service.ts]"]
  node_auth_guard["Admin guard<br/>[auth.guard.ts]"]
  node_public_account_api["Public accounts"]
  node_interest_chat["Interest messaging"]
  node_user_admin["User management"]
end

subgraph group_data["Persistence"]
  node_mysql[("MySQL database")]
end

node_visitor(("Visitor"))
node_admin(("Administrator"))

node_visitor -->|"browses"| node_public_ui
node_public_ui -.->|"loads catalog"| node_catalog_client
node_catalog_client -->|"requests assets"| node_public_assets_api
node_visitor -->|"views details"| node_asset_detail
node_visitor -->|"checks dates"| node_schedule
node_visitor -->|"saves favorites"| node_favorites
node_visitor -->|"registers account"| node_public_account_ui
node_visitor -->|"submits interest"| node_public_ui
node_public_assets_api -->|"reads and writes"| node_mysql
node_public_assets_api -->|"checks account"| node_public_account_api
node_admin -->|"manages assets"| node_admin_assets_ui
node_admin -->|"follows up"| node_submission_ui
node_admin -->|"reviews metrics"| node_dashboard_ui
node_admin_assets_ui -.->|"manages assets"| node_admin_api
node_submission_ui -.->|"updates submissions"| node_admin_api
node_dashboard_ui -.->|"loads metrics"| node_admin_api
node_admin_api -->|"reads and writes"| node_mysql
node_admin_api -->|"validates categories"| node_categories_api
node_admin_assets_ui -.->|"uploads media"| node_uploads_api
node_auth_guard -->|"checks session"| node_auth_api
node_auth_api -->|"stores sessions"| node_mysql
node_public_account_ui -.->|"uses account"| node_public_account_api
node_public_account_api -->|"stores account data"| node_mysql
node_submission_ui -.->|"messages applicants"| node_interest_chat
node_interest_chat -->|"stores messages"| node_mysql
node_admin -.->|"manages users"| node_user_admin
node_user_admin -->|"reads and writes"| node_mysql

click node_public_ui "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/catalog-page.tsx"
click node_asset_detail "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/asset-detail.tsx"
click node_schedule "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/schedule-calendar.tsx"
click node_favorites "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/public-favorites-provider.tsx"
click node_public_account_ui "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/public-account-page.tsx"
click node_admin_assets_ui "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/aset/components/aset-form.tsx"
click node_submission_ui "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/pengajuan/components/pengajuan-list.tsx"
click node_dashboard_ui "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/dashboard/components/dashboard.tsx"
click node_catalog_client "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/services/catalog-service.ts"
click node_public_assets_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/assets.controller.ts"
click node_admin_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/admin/admin.controller.ts"
click node_categories_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/category-settings.ts"
click node_uploads_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/asset-uploads.controller.ts"
click node_auth_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/auth/auth.service.ts"
click node_auth_guard "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/auth/auth.guard.ts"
click node_public_account_api "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/public-account/public-account.service.ts"
click node_interest_chat "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/interest-chat.controller.ts"
click node_user_admin "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/admin/users.controller.ts"
click node_mysql "https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/database/database.service.ts"

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_public_ui,node_asset_detail,node_schedule,node_favorites,node_public_account_ui,node_admin_assets_ui,node_submission_ui,node_dashboard_ui,node_catalog_client toneBlue
class node_public_assets_api,node_admin_api,node_categories_api,node_uploads_api toneAmber
class node_auth_api,node_auth_guard,node_public_account_api,node_interest_chat,node_user_admin toneMint
class node_mysql toneRose
class node_visitor,node_admin toneIndigo
```

## Components

### Web experience

- [Public catalog](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/catalog-page.tsx): `apps/web/src/features/catalog/components/catalog-page.tsx`
- [Asset detail](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/asset-detail.tsx): `apps/web/src/features/catalog/components/asset-detail.tsx`
- [Auction schedule](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/schedule-calendar.tsx): `apps/web/src/features/catalog/components/schedule-calendar.tsx`
- [Favorites](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/public-favorites-provider.tsx): `apps/web/src/features/catalog/public-favorites-provider.tsx`
- [Public account](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/components/public-account-page.tsx): `apps/web/src/features/catalog/components/public-account-page.tsx`
- [Asset management](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/aset/components/aset-form.tsx): `apps/web/src/features/aset/components/aset-form.tsx`
- [Submission management](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/pengajuan/components/pengajuan-list.tsx): `apps/web/src/features/pengajuan/components/pengajuan-list.tsx`
- [Admin dashboard](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/dashboard/components/dashboard.tsx): `apps/web/src/features/dashboard/components/dashboard.tsx`
- [Catalog client](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/web/src/features/catalog/services/catalog-service.ts): `apps/web/src/features/catalog/services/catalog-service.ts`

### API domains

- [Public asset API](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/assets.controller.ts): `apps/api/src/assets.controller.ts`
- [Admin API](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/admin/admin.controller.ts): `apps/api/src/admin/admin.controller.ts`
- [Category settings](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/category-settings.ts): `apps/api/src/category-settings.ts`
- [Asset uploads](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/asset-uploads.controller.ts): `apps/api/src/asset-uploads.controller.ts`

### Identity and follow-up

- [Admin authentication](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/auth/auth.service.ts): `apps/api/src/auth/auth.service.ts`
- [Admin guard](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/auth/auth.guard.ts): `apps/api/src/auth/auth.guard.ts`
- [Public accounts](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/public-account/public-account.service.ts): `apps/api/src/public-account/public-account.service.ts`
- [Interest messaging](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/interest-chat.controller.ts): `apps/api/src/interest-chat.controller.ts`
- [User management](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/admin/users.controller.ts): `apps/api/src/admin/users.controller.ts`

### Persistence

- [MySQL database](https://github.com/dwi2febri/lelang-bkkjateng/blob/main/apps/api/src/database/database.service.ts): `apps/api/src/database/database.service.ts`

### Other components

- **Visitor**
- **Administrator**

## Connections

- Visitor → Public catalog: browses
- Public catalog → Catalog client: loads catalog
- Catalog client → Public asset API: requests assets (evidence: `apps/web/src/features/catalog/services/catalog-service.ts`)
- Visitor → Asset detail: views details
- Visitor → Auction schedule: checks dates
- Visitor → Favorites: saves favorites
- Visitor → Public account: registers account
- Visitor → Public catalog: submits interest
- Public asset API → MySQL database: reads and writes (evidence: `apps/api/src/assets.controller.ts`)
- Public asset API → Public accounts: checks account (evidence: `apps/api/src/assets.controller.ts`)
- Administrator → Asset management: manages assets
- Administrator → Submission management: follows up
- Administrator → Admin dashboard: reviews metrics
- Asset management → Admin API: manages assets
- Submission management → Admin API: updates submissions
- Admin dashboard → Admin API: loads metrics
- Admin API → MySQL database: reads and writes (evidence: `apps/api/src/admin/admin.controller.ts`)
- Admin API → Category settings: validates categories (evidence: `apps/api/src/admin/admin.controller.ts`)
- Asset management → Asset uploads: uploads media
- Admin guard → Admin authentication: checks session (evidence: `apps/api/src/auth/auth.guard.ts`)
- Admin authentication → MySQL database: stores sessions (evidence: `apps/api/src/auth/auth.service.ts`)
- Public account → Public accounts: uses account
- Public accounts → MySQL database: stores account data (evidence: `apps/api/src/public-account/public-account.service.ts`)
- Submission management → Interest messaging: messages applicants
- Interest messaging → MySQL database: stores messages (evidence: `apps/api/src/interest-chat.controller.ts`)
- Administrator → User management: manages users
- User management → MySQL database: reads and writes (evidence: `apps/api/src/admin/users.controller.ts`)
