# razannabilwebdev/aplikasiujian architecture

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

## Overview

This repository is a Laravel-based computer-based testing application. The visible student workflow is login, browse open exams and session history, join with an exam token, take the exam with server-backed answers and session checks, then submit; dashboards expose role-specific summaries. The sampled service confirms idempotent session creation, answer seeding, violation recording and submission. The tree also shows browser-side autosave, timer and guard modules. Management workflows are not represented by sampled controllers, so the graph does not infer exam-authoring behavior or unverified route wiring.

Main entry points: [`app/Http/Controllers/Exam/EntryController.php`](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/EntryController.php) (Exam entry), [`app/Http/Controllers/DashboardController.php`](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/DashboardController.php) (Role dashboards), [`app/Http/Controllers/Exam/SessionController.php`](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/SessionController.php) (Session endpoints), [`app/Models`](https://github.com/razannabilwebdev/aplikasiujian/tree/main/app/Models) (Exam and user records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and dashboards"]
  node_login["Login"]
  node_dashboard["Role dashboards"]
  node_dashboard_views["Dashboard views"]
  node_auth_middleware["Role and session guards"]
end

subgraph group_exam["Exam sessions"]
  node_entry["Exam entry"]
  node_room_controller["Room page<br/>[RoomController.php]"]
  node_session_api["Session endpoints"]
  node_session_service["Session rules"]
  node_exam_gate["Exam access policy<br/>[ExamPolicy.php]"]
  node_exam_index["Exam list and history<br/>[index.blade.php]"]
  node_exam_room["Exam room view<br/>[room.blade.php]"]
end

subgraph group_client["Exam client"]
  node_exam_client["Exam browser modules"]
  node_app_client["Browser app entry<br/>[app.js]"]
end

subgraph group_data["Domain data"]
  node_models[("Exam and user records")]
end

node_student(("Student"))
node_staff(("Admin or teacher"))

node_student -->|"signs in"| node_login
node_staff -->|"signs in"| node_login
node_login -->|"redirects by role"| node_dashboard
node_student -->|"browses and joins"| node_entry
node_entry -->|"checks eligibility"| node_exam_gate
node_entry -->|"starts session"| node_session_service
node_entry -->|"reads exams and sessions"| node_models
node_entry -->|"renders list"| node_exam_index
node_student -->|"opens session"| node_room_controller
node_room_controller -->|"renders room"| node_exam_room
node_exam_room -->|"loads client behavior"| node_exam_client
node_exam_client -->|"sends session requests"| node_session_api
node_session_api -->|"delegates session rules"| node_session_service
node_session_service -->|"reads and writes records"| node_models
node_session_api -->|"reads session state"| node_models
node_staff -->|"opens dashboard"| node_dashboard
node_student -->|"opens dashboard"| node_dashboard
node_dashboard -->|"reads summary data"| node_models
node_dashboard -->|"renders by role"| node_dashboard_views
node_auth_middleware -.->|"guards endpoints"| node_session_api

click node_login "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Auth/LoginController.php"
click node_dashboard "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/DashboardController.php"
click node_dashboard_views "https://github.com/razannabilwebdev/aplikasiujian/tree/main/resources/views/dashboard"
click node_entry "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/EntryController.php"
click node_room_controller "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/RoomController.php"
click node_session_api "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/SessionController.php"
click node_session_service "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Services/ExamSessionService.php"
click node_exam_gate "https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Policies/ExamPolicy.php"
click node_exam_index "https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/views/exam/index.blade.php"
click node_exam_room "https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/views/exam/room.blade.php"
click node_exam_client "https://github.com/razannabilwebdev/aplikasiujian/tree/main/resources/js/exam"
click node_app_client "https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/js/app.js"
click node_auth_middleware "https://github.com/razannabilwebdev/aplikasiujian/tree/main/app/Http/Middleware"
click node_models "https://github.com/razannabilwebdev/aplikasiujian/tree/main/app/Models"

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_login,node_dashboard,node_dashboard_views,node_auth_middleware toneBlue
class node_entry,node_room_controller,node_session_api,node_session_service,node_exam_gate,node_exam_index,node_exam_room toneAmber
class node_exam_client,node_app_client toneMint
class node_models toneRose
class node_student,node_staff toneIndigo
```

## Components

### Access and dashboards

- [Login](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Auth/LoginController.php): `app/Http/Controllers/Auth/LoginController.php`
- [Role dashboards](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/DashboardController.php): `app/Http/Controllers/DashboardController.php`
- [Dashboard views](https://github.com/razannabilwebdev/aplikasiujian/tree/main/resources/views/dashboard): `resources/views/dashboard`
- [Role and session guards](https://github.com/razannabilwebdev/aplikasiujian/tree/main/app/Http/Middleware): `app/Http/Middleware`

### Exam sessions

- [Exam entry](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/EntryController.php): `app/Http/Controllers/Exam/EntryController.php`
- [Room page](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/RoomController.php): `app/Http/Controllers/Exam/RoomController.php`
- [Session endpoints](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Http/Controllers/Exam/SessionController.php): `app/Http/Controllers/Exam/SessionController.php`
- [Session rules](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Services/ExamSessionService.php): `app/Services/ExamSessionService.php`
- [Exam access policy](https://github.com/razannabilwebdev/aplikasiujian/blob/main/app/Policies/ExamPolicy.php): `app/Policies/ExamPolicy.php`
- [Exam list and history](https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/views/exam/index.blade.php): `resources/views/exam/index.blade.php`
- [Exam room view](https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/views/exam/room.blade.php): `resources/views/exam/room.blade.php`

### Exam client

- [Exam browser modules](https://github.com/razannabilwebdev/aplikasiujian/tree/main/resources/js/exam): `resources/js/exam`
- [Browser app entry](https://github.com/razannabilwebdev/aplikasiujian/blob/main/resources/js/app.js): `resources/js/app.js`

### Domain data

- [Exam and user records](https://github.com/razannabilwebdev/aplikasiujian/tree/main/app/Models): `app/Models`

### Other components

- **Student**
- **Admin or teacher**

## Connections

- Student → Login: signs in
- Admin or teacher → Login: signs in
- Login → Role dashboards: redirects by role
- Student → Exam entry: browses and joins
- Exam entry → Exam access policy: checks eligibility
- Exam entry → Session rules: starts session
- Exam entry → Exam and user records: reads exams and sessions
- Exam entry → Exam list and history: renders list
- Student → Room page: opens session
- Room page → Exam room view: renders room
- Exam room view → Exam browser modules: loads client behavior
- Exam browser modules → Session endpoints: sends session requests
- Session endpoints → Session rules: delegates session rules
- Session rules → Exam and user records: reads and writes records
- Session endpoints → Exam and user records: reads session state
- Admin or teacher → Role dashboards: opens dashboard
- Student → Role dashboards: opens dashboard
- Role dashboards → Exam and user records: reads summary data
- Role dashboards → Dashboard views: renders by role
- Role and session guards → Session endpoints: guards endpoints
