# kotajakarta/backend-api architecture

> Architecture diagram of the GitHub repository kotajakarta/backend-api, 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/kotajakarta/backend-api
- Repository: https://github.com/kotajakarta/backend-api

## Overview

Edaimi Backend API is a centralized NestJS gateway for school, pesantren, attendance, and related applications. The main workflow is a client request entering the API, passing authentication and access control where applicable, and reaching a domain controller and service that produce a response or perform a domain operation. The product spans student and organizational administration, academic and pesantren operations, and supporting workflows such as admissions, letters, and discipline. README documents PostgreSQL multi-schema storage and shared Redis/MinIO infrastructure; source excerpts are partial, so only directly evidenced controller-to-service calls and selected integrations are connected here.

Main entry points: [`src/main.ts`](https://github.com/kotajakarta/backend-api/blob/main/src/main.ts) (NestJS API), [`src/common/guards/access-control.guard.ts`](https://github.com/kotajakarta/backend-api/blob/main/src/common/guards/access-control.guard.ts) (Access control), [`src/modules/core/student/student.controller.ts`](https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/student/student.controller.ts) (Student API), [`src/modules/formal/formal.controller.ts`](https://github.com/kotajakarta/backend-api/blob/main/src/modules/formal/formal.controller.ts) (Formal school API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and security"]
  node_api["NestJS API<br/>[main.ts]"]
  node_access["Access control"]
end

subgraph group_people["Identity and administration"]
  node_auth_controller["Authentication API<br/>[auth.controller.ts]"]
  node_auth_service["Authentication<br/>[auth.service.ts]"]
  node_students_controller["Student API"]
  node_students_service["Student services<br/>[student.service.ts]"]
  node_master_controller["Master data API"]
  node_master_service["Master data"]
  node_admin["User administration<br/>[admin.service.ts]"]
end

subgraph group_school["School operations"]
  node_formal_controller["Formal school API"]
  node_formal_service["Formal academics<br/>[formal.service.ts]"]
  node_learning["Learning records"]
  node_question_banks["Question banks"]
end

subgraph group_pesantren["Pesantren operations"]
  node_attendance_controller["Attendance API"]
  node_attendance_service["Attendance records<br/>[absensi.service.ts]"]
  node_pesantren_external["External pesantren API"]
  node_portal["Family portal<br/>[portal.service.ts]"]
  node_discipline["Discipline workflows"]
  node_activities["Activities"]
end

subgraph group_support["Shared services"]
  node_letters["Letters"]
  node_dashboard["Dashboards"]
  node_prisma[("PostgreSQL access<br/>[prisma.service.ts]")]
  node_redis[("Redis services<br/>[redis.service.ts]")]
  node_minio[("Object storage<br/>[minio.service.ts]")]
  node_cctv_proxy["CCTV stream proxy"]
end

node_clients(("Applications"))

node_clients -->|"send requests"| node_api
node_api -->|"routes requests"| node_auth_controller
node_api -->|"routes requests"| node_students_controller
node_api -->|"routes requests"| node_master_controller
node_api -->|"routes requests"| node_formal_controller
node_api -->|"routes requests"| node_attendance_controller
node_api -->|"routes requests"| node_pesantren_external
node_api -->|"routes requests"| node_activities
node_api -->|"routes requests"| node_letters
node_api -->|"routes requests"| node_cctv_proxy
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"queries users"| node_prisma
node_students_controller -->|"calls"| node_students_service
node_master_controller -->|"calls"| node_master_service
node_formal_controller -->|"calls"| node_formal_service
node_attendance_controller -->|"calls"| node_attendance_service
node_activities -->|"guards routes"| node_access
node_letters -->|"guards routes"| node_access
node_formal_controller -->|"guards routes"| node_access
node_students_controller -->|"guards routes"| node_access
node_attendance_controller -->|"guards routes"| node_access
node_cctv_proxy -->|"reads settings"| node_prisma
node_activities -->|"uses storage"| node_minio
node_letters -->|"uses storage"| node_minio

click node_api "https://github.com/kotajakarta/backend-api/blob/main/src/main.ts"
click node_access "https://github.com/kotajakarta/backend-api/blob/main/src/common/guards/access-control.guard.ts"
click node_auth_controller "https://github.com/kotajakarta/backend-api/blob/main/src/modules/auth/auth.controller.ts"
click node_auth_service "https://github.com/kotajakarta/backend-api/blob/main/src/modules/auth/auth.service.ts"
click node_students_controller "https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/student/student.controller.ts"
click node_students_service "https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/student/student.service.ts"
click node_master_controller "https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/master/master-data.controller.ts"
click node_master_service "https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/master/master-data.service.ts"
click node_admin "https://github.com/kotajakarta/backend-api/blob/main/src/modules/admin/admin.service.ts"
click node_formal_controller "https://github.com/kotajakarta/backend-api/blob/main/src/modules/formal/formal.controller.ts"
click node_formal_service "https://github.com/kotajakarta/backend-api/blob/main/src/modules/formal/formal.service.ts"
click node_learning "https://github.com/kotajakarta/backend-api/blob/main/src/modules/pembelajaran/pembelajaran.service.ts"
click node_question_banks "https://github.com/kotajakarta/backend-api/blob/main/src/modules/bank-soal/services/bank-soal.service.ts"
click node_attendance_controller "https://github.com/kotajakarta/backend-api/blob/main/src/modules/absensi/absensi.controller.ts"
click node_attendance_service "https://github.com/kotajakarta/backend-api/blob/main/src/modules/absensi/absensi.service.ts"
click node_pesantren_external "https://github.com/kotajakarta/backend-api/blob/main/src/modules/external/pesantren/pesantren-external.controller.ts"
click node_portal "https://github.com/kotajakarta/backend-api/blob/main/src/modules/portal/portal.service.ts"
click node_discipline "https://github.com/kotajakarta/backend-api/blob/main/src/modules/indisipliner/indisipliner.service.ts"
click node_activities "https://github.com/kotajakarta/backend-api/blob/main/src/modules/kegiatan/kegiatan.controller.ts"
click node_letters "https://github.com/kotajakarta/backend-api/blob/main/src/modules/surat/surat.controller.ts"
click node_dashboard "https://github.com/kotajakarta/backend-api/blob/main/src/modules/dashboard/dashboard.service.ts"
click node_prisma "https://github.com/kotajakarta/backend-api/blob/main/src/common/prisma/prisma.service.ts"
click node_redis "https://github.com/kotajakarta/backend-api/blob/main/src/common/redis/redis.service.ts"
click node_minio "https://github.com/kotajakarta/backend-api/blob/main/src/common/minio/minio.service.ts"
click node_cctv_proxy "https://github.com/kotajakarta/backend-api/blob/main/src/modules/portal/cctv-proxy.controller.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_api,node_access toneBlue
class node_auth_controller,node_auth_service,node_students_controller,node_students_service,node_master_controller,node_master_service,node_admin toneAmber
class node_formal_controller,node_formal_service,node_learning,node_question_banks toneMint
class node_attendance_controller,node_attendance_service,node_pesantren_external,node_portal,node_discipline,node_activities toneRose
class node_letters,node_dashboard,node_prisma,node_redis,node_minio,node_cctv_proxy,node_clients toneIndigo
```

## Components

### API and security

- [NestJS API](https://github.com/kotajakarta/backend-api/blob/main/src/main.ts): `src/main.ts`
- [Access control](https://github.com/kotajakarta/backend-api/blob/main/src/common/guards/access-control.guard.ts): `src/common/guards/access-control.guard.ts`

### Identity and administration

- [Authentication API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/auth/auth.controller.ts): `src/modules/auth/auth.controller.ts`
- [Authentication](https://github.com/kotajakarta/backend-api/blob/main/src/modules/auth/auth.service.ts): `src/modules/auth/auth.service.ts`
- [Student API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/student/student.controller.ts): `src/modules/core/student/student.controller.ts`
- [Student services](https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/student/student.service.ts): `src/modules/core/student/student.service.ts`
- [Master data API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/master/master-data.controller.ts): `src/modules/core/master/master-data.controller.ts`
- [Master data](https://github.com/kotajakarta/backend-api/blob/main/src/modules/core/master/master-data.service.ts): `src/modules/core/master/master-data.service.ts`
- [User administration](https://github.com/kotajakarta/backend-api/blob/main/src/modules/admin/admin.service.ts): `src/modules/admin/admin.service.ts`

### School operations

- [Formal school API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/formal/formal.controller.ts): `src/modules/formal/formal.controller.ts`
- [Formal academics](https://github.com/kotajakarta/backend-api/blob/main/src/modules/formal/formal.service.ts): `src/modules/formal/formal.service.ts`
- [Learning records](https://github.com/kotajakarta/backend-api/blob/main/src/modules/pembelajaran/pembelajaran.service.ts): `src/modules/pembelajaran/pembelajaran.service.ts`
- [Question banks](https://github.com/kotajakarta/backend-api/blob/main/src/modules/bank-soal/services/bank-soal.service.ts): `src/modules/bank-soal/services/bank-soal.service.ts`

### Pesantren operations

- [Attendance API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/absensi/absensi.controller.ts): `src/modules/absensi/absensi.controller.ts`
- [Attendance records](https://github.com/kotajakarta/backend-api/blob/main/src/modules/absensi/absensi.service.ts): `src/modules/absensi/absensi.service.ts`
- [External pesantren API](https://github.com/kotajakarta/backend-api/blob/main/src/modules/external/pesantren/pesantren-external.controller.ts): `src/modules/external/pesantren/pesantren-external.controller.ts`
- [Family portal](https://github.com/kotajakarta/backend-api/blob/main/src/modules/portal/portal.service.ts): `src/modules/portal/portal.service.ts`
- [Discipline workflows](https://github.com/kotajakarta/backend-api/blob/main/src/modules/indisipliner/indisipliner.service.ts): `src/modules/indisipliner/indisipliner.service.ts`
- [Activities](https://github.com/kotajakarta/backend-api/blob/main/src/modules/kegiatan/kegiatan.controller.ts): `src/modules/kegiatan/kegiatan.controller.ts`

### Shared services

- [Letters](https://github.com/kotajakarta/backend-api/blob/main/src/modules/surat/surat.controller.ts): `src/modules/surat/surat.controller.ts`
- [Dashboards](https://github.com/kotajakarta/backend-api/blob/main/src/modules/dashboard/dashboard.service.ts): `src/modules/dashboard/dashboard.service.ts`
- [PostgreSQL access](https://github.com/kotajakarta/backend-api/blob/main/src/common/prisma/prisma.service.ts): `src/common/prisma/prisma.service.ts`
- [Redis services](https://github.com/kotajakarta/backend-api/blob/main/src/common/redis/redis.service.ts): `src/common/redis/redis.service.ts`
- [Object storage](https://github.com/kotajakarta/backend-api/blob/main/src/common/minio/minio.service.ts): `src/common/minio/minio.service.ts`
- [CCTV stream proxy](https://github.com/kotajakarta/backend-api/blob/main/src/modules/portal/cctv-proxy.controller.ts): `src/modules/portal/cctv-proxy.controller.ts`

### Other components

- **Applications**

## Connections

- Applications → NestJS API: send requests
- NestJS API → Authentication API: routes requests
- NestJS API → Student API: routes requests
- NestJS API → Master data API: routes requests
- NestJS API → Formal school API: routes requests
- NestJS API → Attendance API: routes requests
- NestJS API → External pesantren API: routes requests
- NestJS API → Activities: routes requests
- NestJS API → Letters: routes requests
- NestJS API → CCTV stream proxy: routes requests
- Authentication API → Authentication: calls
- Authentication → PostgreSQL access: queries users
- Student API → Student services: calls
- Master data API → Master data: calls
- Formal school API → Formal academics: calls
- Attendance API → Attendance records: calls
- Activities → Access control: guards routes
- Letters → Access control: guards routes
- Formal school API → Access control: guards routes
- Student API → Access control: guards routes
- Attendance API → Access control: guards routes
- CCTV stream proxy → PostgreSQL access: reads settings
- Activities → Object storage: uses storage
- Letters → Object storage: uses storage
