# curteinnn/apkoffice architecture

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

## Overview

APOffice is represented here as a Spring backend for user administration, JWT login, attendance check-in/out, and task submission and review. Users and administrators call REST controllers; controllers delegate to services, which apply domain rules and use JPA repositories for persistence. Login additionally issues a JWT, while the authentication filter and security configuration indicate a protected-request layer. The README is empty and no employee or admin frontend source is present, so clients and database details are not inferred; security wiring is shown only at a high level.

Main entry points: [`backend/src/main/java/com/apoffice/backend/repository/UserRepository.java`](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/UserRepository.java) (User Repository), [`backend/src/main/java/com/apoffice/backend/config/JwtAuthenticationFilter.java`](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/config/JwtAuthenticationFilter.java) (JWT Filter), [`backend/src/main/java/com/apoffice/backend/controller/AttendanceController.java`](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/AttendanceController.java) (Attendance API), [`backend/src/main/java/com/apoffice/backend/controller/TugasController.java`](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/TugasController.java) (Task API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_auth_controller["Auth API"]
  node_user_controller["User API"]
  node_attendance_controller["Attendance API"]
  node_tugas_controller["Task API"]
end

subgraph group_domain["Workflows"]
  node_user_service["User Management<br/>[UserService.java]"]
  node_attendance_service["Attendance Rules"]
  node_tugas_service["Task Review<br/>[TugasService.java]"]
end

subgraph group_security["Authentication"]
  node_auth_service["Login Service<br/>[AuthService.java]"]
  node_jwt_service["JWT Issuer<br/>[JwtService.java]"]
  node_jwt_filter["JWT Filter"]
  node_security_config["Security Config"]
end

subgraph group_data["Persistence"]
  node_user_repository["User Repository"]
  node_attendance_repository["Attendance Repository"]
  node_tugas_repository["Task Repository"]
  node_database[("Relational Database")]
end

node_employee(("Employee"))
node_admin(("Administrator"))

node_employee -->|"login request"| node_auth_controller
node_admin -->|"login request"| node_auth_controller
node_employee -->|"attendance actions"| node_attendance_controller
node_employee -->|"submit tasks"| node_tugas_controller
node_admin -->|"manage users"| node_user_controller
node_admin -->|"view attendance"| node_attendance_controller
node_admin -->|"review tasks"| node_tugas_controller
node_auth_controller -->|"delegates login"| node_auth_service
node_auth_service -->|"looks up user"| node_user_repository
node_auth_service -->|"issues token"| node_jwt_service
node_jwt_filter -->|"authorizes requests"| node_user_controller
node_jwt_filter -->|"authorizes requests"| node_attendance_controller
node_jwt_filter -->|"authorizes requests"| node_tugas_controller
node_security_config -->|"configures filter"| node_jwt_filter
node_user_controller -->|"delegates management"| node_user_service
node_attendance_controller -->|"delegates attendance"| node_attendance_service
node_tugas_controller -->|"delegates tasks"| node_tugas_service
node_user_service -->|"reads and writes"| node_user_repository
node_attendance_service -->|"finds user"| node_user_repository
node_attendance_service -->|"checks and saves"| node_attendance_repository
node_tugas_service -->|"finds user"| node_user_repository
node_tugas_service -->|"reads and saves"| node_tugas_repository
node_user_repository -->|"persists users"| node_database
node_attendance_repository -->|"persists attendance"| node_database
node_tugas_repository -->|"persists tasks"| node_database

click node_auth_controller "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/AuthController.java"
click node_user_controller "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/UserController.java"
click node_attendance_controller "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/AttendanceController.java"
click node_tugas_controller "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/TugasController.java"
click node_auth_service "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/AuthService.java"
click node_jwt_service "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/JwtService.java"
click node_jwt_filter "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/config/JwtAuthenticationFilter.java"
click node_security_config "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/config/SecurityConfig.java"
click node_user_service "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/UserService.java"
click node_attendance_service "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/AttendanceService.java"
click node_tugas_service "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/TugasService.java"
click node_user_repository "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/UserRepository.java"
click node_attendance_repository "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/AttendanceRepository.java"
click node_tugas_repository "https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/TugasRepository.java"

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_auth_controller,node_user_controller,node_attendance_controller,node_tugas_controller toneBlue
class node_user_service,node_attendance_service,node_tugas_service toneAmber
class node_auth_service,node_jwt_service,node_jwt_filter,node_security_config toneMint
class node_user_repository,node_attendance_repository,node_tugas_repository,node_database toneRose
class node_employee,node_admin toneIndigo
```

## Components

### REST API

- [Auth API](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/AuthController.java): `backend/src/main/java/com/apoffice/backend/controller/AuthController.java`
- [User API](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/UserController.java): `backend/src/main/java/com/apoffice/backend/controller/UserController.java`
- [Attendance API](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/AttendanceController.java): `backend/src/main/java/com/apoffice/backend/controller/AttendanceController.java`
- [Task API](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/controller/TugasController.java): `backend/src/main/java/com/apoffice/backend/controller/TugasController.java`

### Workflows

- [User Management](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/UserService.java): `backend/src/main/java/com/apoffice/backend/service/UserService.java`
- [Attendance Rules](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/AttendanceService.java): `backend/src/main/java/com/apoffice/backend/service/AttendanceService.java`
- [Task Review](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/TugasService.java): `backend/src/main/java/com/apoffice/backend/service/TugasService.java`

### Authentication

- [Login Service](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/AuthService.java): `backend/src/main/java/com/apoffice/backend/service/AuthService.java`
- [JWT Issuer](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/service/JwtService.java): `backend/src/main/java/com/apoffice/backend/service/JwtService.java`
- [JWT Filter](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/config/JwtAuthenticationFilter.java): `backend/src/main/java/com/apoffice/backend/config/JwtAuthenticationFilter.java`
- [Security Config](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/config/SecurityConfig.java): `backend/src/main/java/com/apoffice/backend/config/SecurityConfig.java`

### Persistence

- [User Repository](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/UserRepository.java): `backend/src/main/java/com/apoffice/backend/repository/UserRepository.java`
- [Attendance Repository](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/AttendanceRepository.java): `backend/src/main/java/com/apoffice/backend/repository/AttendanceRepository.java`
- [Task Repository](https://github.com/curteinnn/apkoffice/blob/main/backend/src/main/java/com/apoffice/backend/repository/TugasRepository.java): `backend/src/main/java/com/apoffice/backend/repository/TugasRepository.java`
- **Relational Database**

### Other components

- **Employee**
- **Administrator**

## Connections

- Employee → Auth API: login request
- Administrator → Auth API: login request
- Employee → Attendance API: attendance actions
- Employee → Task API: submit tasks
- Administrator → User API: manage users
- Administrator → Attendance API: view attendance
- Administrator → Task API: review tasks
- Auth API → Login Service: delegates login
- Login Service → User Repository: looks up user
- Login Service → JWT Issuer: issues token
- JWT Filter → User API: authorizes requests
- JWT Filter → Attendance API: authorizes requests
- JWT Filter → Task API: authorizes requests
- Security Config → JWT Filter: configures filter
- User API → User Management: delegates management
- Attendance API → Attendance Rules: delegates attendance
- Task API → Task Review: delegates tasks
- User Management → User Repository: reads and writes
- Attendance Rules → User Repository: finds user
- Attendance Rules → Attendance Repository: checks and saves
- Task Review → User Repository: finds user
- Task Review → Task Repository: reads and saves
- User Repository → Relational Database: persists users
- Attendance Repository → Relational Database: persists attendance
- Task Repository → Relational Database: persists tasks
