Collabora adalah aplikasi berbasis web untuk manajemen proyek dan tugas yang dirancang untuk memfasilitasi kolaborasi antara mahasiswa dan dosen dalam proyek akademik, seperti tugas besar atau capstone. Aplikasi ini mendukung fitur autentikasi, manajemen proyek, tugas, komentar, notifikasi, dan visualisasi timeline proyek. Backend dibangun menggunakan Spring Boot (Java), frontend menggunakan React.js, dan database menggunakan MySQL.
Dokumentasi ini menjelaskan cara menginstal, menjalankan, dan menguji aplikasi, serta struktur proyek dan teknologi yang digunakan. Collabora dikembangkan sebagai bagian dari Tugas Besar Pemrograman Berorientasi Objek (PBO).
- Fitur Aplikasi
- Prasyarat
- Instalasi
- Struktur Proyek
- Menjalankan Aplikasi
- Pengujian dengan Postman
- Catatan Error
- Kontribusi
Berdasarkan ide/proposal tugas besar, Collabora menyediakan fitur berikut:
- Autentikasi dan Otorisasi:
- Login dan registrasi untuk mahasiswa dan dosen.
- Autentikasi berbasis JWT (JSON Web Token).
- Role-based access control (STUDENT, LECTURER).
- Manajemen Proyek:
- Membuat, mengedit, dan menghapus proyek.
- Menambahkan anggota proyek (mahasiswa/dosen).
- Manajemen Tugas:
- Membuat, mengedit, dan menghapus tugas dalam proyek.
- Menetapkan tugas ke anggota proyek.
- Melacak status tugas (NOT_STARTED, IN_PROGRESS, COMPLETED) dan milestone.
- Komentar:
- Menambahkan komentar pada tugas untuk diskusi.
- Mendukung komentar bersarang (replies).
- Notifikasi:
- Notifikasi real-time untuk tugas baru, pembaruan status, atau komentar.
- Visualisasi Timeline:
- Menampilkan timeline proyek dengan milestone dan tenggat waktu tugas.
- Antarmuka Pengguna:
- Dashboard interaktif dengan kanban board untuk tugas.
- Modal untuk membuat proyek/tugas.
- Notifikasi toast untuk pembaruan.
Untuk menjalankan Collabora, Anda memerlukan perangkat lunak berikut:
- Java Development Kit (JDK): Versi 17 atau lebih tinggi.
- Maven: Build tool untuk mengelola dependensi dan membangun proyek.
- MySQL: Database relasional (versi 8.0 atau lebih tinggi).
- IDE: IntelliJ IDEA (disarankan) atau Eclipse.
- Node.js: Versi 16 atau lebih tinggi (termasuk npm).
- Text Editor: Visual Studio Code (disarankan).
- Postman: Untuk menguji API REST.
- Windows, macOS, atau Linux.
Ikuti langkah-langkah berikut untuk menginstal dependensi dan menyiapkan lingkungan pengembangan.
- Unduh JDK 17 dari Oracle atau OpenJDK.
- Instal JDK dan atur variabel lingkungan
JAVA_HOME:- Windows: Tambahkan
JAVA_HOMEke System Environment Variables (contoh:C:\Program Files\Java\jdk-17). - Linux/macOS: Tambahkan ke
~/.bashrcatau~/.zshrc:export JAVA_HOME=/path/to/jdk-17 export PATH=$JAVA_HOME/bin:$PATH
- Windows: Tambahkan
- Verifikasi instalasi:
Output:
java -version
java version "17.0.x".
- Unduh Maven dari Apache Maven.
- Ekstrak ke direktori (contoh:
C:\maven). - Tambahkan Maven ke
PATH:- Windows: Tambahkan
C:\maven\binke System Environment Variables. - Linux/macOS: Tambahkan ke
~/.bashrcatau~/.zshrc:export PATH=/path/to/maven/bin:$PATH
- Windows: Tambahkan
- Verifikasi instalasi:
Output:
mvn -version
Apache Maven 3.x.x.
- Unduh MySQL Community Server dari MySQL.
- Instal MySQL dan konfigurasikan:
- Buat pengguna root tanpa kata sandi (atau atur kata sandi dan perbarui di
application.properties). - Pastikan MySQL berjalan:
mysqladmin -u root -p status
- Buat pengguna root tanpa kata sandi (atau atur kata sandi dan perbarui di
- Buat database
collabora:mysql -u root -p
CREATE DATABASE collabora;
- Unduh Node.js dari Node.js.
- Instal dan verifikasi:
Output:
node -v npm -v
v16.x.x(atau lebih tinggi) untuk Node.js, dan versi npm.
- Unduh Postman dari Postman.
- Instal dan buka untuk pengujian API.
- Klon repositori proyek (jika ada) atau buat struktur proyek seperti dijelaskan di Struktur Proyek.
git clone <repository-url> cd tubes-pbo
- Pastikan struktur direktori sesuai:
tubes-pbo/ βββ backend/ βββ frontend/ βββ database/
Struktur proyek Collabora dirancang untuk memisahkan backend, frontend, dan database. Berikut adalah penjelasan setiap komponen:
tubes-pbo/
βββ backend/ # Spring Boot Backend
β βββ src/main/java/com/manajemennilai/
β β βββ config/ # Konfigurasi aplikasi
β β β βββ SecurityConfig.java # Konfigurasi Spring Security dan JWT
β β β βββ JwtAuthFilter.java # Filter untuk validasi JWT
β β β βββ OpenAPIConfig.java # Konfigurasi Swagger/OpenAPI
β β β βββ CorsConfig.java # Konfigurasi CORS
β β βββ controller/ # REST API Controllers
β β β βββ AuthController.java # Endpoint autentikasi (login, register)
β β β βββ ProjectController.java # Endpoint manajemen proyek
β β β βββ TaskController.java # Endpoint manajemen tugas
β β β βββ CommentController.java # Endpoint manajemen komentar
β β β βββ NotificationController.java # Endpoint manajemen notifikasi
β β βββ dto/ # Data Transfer Objects
β β β βββ request/
β β β β βββ AuthRequest.java # Request untuk login
β β β β βββ RegisterRequest.java # Request untuk registrasi
β β β β βββ CreateProjectRequest.java # Request untuk membuat proyek
β β β β βββ CreateTaskRequest.java # Request untuk membuat tugas
β β β β βββ CreateCommentRequest.java # Request untuk membuat komentar
β β β βββ response/
β β β βββ AuthResponse.java # Respons autentikasi
β β β βββ ProjectResponse.java # Respons proyek
β β β βββ TaskResponse.java # Respons tugas
β β β βββ CommentResponse.java # Respons komentar
β β β βββ NotificationResponse.java # Respons notifikasi
β β βββ exception/ # Penanganan error
β β β βββ CustomExceptionHandler.java # Handler untuk exception
β β β βββ errors/
β β β β βββ ResourceNotFoundException.java
β β β β βββ AuthenticationFailedException.java
β β β β βββ OperationNotAllowedException.java
β β β β βββ ValidationException.java
β β β β βββ DatabaseException.java
β β β βββ response/
β β β βββ ErrorResponse.java # Format respons error
β β βββ model/ # Entitas JPA
β β β βββ User.java # Entitas pengguna (abstrak)
β β β βββ Student.java # Entitas mahasiswa
β β β βββ Lecturer.java # Entitas dosen
β β β βββ Project.java # Entitas proyek
β β β βββ Task.java # Entitas tugas
β β β βββ Comment.java # Entitas komentar
β β β βββ Notification.java # Entitas notifikasi
β β βββ repository/ # JPA Repositories
β β β βββ UserRepository.java
β β β βββ ProjectRepository.java
β β β βββ TaskRepository.java
β β β βββ CommentRepository.java
β β β βββ NotificationRepository.java
β β βββ service/ # Logika bisnis
β β β βββ AuthService.java # Service autentikasi
β β β βββ ProjectService.java # Service manajemen proyek
β β β βββ TaskService.java # Service manajemen tugas
β β β βββ CommentService.java # Service manajemen komentar
β β β βββ NotificationService.java # Service manajemen notifikasi
β β βββ security/ # Komponen keamanan
β β β βββ JwtUtils.java # Utilitas untuk JWT
β β β βββ UserDetailsCustom.java # Implementasi UserDetails
β β β βββ UserDetailsServiceImpl.java # Service untuk UserDetails
β β βββ payload/ # Objek tambahan
β β β βββ ValidationMessages.java # Pesan validasi
β β β βββ CreateTaskRequest.java # Payload untuk tugas
β β β βββ UpdateTaskStatusRequest.java # Payload untuk update status
β β β βββ ApiResponse.java # Respons API generik
β β βββ Application.java # Entry point aplikasi
β βββ src/main/resources/
β β βββ application.properties # Konfigurasi Spring dan DB
β β βββ schema.sql # Skema database
β βββ pom.xml # Dependensi Maven
βββ frontend/ # React.js Frontend
β βββ public/
β β βββ index.html # File HTML utama
β β βββ favicon.ico # Ikon aplikasi
β βββ src/
β β βββ components/
β β β βββ Auth/
β β β β βββ Login.jsx # Komponen login
β β β β βββ Register.jsx # Komponen registrasi
β β β βββ Dashboard/
β β β β βββ ProjectBoard.jsx # Kanban board proyek
β β β β βββ TaskCard.jsx # Kartu tugas
β β β β βββ Timeline.jsx # Timeline proyek
β β β βββ Modals/
β β β β βββ CreateProjectModal.jsx # Modal membuat proyek
β β β β βββ CreateTaskModal.jsx # Modal membuat tugas
β β β βββ Shared/
β β β βββ Navbar.jsx # Navigasi
β β β βββ NotificationToast.jsx # Notifikasi toast
β β β βββ PrivateRoute.jsx # Rute terproteksi
β β βββ contexts/
β β β βββ AuthContext.jsx # Konteks autentikasi
β β βββ hooks/
β β β βββ useApi.jsx # Hook untuk API calls
β β βββ services/
β β β βββ api.js # Konfigurasi Axios
β β β βββ authService.js # Service autentikasi
β β β βββ projectService.js # Service proyek/tugas
β β βββ utils/
β β β βββ constants.js # Konstanta
β β β βββ helpers.js # Fungsi helper
β β βββ App.jsx # Komponen utama
β β βββ index.js # Entry point
β β βββ index.css # CSS global (Tailwind)
β βββ package.json # Dependensi dan skrip
β βββ tailwind.config.js # Konfigurasi Tailwind CSS
βββ database/ # SQL Scripts
βββ schema.sql # Skema tabel
βββ data.sql # Data contoh (opsional)
-
Backend:
- config/: Berisi konfigurasi seperti Spring Security (
SecurityConfig.java,JwtAuthFilter.java) dan CORS. - controller/: Menangani permintaan HTTP (REST API) untuk autentikasi, proyek, tugas, komentar, dan notifikasi.
- dto/: Objek untuk request dan response API, seperti
AuthRequest.javadanAuthResponse.java. - exception/: Penanganan error kustom untuk respons yang konsisten.
- model/: Entitas JPA yang memetakan tabel database (
User,Project,Task, dll.). - repository/: Antarmuka JPA untuk operasi database.
- service/: Logika bisnis untuk autentikasi, manajemen proyek, dll.
- security/: Komponen keamanan seperti
JwtUtils.javauntuk pengelolaan token JWT. - payload/: Objek tambahan untuk validasi dan respons API.
- resources/: Berisi
application.propertiesuntuk konfigurasi danschema.sqluntuk skema database.
- config/: Berisi konfigurasi seperti Spring Security (
-
Frontend:
- components/: Komponen UI React, termasuk halaman login, dashboard, dan modal.
- contexts/: Konteks untuk mengelola state autentikasi.
- hooks/: Custom hook untuk memanggil API.
- services/: Konfigurasi Axios untuk komunikasi dengan backend.
- utils/: Konstanta dan fungsi pembantu.
- App.jsx: Mengatur routing dan layout utama.
- index.js: Entry point aplikasi React.
-
Database:
- schema.sql: Berisi perintah DDL untuk membuat tabel seperti
user,project,task, dll. - data.sql: (Opsional) Berisi data pengujian untuk mengisi tabel.
- schema.sql: Berisi perintah DDL untuk membuat tabel seperti
- Pastikan MySQL berjalan:
mysqladmin -u root -p status
- Buat database
collabora:mysql -u root -p
CREATE DATABASE collabora;
- Jalankan
schema.sqluntuk membuat tabel:mysql -u root -p collabora < database/schema.sql - (Opsional) Jalankan
data.sqluntuk data pengujian:mysql -u root -p collabora < database/data.sql
- Masuk ke direktori backend:
cd tubes-pbo/backend - Build proyek menggunakan Maven:
mvn clean install
- Jalankan aplikasi:
Atau jalankan dari IntelliJ IDEA dengan mengklik Run pada
mvn spring-boot:run
Application.java. - Verifikasi bahwa backend berjalan:
- Buka
http://localhost:8081/api/swagger-ui.htmluntuk melihat dokumentasi API. - Log akan menampilkan:
INFO o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) INFO com.manajemennilai.Application : Started Application in X.XXX seconds
- Buka
- Masuk ke direktori frontend:
cd tubes-pbo/frontend - Instal dependensi:
npm install
- Jalankan aplikasi:
npm start
- Buka
http://localhost:3000di browser untuk mengakses aplikasi. - Verifikasi bahwa frontend terhubung ke backend:
- Coba login dengan kredensial dari
schema.sql(misalnya,username: admin,password: password).
- Coba login dengan kredensial dari
- application.properties (
backend/src/main/resources/application.properties):- Sesuaikan konfigurasi database jika menggunakan kata sandi MySQL:
spring.datasource.password=your_mysql_password - Pastikan
jwt.secretaman untuk produksi:jwt.secret=your_secure_secret_key
- Sesuaikan konfigurasi database jika menggunakan kata sandi MySQL:
- CORS: Backend sudah dikonfigurasi untuk mengizinkan permintaan dari
http://localhost:3000.
Gunakan Postman untuk menguji endpoint API backend. Berikut adalah contoh pengujian untuk fitur utama:
- Method: POST
- URL:
http://localhost:8081/api/api/auth/login - Headers:
Content-Type: application/json - Body (raw, JSON):
{ "username": "andreas", "password": "password123" } - Respons yang Diharapkan (200 OK):
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "username": "andreas", "role": "STUDENT" } - Catatan: Simpan token untuk permintaan yang memerlukan autentikasi.
- Method: POST
- URL:
http://localhost:8081/api/api/auth/register - Headers:
Content-Type: application/json - Body (raw, JSON):
{ "username": "mahasiswa1", "password": "password", "role": "STUDENT", "studentId": "NIM67890" } - Respons yang Diharapkan (200 OK):
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "username": "mahasiswa1", "role": "STUDENT" }
- Method: POST
- URL:
http://localhost:8081/api/api/projects - Headers:
Content-Type: application/json Authorization: Bearer <token> - Body (raw, JSON):
{ "title": "Proyek Baru", "description": "Deskripsi proyek baru", "memberIds": [1, 2] } - Respons yang Diharapkan (200 OK):
{ "id": 10, "title": "Proyek Baru", "description": "Deskripsi proyek baru", "memberIds": [ 1, 2 ] }
- Method: POST
- URL:
http://localhost:8081/api/api/tasks - Headers:
Content-Type: application/json Authorization: Bearer <token> - Body (raw, JSON):
{ "title": "Desain UI Baru", "description": "Membuat desain antarmuka", "deadline": "2025-06-01T23:59:59", "projectId": 1, "assignedToId": 1 } - Respons yang Diharapkan (200 OK):
{ "id": 1, "title": "Desain UI Baru", "status": "NOT_STARTED", "isMilestone": false }
- Method: POST
- URL:
http://localhost:8081/api/api/comments - Headers:
Content-Type: application/json Authorization: Bearer <token> - Body (raw, JSON):
{ "content": "Prioritaskan desain dashboard", "taskId": 1 } - Respons yang Diharapkan (200 OK):
{ "id": 1, "content": "Prioritaskan desain dashboard", "taskId": 1, "authorId": 1 }
- Method: GET
- URL:
http://localhost:8081/api/api/notifications - Headers:
Authorization: Bearer <token> - Respons yang Diharapkan (200 OK):
[ { "id": 1, "message": "Anda ditugaskan ke tugas Desain UI", "isRead": false } ]
- Gunakan token JWT dari respons login untuk permintaan yang memerlukan autentikasi.
- Jika mendapatkan HTTP 403 Forbidden, periksa:
- Apakah token valid (belum kedaluwarsa).
- Apakah URL menggunakan prefiks
/api(misalnya,/api/auth/login).
- Jika mendapatkan HTTP 500, periksa log backend untuk stack trace.
Disini digunakan untuk menjelaskan terkait aktivitas dan error di aplikasi sejauh mana. penjelasan lebih lanjut ada di branch fitur atau perbaikan
Kontribusi KELOMPOK manajemen nilai (collabora):
- Setiawan Muhammad_1203230016:
- Backend dan Database, serta kerangka frontend sementara
- Dokumentasi GITHUB
- Andreas Nababan_1203230025 :
- Backend (Pengerjaan kedua)
- Muhammad Fajri Dwi Prasetya Subandi_1203230076
- Backend (Pengerjaan Kelima)
- NAMA_KALIAN
- NAMA_KALIAN