B. ADMINISTRATOR - Web Assessment System API Documentation
Bagian ini menjelaskan dokumentasi API pada sistem web assessment (platform ujian online). API ini mendukung operasi CRUD dan service lainnya.
Base URL
Semua permintaan API menggunakan URL berikut sebagai basis:
https://xx.xx.xx.xxx/api/v1
1. Autentikasi
1.1 Mendapatkan Token CSRF
Endpoint: GET /auth/csrf-token
Deskripsi: Mendapatkan token CSRF yang akan digunakan untuk permintaan selanjutnya. Token ini disimpan dalam cookie x-xsrf-token dengan pengaturan secure untuk memastikan cookie hanya dikirim melalui koneksi HTTPS.
Contoh Response (200 OK):
{
"csrfToken": "value"
}
**Cookies:**
- `x-xsrf-token`: Disimpan dengan secure: true, httpOnly: true.
##### Contoh Request (Curl):
```bash
curl -X GET https://xx.xx.xx.xxx/v1/auth/csrf-token
1.2 Cek Status Autentikasi
Endpoint: GET /auth/check
Deskripsi: Memeriksa apakah pengguna sudah terautentikasi. Mengembalikan status autentikasi sebagai respons.
Contoh Response (200 OK):
{
"isAuthenticated": true
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/auth/check
1.3 Login Administrator
Endpoint: POST /auth/login
Deskripsi: Gunakan endpoint ini untuk melakukan login sebagai administrator dengan menggunakan kredensial yang valid. Setelah login berhasil, token akses disimpan sebagai cookie HTTP-only dengan pengaturan secure.
Request:
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"username": "adminuser",
"password": "adminpassword"
}
Contoh Response (200 OK):
{
"id": 1,
"username": "adminuser",
"role": "administrator"
}
Response Cookies:
adm-token: Token autentikasi JWT disimpan dengan secure: true, httpOnly: true.
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/auth/login \
-H 'Content-Type: application/json' \
-H 'Cookie: x-xsrf-token=<token-csrf>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"username": "adminuser", "password": "adminpassword"}'
1.4 Mendapatkan Token Autentikasi
Endpoint: GET /auth/token
Deskripsi: Mengambil token autentikasi yang disimpan dalam cookie adm-token.
Contoh Response (200 OK):
{
"token": "your_auth_token"
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/auth/token \
-H 'Cookie: adm-token=<your_auth_token>'
1.5 Logout Pengguna
Endpoint: GET /auth/logout
Deskripsi: Gunakan endpoint ini untuk melakukan logout pengguna dengan menghapus cookie autentikasi.
Contoh Response (200 OK):
{
"message": "Logout successful"
}
Cookies:
adm-token: Cookie dihapus dengan secure: true.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/auth/logout
2. Administrator
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
2.1 Membuat Administrator Baru
Endpoint: POST /admins
Deskripsi: Endpoint ini memungkinkan pembuatan akun admin baru. Hanya pengguna dengan roleId 1 yang diizinkan untuk melakukan tindakan ini.
Request:
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"username": "JohnDoe",
"roleId": 1,
"password": "admin123"
}
<br>
###### Contoh Response (201 Created):
```json
{
"id": 1,
"username": "JohnDoe",
"roleId": 1
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/admins \
-H 'Content-Type: application/json' \
-H 'Cookie: adm-token=<your_auth_token>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"username": "JohnDoe", "roleId": 1, "password": "admin123"}'
2.2 Mendapatkan Daftar Administrator
Endpoint: GET /admins
Deskripsi: Mengambil daftar semua administrator yang ada.
Contoh Response (200 OK):
[
{
"id": 1,
"username": "JohnDoe",
"roleId": 1
},
{
"id": 2,
"username": "JaneSmith",
"roleId": 2
}
]
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/admins \
-H 'Cookie: adm-token=<your_auth_token>'
2.3 Mendapatkan Administrator Berdasarkan ID
Endpoint: GET /admins/:id
Deskripsi: Mengambil detail administrator berdasarkan ID unik mereka.
Contoh Response (200 OK):
{
"id": 1,
"username": "JohnDoe",
"roleId": 1
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/admins/1 \
-H 'Cookie: adm-token=<your_auth_token>'
2.4 Mengecek Password
Endpoint: POST /admins/check-password
Deskripsi: Endpoint ini memverifikasi apakah password yang diberikan cocok dengan password lama administrator.
Request: Headers:
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"password": "oldpassword123"
}
Contoh Response (200 OK):
{
"status": "verified"
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/admins/check-password \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Cookie: adm-token=<your_auth_token>'\
-d '{"password": "oldpassword123"}'
2.5 Mengubah Password Administrator
Endpoint: PATCH /admins/password/:id
Deskripsi: Mengubah password administrator yang ada. Diperlukan header X-XSRF-TOKEN yang valid.
Request: Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"password": "newpassword123"
}
Contoh Response (200 OK):
{
"id": 1,
"username": "JohnDoe",
"roleId": 1,
"password": "newpassword123"
}
Contoh Request (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/admins/password/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Cookie: adm-token=<your_auth_token>' \
-d '{"password": "newpassword123"}'
2.6 Mengubah Data Administrator
Endpoint: PATCH /admins/:id
Deskripsi: Mengubah data administrator yang ada. Diperlukan header X-XSRF-TOKEN yang valid.
Request: Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"username": "JohnUpdatedDoe",
"roleId": 1
}
Contoh Response (200 OK):
{
"id": 1,
"username": "JohnUpdatedDoe",
"roleId": 1
}
Contoh Request (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/admins/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Cookie: adm-token=<your_auth_token>' \
-d '{"username": "JohnUpdatedDoe", "roleId": 1}'
2.7 Menghapus Administrator Berdasarkan ID
Endpoint: DELETE /admins/:id
Deskripsi: Menghapus administrator berdasarkan ID unik mereka.
Contoh Response (200 OK):
{
"message": "Admin successfully deleted"
}
Contoh Request (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/admins/1 \
-H 'Cookie: adm-token=<your_auth_token>' \
-H 'X-XSRF-TOKEN: <token-csrf>'
3. Pertanyaan
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
3.1 Mendapatkan Semua Data Pertanyaan
Endpoint: GET /questions
Deskripsi: Mengambil daftar semua pertanyaan dengan opsi pagination dan sorting.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan pertanyaan (ASC atau DESC). |
limit |
Integer | Jumlah maksimum pertanyaan yang ingin diambil. |
offset |
Integer | Jumlah pertanyaan yang dilewatkan sebelum mengambil data. |
entities |
String | Entitas terkait yang ingin disertakan dalam respons (contoh: audio,answer). |
search |
String | Mencari berdasarkan kata kunci pertanyaan. |
filterBySection |
String | Filter pertanyaan berdasarkan section. |
Contoh Response (200 OK):
[
{
"id": 1,
"question": "What is the capital of France?",
"sectionDetailId": 2,
"audioId": 3,
"packageId": 1,
"point": 10,
"passageId": 4,
"preparationTime": 30,
"responseTime": 60,
"questionType": "multiple_choice",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/questions?order=ASC&limit=10&offset=0 \
-H 'Cookie: adm-token=<your_auth_token>'
3.2 Mendapatkan Semua Pertanyaan Berdasarkan Package ID
Endpoint: GET /questions/package/:packageId
Deskripsi: Mengambil semua pertanyaan yang terkait dengan package ID dengan opsi pagination, sorting, dan filter berdasarkan section.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| packageId | Integer | ID dari package yang ingin diambil. |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan pertanyaan (ASC atau DESC). |
orderBy |
String | Kolom yang digunakan untuk sorting (contoh: question). |
limit |
Integer | Jumlah maksimum pertanyaan yang ingin diambil. |
offset |
Integer | Jumlah pertanyaan yang dilewatkan sebelum mengambil data. |
entities |
String | Entitas terkait yang ingin disertakan dalam respons (contoh: audio,answer). |
search |
String | Mencari berdasarkan kata kunci pertanyaan. |
filterBySection |
String | Filter pertanyaan berdasarkan section. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 100,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"question": "What is the capital of France?",
"sectionDetailId": 2,
"audioId": 3,
"packageId": 1,
"point": 10,
"passageId": 4,
"preparationTime": 30,
"responseTime": 60,
"questionType": "multiple_choice",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
}
Contoh Request (Curl):
bash
curl -X GET https://xx.xx.xx.xxx/v1/questions/package/1?order=ASC&limit=10&offset=0&entities=question,audio \
-H 'Cookie: adm-token=
3.3 Mendapatkan Pertanyaan Berdasarkan ID
Endpoint: GET /questions/:id
Deskripsi: Mengambil detail pertanyaan berdasarkan ID beserta entitas terkait.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari pertanyaan yang ingin diambil |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
entities |
String | Daftar entitas terkait yang ingin disertakan dalam respons, dipisahkan dengan koma (contoh: audio,answer). |
Contoh Response (200 OK):
{
"id": 1,
"question": "What is the capital of France?",
"sectionDetailId": 2,
"audioId": 3,
"packageId": 1,
"point": 10,
"passageId": 4,
"preparationTime": 30,
"responseTime": 60,
"questionType": "multiple_choice",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z",
"entities": {
"audio": "...",
"answer": "..."
}
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/questions/1?entities=audio,answer \
-H 'Cookie: adm-token=<your_auth_token>'
3.4 Membuat Pertanyaan Baru
Endpoint: POST /questions
Deskripsi: Membuat pertanyaan baru beserta detail seperti passage, sectiondetail, optionquestion, dan jawaban yang benar.
Headers:
X-XSRF-TOKEN: <token-csrf>
Cookie: adm-token=<your_auth_token>
Body:
{
"packageId": 1,
"sectionId": 2,
"sectionDuration": 120,
"sectionInstruction": "Answer the following questions",
"question": "What is the capital of France?",
"questionType": "multiple_choice",
"audioId": 3,
"pasageId": 4,
"responseTime": 60,
"optionQuestions": [
{
"label": "A",
"value": "Paris"
},
{
"label": "B",
"value": "London"
}
],
"answerKey": ["A"]
}
Contoh Response (201 Created):
{
"id": 1,
"packageId": 1,
"sectionId": 2,
"question": "What is the capital of France?",
"questionType": "multiple_choice",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/questions \
-H 'Content-Type: application/json' \
-H 'Cookie: adm-token=<your_auth_token>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{
"packageId": 1,
"sectionId": 2,
"sectionDuration": 120,
"sectionInstruction": "Answer the following questions",
"question": "What is the capital of France?",
"questionType": "multiple_choice",
"audioId": 3,
"pasageId": 4,
"responseTime": 60,
"optionQuestions": [
{
"label": "A",
"value": "Paris"
},
{
"label": "B",
"value": "London"
}
],
"answerKey": ["A"]
}'
3.5 Memperbarui Pertanyaan
Endpoint: PATCH /questions/:id
Deskripsi: Memperbarui detail pertanyaan yang ada beserta detail seperti passage, sectiondetail, optionquestion, dan jawaban yang benar.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari pertanyaan yang ingin diupdate. |
Headers:
X-XSRF-TOKEN: <token-csrf>
Cookie: adm-token=<your_auth_token>
Body:
{
"packageId": 1,
"sectionId": 2,
"sectionDuration": 120,
"sectionInstruction": "Answer the following questions",
"question": "What is the capital of France?",
"questionType": "multiple_choice",
"audioId": 3,
"pasageId": 4,
"responseTime": 60,
"optionQuestions": [
{
"label": "A",
"value": "Paris"
},
{
"label": "B",
"value": "London"
}
],
"answerKey": ["A"]
}
Contoh Response (200 OK):
{
"id": 1,
"question": "What is the capital of France?",
"updatedAt": "2023-09-14T12:30:00Z"
}
Contoh Request (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/questions/1 \
-H 'Content-Type: application/json' \
-H 'Cookie: adm-token=<your_auth_token>' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{
"packageId": 1,
"sectionId": 2,
"sectionDuration": 120,
"sectionInstruction": "Answer the following questions",
"question": "What is the capital of France?",
"questionType": "multiple_choice",
"audioId": 3,
"pasageId": 4,
"responseTime": 60,
"optionQuestions": [
{
"label": "A",
"value": "Paris"
},
{
"label": "B",
"value": "London"
}
],
"answerKey": ["A"]
}'
4. Test Packages
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
4.1 Mendapatkan Semua Test Packages
Endpoint: GET /test-packages
Deskripsi: Mengambil semua test packages dengan opsi sorting, pagination, dan pencarian.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan test packages (ASC atau DESC). |
limit |
Integer | Jumlah maksimum test packages yang ingin diambil. |
offset |
Integer | Jumlah test packages yang dilewatkan sebelum mengambil data. |
entities |
String | Mengambil data dengan entitas terkait. |
search |
String | Mencari test package berdasarkan judul. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 50,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"title": "Ujian Nasional",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/test-packages?order=ASC&limit=10&offset=0&search=Ujian \
-H 'Cookie: adm-token=<your_auth_token>'
4.2 Mendapatkan Template Test Package
Endpoint: GET /test-packages/download-package-template
Deskripsi: Mengunduh template dokumen test package dalam format DOCX.
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/test-packages/download-package-template \
-H 'Cookie: adm-token=<your_auth_token>' \
-O
4.3 Mendapatkan Test Package Berdasarkan ID
Endpoint: GET /test-packages/:id
Deskripsi: Mengambil detail test package berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari test package yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Ujian Nasional",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/test-packages/1 \
-H 'Cookie: adm-token=<your_auth_token>'
4.4 Membuat Test Package Baru
Endpoint: POST /test-packages
Deskripsi: Membuat test package baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"title": "Ujian Akhir Semester"
}
Contoh Response (201 Created):
{
"id": 1,
"title": "Ujian Akhir Semester",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/test-packages \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Ujian Akhir Semester"}'
4.5 Mengunggah Dokumen Test Package
Endpoint: POST /test-packages/upload
Deskripsi: Mengunggah file PDF atau DOCX yang berisi dokumen test package.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body (multipart/form-data):
| Nama | Tipe | Deskripsi |
|---|---|---|
| file | File | File yang berisi dokumen test package. |
Contoh Response (201 Created):
{
"message": "File berhasil diproses."
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/test-packages/upload \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-F file=@/path/to/your/file.docx
4.6 Menghapus Test Package Berdasarkan ID
Endpoint: DELETE /test-packages/:id
Deskripsi: Menghapus test package berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari test package yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Test package berhasil dihapus"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/test-packages/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
5. Section (Bagian Ujian)
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
5.1 Membuat Section Baru
Endpoint: POST /sections
Deskripsi: Membuat section (bagian) baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"title": "Section 1",
"duration": 120
}
Contoh Response (201 Created):
{
"id": 1,
"title": "Section 1",
"duration": 120,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/sections \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Section 1", "duration": 120}'
5.2 Mendapatkan Semua Section
Endpoint: GET /sections
Deskripsi: Mengambil daftar semua section (bagian) yang ada.
Contoh Response (200 OK):
[
{
"id": 1,
"title": "Section 1",
"duration": 120,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
},
{
"id": 2,
"title": "Section 2",
"duration": 90,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/sections \
-H 'Cookie: adm-token=<your_auth_token>'
5.3 Mendapatkan Section Berdasarkan Package ID
Endpoint: GET /sections/package/:packageId
Deskripsi: Mengambil daftar section yang berhubungan dengan packageId.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| packageId | String | ID dari package (paket ujian) yang ingin diambil. |
Contoh Response (200 OK):
[
{
"id": 1,
"title": "Section 1",
"duration": 120,
"packageId": 3,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/sections/package/3 \
-H 'Cookie: adm-token=<your_auth_token>'
5.4 Mendapatkan Section Berdasarkan ID
Endpoint: GET /sections/:id
Deskripsi: Mengambil detail section berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari section yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Section 1",
"duration": 120,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/sections/1 \
-H 'Cookie: adm-token=<your_auth_token>'
5.5 Memperbarui Section Berdasarkan ID
Endpoint: PATCH /sections/:id
Deskripsi: Memperbarui detail section berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters: | Nama | Tipe | Deskripsi | |------|------|-----------| | id | String | ID dari section yang ingin diperbarui. |
Body:
{
"title": "Updated Section Title"
}
Contoh Response (200 OK):
{
"id": 1,
"title": "Updated Section Title",
"duration": 120,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-15T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/sections/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Updated Section Title"}'
5.6 Menghapus Section Berdasarkan ID
Endpoint: DELETE /sections/:id
Deskripsi: Menghapus section berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari section yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Section has been successfully deleted"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/sections/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
5.7. Section Details
Endpoint: GET /section-details/by-package
Deskripsi: Mengambil detail section dalam paket ujian tertentu berdasarkan ID paket dan ID section.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
packageId |
String | ID dari paket ujian yang ingin diambil. |
sectionId |
String | ID dari section yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 88,
"sectionId": 3,
"instruction": "The following Speaking section of the test will last approximately 17 minutes. To complete it, you will need a recording device that you can play back to listen to your responses. During the test, you will answer four speaking questions. One question asks about a famil- iar topic.",
"duration": 1200
}
Contoh Response (404 Not Found):
{
"message": "Section details not found for the provided package and section IDs."
}
6. Media Audio
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
6.1 Stream Audio
Endpoint: GET /audio/:event/:filename
Deskripsi: Stream file audio dari server berdasarkan event dan nama file.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
event |
String | Nama event dari audio yang diambil. |
filename |
String | Nama file audio yang diambil. |
Contoh Response (200 OK):
File audio dikirim ke client.
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/audio/Cambridge%20IELTS%2013/ielts13-tests1-4cd1track_01.mp3
6.2 Mendapatkan Semua Audio Media
Endpoint: GET /audio
Deskripsi: Mengambil daftar semua file audio media yang tersedia di sistem.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| search | String | Pencarian berdasarkan nama file audio. |
| limit | Integer | Jumlah maksimum audio yang ingin diambil. |
| offset | Integer | Jumlah audio yang dilewatkan sebelum mengambil data. |
Contoh Response (200 OK):
[
{
"id": 1,
"filename": "audio-file-1.mp3",
"event": "Event 1",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
},
{
"id": 2,
"filename": "audio-file-2.mp3",
"event": "Event 2",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/audio?search=audio-file&limit=10&offset=0
6.3 Mendapatkan Audio Berdasarkan ID
Endpoint: GET /audio/:id
Deskripsi: Mengambil detail file audio berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari file audio yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"filename": "audio-file-1.mp3",
"event": "Event 1",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/audio/1
6.4 Mengunggah Audio ZIP Terkait Paket Ujian
Endpoint: POST /audio/bulk
Deskripsi: Mengunggah file audio dalam format ZIP yang terkait dengan paket ujian. Nama file harus sama dengan nama paket.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body (multipart/form-data):
| Nama | Tipe | Deskripsi |
|---|---|---|
| file | File | File audio dalam format ZIP. |
Contoh Response (200 OK):
{
"message": "Audio file successfully uploaded"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/audio/bulk \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-F file=@/path/to/your/file.zip
6.5 Mengunggah Audio File
Endpoint: POST /audio
Deskripsi: Mengunggah file audio yang terkait dengan pertanyaan. Audio harus dalam format MP3 atau WAV dengan maksimal ukuran 20MB.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body (multipart/form-data):
| Nama | Tipe | Deskripsi |
|---|---|---|
| file | File | File audio yang akan diunggah (MP3/WAV). |
| eventTitle | String | Nama event terkait (opsional). |
Contoh Response (200 OK):
{
"message": "Audio file successfully uploaded",
"fileUrl": "audio/Event1/20230914-audio-file.mp3"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/audio \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-F file=@/path/to/your/audio-file.mp3 \
-F eventTitle="Event 1"
6.6 Menghapus Audio Berdasarkan ID
Endpoint: DELETE /audio/:id
Deskripsi: Menghapus file audio berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari file audio yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Audio file has been successfully deleted"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/audio/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
7. Event Ujian
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
7.1 Membuat Event Baru
Endpoint: POST /events
Deskripsi: Membuat event baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"packageId": 1,
"title": "Ujian Nasional",
"description": "Ujian tahunan nasional",
"date": "2023-07-12",
"startTime": "10:00:00",
"endTime": "12:00:00",
"prodikId": "P123"
}
Contoh Response (201 Created):
{
"id": 1,
"packageId": 1,
"title": "Ujian Nasional",
"description": "Ujian tahunan nasional",
"date": "2023-07-12",
"startTime": "10:00:00",
"endTime": "12:00:00"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/events \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"packageId": 1, "title": "Ujian Nasional", "description": "Ujian tahunan nasional", "date": "2023-07-12", "startTime": "10:00:00", "endTime": "12:00:00", "prodikId": "P123"}'
7.2 Mendapatkan Semua Event
Endpoint: GET /events
Deskripsi: Mengambil daftar semua event dengan opsi pagination dan sorting.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan event (ASC atau DESC). |
limit |
Integer | Jumlah maksimum event yang ingin diambil. |
offset |
Integer | Jumlah event yang dilewatkan sebelum mengambil data. |
entities |
String | Entitas terkait yang ingin disertakan dalam respons (contoh: package,title,description,date,startTime,endTime). |
search |
String | Mencari event berdasarkan kata kunci. |
mode |
String | Mode pilihan, nilai yang tersedia: proctor, event. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 50,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"title": "Ujian Nasional",
"description": "Ujian tahunan nasional",
"date": "2023-07-12",
"startTime": "10:00:00",
"endTime": "12:00:00"
}
]
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/events?order=ASC&limit=10&offset=0&entities=package,title,date \
-H 'Cookie: adm-token=<your_auth_token>'
7.3 Mendapatkan Event Berdasarkan ID
Endpoint: GET /events/:id
Deskripsi: Mengambil detail event berdasarkan ID beserta entitas terkait.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari event yang ingin diambil. |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| entities | String | Entitas terkait yang ingin disertakan dalam respons (contoh: title,participants). |
| search | String | Mencari peserta event berdasarkan kata kunci. |
| option | String | Opsi flat untuk mendapatkan data dalam format yang disederhanakan. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Ujian Nasional",
"description": "Ujian tahunan nasional",
"date": "2023-07-12",
"startTime": "10:00:00",
"endTime": "12:00:00"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/events/1?entities=title,participants \
-H 'Cookie: adm-token=<your_auth_token>'
7.4 Memperbarui Event
Endpoint: PATCH /events/:id
Deskripsi: Memperbarui detail event.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari event yang ingin diperbarui. |
Body:
{
"title": "Ujian Nasional 2023",
"description": "Ujian tahunan nasional 2023",
"date": "2023-07-14",
"startTime": "09:00:00",
"endTime": "11:00:00"
}
Contoh Response (200 OK):
{
"id": 1,
"title": "Ujian Nasional 2023",
"description": "Ujian tahunan nasional 2023",
"date": "2023-07-14",
"startTime": "09:00:00",
"endTime": "11:00:00"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/events/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Ujian Nasional 2023", "description": "Ujian tahunan nasional 2023", "date": "2023-07-14", "startTime": "09:00:00", "endTime": "11:00:00"}'
7.5 Menghapus Event
Endpoint: DELETE /events/:id
Deskripsi: Menghapus event berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi| | id | String | ID dari event yang ingin dihapus.|
Contoh Response (200 OK):
{
"message": "Event deleted successfully"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/events/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
8. User
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
8.1 Membuat Pengguna Baru
Endpoint: POST /users
Deskripsi: Membuat pengguna baru dengan detail yang diberikan.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
| Nama | Tipe | Deskripsi |
|---|---|---|
registeredNumber |
String | Nomor registrasi pengguna. |
name |
String | Nama lengkap pengguna. |
rankId |
Integer | ID pangkat pengguna. |
unitId |
Integer | ID unit pengguna. |
positionId |
Integer | ID jabatan pengguna. |
Contoh Response (201 Created):
{
"id": 1,
"registeredNumber": "1234567890",
"name": "John Doe",
"rankId": 2,
"unitId": 1,
"positionId": 3,
"createdAt": "2024-09-14T12:00:00Z",
"updatedAt": "2024-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/users \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Content-Type: application/json' \
-d '{"registeredNumber": "1234567890", "name": "John Doe", "rankId": 2, "unitId": 1, "positionId": 3}'
8.2 Mendapatkan Pengguna Berdasarkan ID
Endpoint: GET /users/:id
Deskripsi: Mengambil detail pengguna berdasarkan ID dan entitas terkait yang dipilih.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari pengguna yang ingin diambil. |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| entities | String | Daftar entitas terkait (misal: name,unit,rank). |
| option | String | Opsi untuk menampilkan data lengkap dengan riwayat. |
Contoh Response (200 OK):
{
"id": 1,
"registeredNumber": "1234567890",
"name": "John Doe",
"rankId": 2,
"unitId": 1,
"positionId": 3,
"rank": {
"id": 2,
"title": "Lieutenant"
},
"unit": {
"id": 1,
"name": "Unit A"
},
"position": {
"id": 3,
"title": "Commander"
},
"participants": []
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/users/1?entities=name,unit,rank
8.3 Mendapatkan Daftar Semua Pengguna
Endpoint: GET /users
Deskripsi: Mengambil daftar semua pengguna dengan opsi entitas terkait, pagination, dan sorting.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| entities | String | Daftar entitas terkait (misal: name,unit,rank). |
| order | String | Urutan hasil (ASC atau DESC). |
| limit | Integer | Jumlah maksimum pengguna yang ingin diambil. |
| offset | Integer | Jumlah pengguna yang dilewatkan sebelum mengambil. |
| search | String | Pencarian berdasarkan nama pengguna. |
| unit | Integer | Filter berdasarkan ID unit. |
| rank | Integer | Filter berdasarkan ID pangkat. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 100,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"registeredNumber": "1234567890",
"name": "John Doe",
"rankId": 2,
"unitId": 1,
"positionId": 3
},
{
"id": 2,
"registeredNumber": "1234567891",
"name": "Jane Doe",
"rankId": 3,
"unitId": 2,
"positionId": 4
}
]
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/users?entities=name,rank,unit&limit=10&offset=0&order=ASC&search=doe
8.4 Memperbarui Data Pengguna
Endpoint: PATCH /users/:id
Deskripsi: Memperbarui data pengguna berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari pengguna yang ingin diperbarui. |
Body:
| Nama | Tipe | Deskripsi |
|---|---|---|
| registeredNumber | String | Nomor registrasi pengguna. (opsional) |
| name | String | Nama lengkap pengguna. (opsional) |
| rankId | Integer | ID pangkat pengguna. (opsional) |
| unitId | Integer | ID unit pengguna. (opsional) |
| positionId | Integer | ID jabatan pengguna. (opsional) |
Contoh Response (200 OK):
{
"id": 1,
"registeredNumber": "1234567890",
"name": "John Doe Updated",
"rankId": 2,
"unitId": 1,
"positionId": 3,
"updatedAt": "2024-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/users/1 \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Content-Type: application/json' \
-d '{"name": "John Doe Updated"}'
9. Hasil Test Peserta
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
9.1 Mendapatkan Semua Test Response Berdasarkan ID Peserta
Endpoint: GET /test-response/participant/:participantId
Deskripsi: Mengambil semua test response yang terkait dengan ID peserta tertentu, beserta metadata.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
participantId |
String | ID dari peserta ujian yang ingin diambil. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 50,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"sectionId": 1,
"sectionTitle": "Reading",
"responses": [
{
"id": 1,
"answer": "Paris",
"participantId": 1,
"questionId": 1,
"packageId": 1,
"eventId": 1,
"audioResponseId": null,
"score": 10,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z",
"audio": null
}
]
}
]
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/test-response/participant/1 \
-H 'Cookie: adm-token=<your_auth_token>'
9.2 Mendapatkan Test Response Berdasarkan ID Pertanyaan
Endpoint: GET /test-response/question/:questionId/:participantId
Deskripsi: Mengambil test response yang terkait dengan ID pertanyaan tertentu dan ID peserta tertentu.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
questionId |
String | ID dari pertanyaan yang ingin diambil. |
participantId |
String | ID dari peserta ujian yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"answer": "Paris",
"participantId": 1,
"questionId": 1,
"packageId": 1,
"eventId": 1,
"audioResponseId": null,
"score": 10,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z",
"audio": null
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/test-response/question/1/1 \
-H 'Cookie: adm-token=<your_auth_token>'
9.3 Memperbarui Test Response Berdasarkan ID
Endpoint: PATCH /test-response/:id
Deskripsi: Memperbarui test response berdasarkan ID dengan data yang baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari test response yang ingin diperbarui. |
Body:
{
"answer": "London",
"score": 15
}
Contoh Response (200 OK):
{
"id": 1,
"answer": "London",
"participantId": 1,
"questionId": 1,
"packageId": 1,
"eventId": 1,
"audioResponseId": null,
"score": 15,
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:30:00Z",
"audio": null
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/test-response/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"answer": "London", "score": 15}'
10. Peserta Ujian
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
10.1 Membuat Peserta Ujian Baru
Endpoint: POST /participants
Deskripsi: Membuat peserta ujian baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"name": "John Doe",
"eventId": 1,
"registeredNumber": "12345678"
}
Contoh Response (201 Created):
{
"id": 1,
"name": "John Doe",
"eventId": 1,
"registeredNumber": "12345678"
}
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/participants \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-H 'Cookie: adm-token=<your_auth_token>'
-d '{"name": "John Doe", "eventId": 1, "registeredNumber": "12345678"}'
10.2 Mendapatkan Semua Peserta Ujian
Endpoint: GET /participants
Deskripsi: Mengambil daftar semua peserta ujian dengan opsi pagination dan sorting.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan peserta (ASC atau DESC). |
limit |
Integer | Jumlah maksimum peserta yang ingin diambil. |
offset |
Integer | Jumlah peserta yang dilewatkan sebelum mengambil data. |
entities |
String | Entitas terkait yang ingin disertakan dalam respons (contoh: userId,eventId,totalScore,user). |
search |
String | Mencari peserta berdasarkan nama. |
Contoh Response (200 OK):
json
{
"metadata": {
"totalItems": 100,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"name": "John Doe",
"eventId": 1,
"registeredNumber": "12345678"
}
]
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/participants?order=ASC&limit=10&offset=0 \
-H 'Cookie: adm-token=<your_auth_token>'
10.3 Mengunduh Template Excel Peserta Ujian
Endpoint: GET /participants/download-package-template
Deskripsi: Mengunduh file template Excel untuk mengunggah data peserta.
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/participants/download-package-template \
-H 'Cookie: adm-token=<your_auth_token>'
10.4 Menghasilkan URL dengan Token Pendaftaran
Endpoint: GET /participants/url-registration-token
Deskripsi: Menghasilkan URL dengan token pendaftaran untuk sebuah event.
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
eventId |
String | ID dari event yang ingin dibuatkan token. |
Contoh Response (201 Created):
{
"url": "https://xx.xx.xx.xxx/registration?token=abcd1234"
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/participants/url-registration-token?eventId=1 \
-H 'Cookie: adm-token=<your_auth_token>'
10.5 Mengunggah Data Peserta via File Excel
Endpoint: POST /participants/upload-file
Deskripsi: Mengunggah data peserta menggunakan file Excel.
Headers:
X-XSRF-TOKEN: <token-csrf>
Cookie: adm-token=<your_auth_token>
Body (Multipart Form Data):
file: File Excel dengan format .xlsx.
Contoh Request (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/participants/upload-file \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-F 'file=@/path/to/excel-file.xlsx'
10.6 Mendapatkan Peserta Ujian Berdasarkan Event ID
Endpoint: GET /participants/event/:eventId
Deskripsi: Mengambil daftar peserta berdasarkan ID event dengan opsi pagination dan sorting.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
eventId |
String | ID dari event yang ingin diambil. |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
order |
String | Mengurutkan peserta (ASC atau DESC). |
limit |
Integer | Jumlah maksimum peserta yang ingin diambil. |
offset |
Integer | Jumlah peserta yang dilewatkan sebelum mengambil data. |
entities |
String | Entitas terkait yang ingin disertakan dalam respons (contoh: userId,eventId,totalScore,user). |
search |
String | Mencari peserta berdasarkan nama. |
Contoh Response (200 OK):
{
"metadata": {
"totalItems": 50,
"currentPage": 1,
"itemsPerPage": 10
},
"data": [
{
"id": 1,
"name": "John Doe",
"eventId": 1,
"registeredNumber": "12345678"
}
]
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/participants/event/1?order=ASC&limit=10&offset=0 \
-H 'Cookie: adm-token=<your_auth_token>'
10.7 Mendapatkan Peserta Ujian Berdasarkan ID
Endpoint: GET /participants/:id
Deskripsi: Mengambil detail peserta ujian berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
id |
String | ID dari peserta ujian yang ingin diambil. |
Query Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
option |
String | Tambahkan ?option=raw untuk respons dalam format raw, defaultnya compact prettified. |
Contoh Response (200 OK):
{
"id": 1,
"name": "John Doe",
"eventId": 1,
"registeredNumber": "12345678"
}
Contoh Request (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/participants/1?option=raw \
-H 'Cookie: adm-token=<your_auth_token>'
11. Proctoring
Semua permintaan API terkait video proctoring.
11.1 Mendapatkan Video Berdasarkan ID Peserta
Endpoint: GET /video-proctor/participant/:participantId
Deskripsi: Mengambil semua video yang terkait dengan ID peserta tertentu.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
participantId |
String | ID dari peserta yang videonya diambil. |
Contoh Response (200 OK):
[
{
"id": 1,
"filename": "video1.webm",
"participantId": 123
},
{
"id": 2,
"filename": "video2.webm",
"participantId": 123
}
]
Contoh Response (404 Not Found):
{
"message": "No videos found for the participant."
}
11.2 Mendapatkan Semua Video Berdasarkan ID Event
Endpoint: GET /video-proctor/event/:eventId
Deskripsi: Mengambil semua video yang terkait dengan ID event tertentu.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| eventId | String | ID dari event yang videonya diambil. |
Contoh Response (200 OK):
[
{
"id": 1,
"filename": "video1.webm",
"eventId": 456
},
{
"id": 2,
"filename": "video2.webm",
"eventId": 456
}
]
Contoh Response (404 Not Found):
{
"message": "No videos found for the event."
}
11.3 Mendapatkan Video Berdasarkan Lokasi Spesifik
Endpoint: GET /video-proctor/:videoOption/:directory/:filename
Deskripsi: Mengambil video berdasarkan opsi, direktori, dan nama file yang ditentukan.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| videoOption | String | Jenis opsi video (misal: "raw", "final"). |
| directory | String | Direktori tempat file video disimpan. |
| filename | String | Nama file video yang diambil. |
Contoh Response (200 OK):
Video akan langsung di-stream melalui respons.
Contoh Response (404 Not Found):
{
"message": "Video file not found."
}
Contoh Response (500 Internal Server Error):
{
"message": "Internal server error."
}
12. Jabatan
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
12.1 Membuat Jabatan Baru
Endpoint: POST /positions
Deskripsi: Membuat jabatan baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"title": "Manager"
}
Contoh Response (201 Created):
{
"id": 1,
"title": "Manager",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/positions \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Manager"}'
12.2 Mendapatkan Semua Jabatan
Endpoint: GET /positions
Deskripsi: Mengambil daftar semua jabatan yang ada.
Contoh Response (200 OK):
[
{
"id": 1,
"title": "Manager",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
},
{
"id": 2,
"title": "Staff",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/positions \
-H 'Cookie: adm-token=<your_auth_token>'
12.3 Mendapatkan Jabatan Berdasarkan ID
Endpoint: GET /positions/:id
Deskripsi: Mengambil detail jabatan berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari jabatan yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Manager",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/positions/1 \
-H 'Cookie: adm-token=<your_auth_token>'
12.4 Memperbarui Jabatan Berdasarkan ID
Endpoint: PATCH /positions/:id
Deskripsi: Memperbarui detail jabatan yang ada berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari jabatan yang ingin diperbarui. |
Body:
{
"title": "Senior Manager"
}
Contoh Response (200 OK):
{
"id": 1,
"title": "Senior Manager",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T13:00:00Z"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/positions/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Senior Manager"}'
12.5 Menghapus Jabatan Berdasarkan ID
Endpoint: DELETE /positions/:id
Deskripsi: Menghapus jabatan berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari jabatan yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Position has been successfully deleted"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/positions/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
13. Pangkat (Ranks)
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
13.1 Membuat Pangkat Baru
Endpoint: POST /ranks
Deskripsi: Membuat pangkat baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"title": "Kolonel"
}
Contoh Response (201 Created):
{
"id": 1,
"title": "Kolonel",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/ranks \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Kolonel"}'
13.2 Mendapatkan Semua Pangkat
Endpoint: GET /ranks
Deskripsi: Mengambil daftar semua pangkat yang ada.
Contoh Response (200 OK):
[
{
"id": 1,
"title": "Kolonel",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
},
{
"id": 2,
"title": "Mayor",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/ranks \
-H 'Cookie: adm-token=<your_auth_token>'
13.3 Mendapatkan Pangkat Berdasarkan ID
Endpoint: GET /ranks/:id
Deskripsi: Mengambil detail pangkat berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari pangkat yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Kolonel",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/ranks/1 \
-H 'Cookie: adm-token=<your_auth_token>'
13.4 Memperbarui Pangkat Berdasarkan ID
Endpoint: PATCH /ranks/:id
Deskripsi: Memperbarui detail pangkat yang ada berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari pangkat yang ingin diperbarui. |
Body:
{
"title": "Brigadir Jenderal"
}
Contoh Response (200 OK):
{
"id": 1,
"title": "Brigadir Jenderal",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T13:00:00Z"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/ranks/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Brigadir Jenderal"}'
13.5 Menghapus Pangkat Berdasarkan ID
Endpoint: DELETE /ranks/:id
Deskripsi: Menghapus pangkat berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari pangkat yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Rank has been successfully deleted"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/ranks/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
14. Satuan (Unit)
Semua permintaan API memerlukan autentikasi menggunakan JWT yang disimpan dalam cookie adm-token.
14.1 Membuat Satuan Baru
Endpoint: POST /units
Deskripsi: Membuat unit baru.
Headers:
X-XSRF-TOKEN: <token-csrf>
Body:
{
"title": "Peleton"
}
Contoh Response (201 Created):
{
"id": 1,
"title": "Peleton",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X POST https://xx.xx.xx.xxx/v1/units \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Peleton"}'
14.2 Mendapatkan Semua Satuan
Endpoint: GET /units
Deskripsi: Mengambil daftar semua satuan yang ada.
Contoh Response (200 OK):
[
{
"id": 1,
"title": "Peleteon",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
},
{
"id": 2,
"title": "Batalyon",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
]
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/units \
-H 'Cookie: adm-token=<your_auth_token>'
14.3 Mendapatkan Satuan Berdasarkan ID
Endpoint: GET /units/:id
Deskripsi: Mengambil detail Satuan berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari Satuan yang ingin diambil. |
Contoh Response (200 OK):
{
"id": 1,
"title": "Peleton",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T12:00:00Z"
}
Contoh Permintaan (Curl):
curl -X GET https://xx.xx.xx.xxx/v1/units/1 \
-H 'Cookie: adm-token=<your_auth_token>'
14.4 Memperbarui Satuan Berdasarkan ID
Endpoint: PATCH /units/:id
Deskripsi: Memperbarui detail Satuan yang ada berdasarkan ID.
Headers:
X-XSRF-TOKEN: <token-csrf>
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari Satuan yang ingin diperbarui. |
Body:
{
"title": "Batalyon"
}
Contoh Response (200 OK):
{
"id": 1,
"title": "Batalyon",
"createdAt": "2023-09-14T12:00:00Z",
"updatedAt": "2023-09-14T13:00:00Z"
}
Contoh Permintaan (Curl):
curl -X PATCH https://xx.xx.xx.xxx/v1/units/1 \
-H 'Content-Type: application/json' \
-H 'X-XSRF-TOKEN: <token-csrf>' \
-d '{"title": "Batalyon"}'
14.5 Menghapus Satuan Berdasarkan ID
Endpoint: DELETE /units/:id
Deskripsi: Menghapus satuan berdasarkan ID.
Path Parameters:
| Nama | Tipe | Deskripsi |
|---|---|---|
| id | String | ID dari satuan yang ingin dihapus. |
Contoh Response (200 OK):
{
"message": "Unit has been successfully deleted"
}
Contoh Permintaan (Curl):
curl -X DELETE https://xx.xx.xx.xxx/v1/units/1 \
-H 'X-XSRF-TOKEN: <token-csrf>'
15. Kode Status
Kode status yang umum digunakan dalam API ini meliputi:
| Status Code | Deskripsi |
|---|---|
| 200 OK | Permintaan berhasil dijalankan. |
| 400 Bad Request | Data permintaan tidak valid. |
| 401 Unauthorized | Token autentikasi tidak valid. |
| 404 Not Found | Resource yang diminta tidak ditemukan. |
| 500 Internal Server Error | Kesalahan server yang tidak terduga. |