# dodfrm/ipkm-service architecture

> Architecture diagram of the GitHub repository dodfrm/ipkm-service, 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/dodfrm/ipkm-service
- Repository: https://github.com/dodfrm/ipkm-service

## Overview

This is a Sipadu NestJS microservice template carrying an IPKM student-achievement domain: users submit IPKM applications and evidence, while staff manage verifier assignments, scoring, and reference data. The tree also shows student-IPKM calculations, participant management, semester and student lookup, and file handling. Sampled controllers confirm delegation for applications, verifier imports, and reference-data CRUD; other domain modules are represented from their paths and names. The README documents Traefik-header authentication, CASL authorization, validation, and Prisma, but most service internals were not sampled, so their interactions are not inferred.

Main entry points: [`src/main.ts`](https://github.com/dodfrm/ipkm-service/blob/main/src/main.ts) (NestJS API), [`common/middlewares/auth.middleware.ts`](https://github.com/dodfrm/ipkm-service/blob/main/common/middlewares/auth.middleware.ts) (Header authentication), [`src/ipkm-pengajuan/ipkm-pengajuan.service.ts`](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-pengajuan/ipkm-pengajuan.service.ts) (IPKM applications), [`src/master-subkomponen-skala/master-subkomponen-skala.service.ts`](https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen-skala/master-subkomponen-skala.service.ts) (Scoring scales)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and platform"]
  node_api["NestJS API<br/>[main.ts]"]
  node_auth["Header authentication<br/>[auth.middleware.ts]"]
  node_casl["CASL authorization"]
  node_prisma["Prisma service<br/>[prisma.service.ts]"]
end

subgraph group_ipkm["IPKM workflow"]
  node_application["IPKM applications"]
  node_participants["Application participants"]
  node_assessment["IPKM assessment"]
  node_student_ipkm["Student IPKM"]
  node_calculation["IPKM calculation"]
  node_scores["Component scores"]
  node_file["File handling<br/>[file.service.ts]"]
end

subgraph group_reference["Scoring reference data"]
  node_master_components["Master components"]
  node_master_subcomponents["Master subcomponents"]
  node_scales["Scoring scales"]
  node_scale_assessments["Scale assessments"]
  node_points["Point conversion"]
end

subgraph group_student["Student administration"]
  node_verifiers["Student verifiers"]
  node_student_details["Student details"]
  node_active_students["Active students"]
  node_semesters["Semesters"]
end

node_traefik(("Traefik gateway"))

node_traefik -->|"sends headers"| node_auth
node_auth -->|"injects user"| node_api
node_api -.->|"routes requests"| node_application
node_application -->|"delegates CRUD"| node_api
node_api -.->|"routes requests"| node_verifiers
node_verifiers -->|"delegates CRUD"| node_api
node_api -.->|"routes requests"| node_scale_assessments
node_scale_assessments -->|"delegates CRUD"| node_api
node_api -.->|"routes requests"| node_scales
node_scales -->|"delegates CRUD"| node_api

click node_api "https://github.com/dodfrm/ipkm-service/blob/main/src/main.ts"
click node_auth "https://github.com/dodfrm/ipkm-service/blob/main/common/middlewares/auth.middleware.ts"
click node_casl "https://github.com/dodfrm/ipkm-service/blob/main/src/common/casl/casl-ability.factory.ts"
click node_prisma "https://github.com/dodfrm/ipkm-service/blob/main/src/common/prisma/prisma.service.ts"
click node_application "https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-pengajuan/ipkm-pengajuan.service.ts"
click node_participants "https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-pengajuan-peserta/ipkm-pengajuan-peserta.service.ts"
click node_assessment "https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-penilaian/ipkm-penilaian.service.ts"
click node_student_ipkm "https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-mahasiswa/ipkm-mahasiswa.service.ts"
click node_calculation "https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-mahasiswa/calculate-ipkm.service.ts"
click node_scores "https://github.com/dodfrm/ipkm-service/blob/main/src/nilai-komponen-mahasiswa/perhitungan-ipkm.service.ts"
click node_verifiers "https://github.com/dodfrm/ipkm-service/blob/main/src/verifikator-mahasiswa/verifikator-mahasiswa.service.ts"
click node_student_details "https://github.com/dodfrm/ipkm-service/blob/main/src/user-mahasiswa-detail/user-mahasiswa-detail.service.ts"
click node_active_students "https://github.com/dodfrm/ipkm-service/blob/main/src/mahasiswa-aktif/mahasiswa-aktif.service.ts"
click node_semesters "https://github.com/dodfrm/ipkm-service/blob/main/src/semester/semester.service.ts"
click node_master_components "https://github.com/dodfrm/ipkm-service/blob/main/src/master-komponen/master-komponen.service.ts"
click node_master_subcomponents "https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen/master-subkomponen.service.ts"
click node_scales "https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen-skala/master-subkomponen-skala.service.ts"
click node_scale_assessments "https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen-skala-penilaian/master-subkomponen-skala-penilaian.service.ts"
click node_points "https://github.com/dodfrm/ipkm-service/blob/main/src/master-konverter-poin/master-konverter-poin.service.ts"
click node_file "https://github.com/dodfrm/ipkm-service/blob/main/src/file/file.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_api,node_auth,node_casl,node_prisma toneBlue
class node_application,node_participants,node_assessment,node_student_ipkm,node_calculation,node_scores,node_file toneAmber
class node_master_components,node_master_subcomponents,node_scales,node_scale_assessments,node_points toneMint
class node_verifiers,node_student_details,node_active_students,node_semesters toneRose
class node_traefik toneIndigo
```

## Components

### Access and platform

- [NestJS API](https://github.com/dodfrm/ipkm-service/blob/main/src/main.ts): `src/main.ts`
- [Header authentication](https://github.com/dodfrm/ipkm-service/blob/main/common/middlewares/auth.middleware.ts): `common/middlewares/auth.middleware.ts`
- [CASL authorization](https://github.com/dodfrm/ipkm-service/blob/main/src/common/casl/casl-ability.factory.ts): `src/common/casl/casl-ability.factory.ts`
- [Prisma service](https://github.com/dodfrm/ipkm-service/blob/main/src/common/prisma/prisma.service.ts): `src/common/prisma/prisma.service.ts`

### IPKM workflow

- [IPKM applications](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-pengajuan/ipkm-pengajuan.service.ts): `src/ipkm-pengajuan/ipkm-pengajuan.service.ts`
- [Application participants](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-pengajuan-peserta/ipkm-pengajuan-peserta.service.ts): `src/ipkm-pengajuan-peserta/ipkm-pengajuan-peserta.service.ts`
- [IPKM assessment](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-penilaian/ipkm-penilaian.service.ts): `src/ipkm-penilaian/ipkm-penilaian.service.ts`
- [Student IPKM](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-mahasiswa/ipkm-mahasiswa.service.ts): `src/ipkm-mahasiswa/ipkm-mahasiswa.service.ts`
- [IPKM calculation](https://github.com/dodfrm/ipkm-service/blob/main/src/ipkm-mahasiswa/calculate-ipkm.service.ts): `src/ipkm-mahasiswa/calculate-ipkm.service.ts`
- [Component scores](https://github.com/dodfrm/ipkm-service/blob/main/src/nilai-komponen-mahasiswa/perhitungan-ipkm.service.ts): `src/nilai-komponen-mahasiswa/perhitungan-ipkm.service.ts`
- [File handling](https://github.com/dodfrm/ipkm-service/blob/main/src/file/file.service.ts): `src/file/file.service.ts`

### Scoring reference data

- [Master components](https://github.com/dodfrm/ipkm-service/blob/main/src/master-komponen/master-komponen.service.ts): `src/master-komponen/master-komponen.service.ts`
- [Master subcomponents](https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen/master-subkomponen.service.ts): `src/master-subkomponen/master-subkomponen.service.ts`
- [Scoring scales](https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen-skala/master-subkomponen-skala.service.ts): `src/master-subkomponen-skala/master-subkomponen-skala.service.ts`
- [Scale assessments](https://github.com/dodfrm/ipkm-service/blob/main/src/master-subkomponen-skala-penilaian/master-subkomponen-skala-penilaian.service.ts): `src/master-subkomponen-skala-penilaian/master-subkomponen-skala-penilaian.service.ts`
- [Point conversion](https://github.com/dodfrm/ipkm-service/blob/main/src/master-konverter-poin/master-konverter-poin.service.ts): `src/master-konverter-poin/master-konverter-poin.service.ts`

### Student administration

- [Student verifiers](https://github.com/dodfrm/ipkm-service/blob/main/src/verifikator-mahasiswa/verifikator-mahasiswa.service.ts): `src/verifikator-mahasiswa/verifikator-mahasiswa.service.ts`
- [Student details](https://github.com/dodfrm/ipkm-service/blob/main/src/user-mahasiswa-detail/user-mahasiswa-detail.service.ts): `src/user-mahasiswa-detail/user-mahasiswa-detail.service.ts`
- [Active students](https://github.com/dodfrm/ipkm-service/blob/main/src/mahasiswa-aktif/mahasiswa-aktif.service.ts): `src/mahasiswa-aktif/mahasiswa-aktif.service.ts`
- [Semesters](https://github.com/dodfrm/ipkm-service/blob/main/src/semester/semester.service.ts): `src/semester/semester.service.ts`

### Other components

- **Traefik gateway**

## Connections

- Traefik gateway → Header authentication: sends headers (evidence: `README.md`)
- Header authentication → NestJS API: injects user (evidence: `README.md`)
- NestJS API → IPKM applications: routes requests
- IPKM applications → NestJS API: delegates CRUD
- NestJS API → Student verifiers: routes requests
- Student verifiers → NestJS API: delegates CRUD
- NestJS API → Scale assessments: routes requests
- Scale assessments → NestJS API: delegates CRUD
- NestJS API → Scoring scales: routes requests
- Scoring scales → NestJS API: delegates CRUD
