Files
fm_be/docs/API_GUIDE.md
2026-07-16 22:16:45 +07:00

424 lines
12 KiB
Markdown

# API Guide STEP 1 & STEP 2
Dokumentasi ringkas untuk endpoint yang paling sering dipakai di backend ini.
## Helicopter APIs
### 1. Create helicopter
- `POST /api/v1/helicopters/create`
- Fungsi: membuat data helicopter baru.
- Cara pakai: kirim payload create helicopter sesuai schema di Swagger.
### 2. Update helicopter
- `PATCH /api/v1/helicopters/update/{id}`
- Fungsi: update sebagian field helicopter berdasarkan `id`.
- Cara pakai: kirim field yang ingin diubah saja.
### 3. Delete helicopter
- `DELETE /api/v1/helicopters/delete/{id}`
- Fungsi: soft delete helicopter.
- Cara pakai: kirim `id` helicopter di path.
### 4. Generate next report number
- `POST /api/v1/helicopters/{id}/reports/next-number`
- Fungsi: generate nomor report berikutnya dengan format `<identifier>-NNNN`.
- Cara pakai: kirim `id` helicopter di path.
### 5. Get helicopter by ID
- `GET /api/v1/helicopters/get/{id}`
- Fungsi: ambil detail helicopter berdasarkan `id`.
- Cara pakai: kirim `id` helicopter di path.
### 6. Get all helicopters
- `GET /api/v1/helicopters/get-all`
- Fungsi: list helicopter dengan filter, sort, dan pagination.
- Cara pakai:
- `search` atau `filter[search]`
- `sort`
- `page[number]`, `page[size]`
- `page`, `size`, `limit`
### 7. Get all helicopters (datatable)
- `GET /api/v1/helicopters/get-all/dt`
- Fungsi: list helicopter untuk datatable.
- Cara pakai: gunakan parameter pagination datatable yang didukung backend.
## Bases APIs
### 1. Create base
- `POST /api/v1/bases/create`
- Fungsi: membuat base baru.
- Cara pakai: kirim payload base create sesuai Swagger.
### 2. Update base
- `PATCH /api/v1/bases/update/{uuid}`
- Fungsi: update sebagian field base.
- Cara pakai: kirim `uuid` base di path, lalu field yang ingin diubah.
### 3. Delete base
- `DELETE /api/v1/bases/delete/{uuid}`
- Fungsi: soft delete base.
- Cara pakai: kirim `uuid` base di path.
### 4. Get base by ID
- `GET /api/v1/bases/get/{uuid}`
- Fungsi: ambil detail base.
- Cara pakai: kirim `uuid` base di path.
### 5. Get all bases
- `GET /api/v1/bases/get-all`
- Fungsi: list base dengan filter, sort, dan pagination.
- Cara pakai:
- `search` atau `filter[search]`
- `sort`
- `page[number]`, `page[size]`
- `page`, `size`, `limit`
### 6. Get all bases (datatable)
- `GET /api/v1/bases/get-all/dt`
- Fungsi: list base untuk datatable.
- Cara pakai: gunakan parameter pagination datatable yang didukung backend.
## Contact APIs
### 1. Create contact
- `POST /api/v1/contacts/create`
- Fungsi: membuat user contact baru beserta profile role-specific.
- Cara pakai:
- `data.type` harus `contact_create`
- `role_ids` menentukan role
- setiap role yang dipilih harus punya object profile yang sesuai di `attributes`
### 2. Update contact
- `PATCH /api/v1/contacts/{user_id}`
- Fungsi: update contact.
- Cara pakai:
- `data.type` harus `contact_update`
- bisa update `role_id` dan `role_ids`
- `role_ids: []` akan menghapus semua role
- hanya satu profile role-specific boleh ada di `attributes`
### 3. Get contact
- `GET /api/v1/contacts/{user_id}`
- Fungsi: ambil detail contact.
- Cara pakai: kirim `user_id` di path.
### 4. Get all contacts
- `GET /api/v1/contacts/get-all`
- Fungsi: list contact dengan filter role, pilot category, sort, dan pagination.
- Cara pakai:
- filter role / pilot category sesuai kebutuhan frontend
- sort field seperti `name`, `email`, `is_active`, `created_at`, `updated_at`, dan lainnya
### 5. Get all contacts (datatable)
- `GET /api/v1/contacts/get-all/dt`
- Fungsi: list contact untuk datatable.
- Cara pakai: gunakan parameter pagination datatable yang didukung backend.
### 6. Delete contact
- `DELETE /api/v1/contacts/{user_id}`
- Fungsi: soft delete contact.
- Cara pakai: kirim `user_id` di path.
### 7. Update contact active status
- `PATCH /api/v1/contacts/{user_id}/status`
- Fungsi: update status aktif contact.
- Cara pakai: kirim `user_id` di path dan payload status.
### 8. Update contact role
- `PATCH /api/v1/contacts/{user_id}/role`
- Fungsi: update role contact.
- Cara pakai: kirim `user_id` di path dan payload role baru.
### 9. Update pilot category
- `PATCH /api/v1/contacts/{user_id}/pilot-category`
- Fungsi: update pilot category.
- Cara pakai: kirim `user_id` di path dan payload kategori.
### 10. Update contact license fields
- `PATCH /api/v1/contacts/{user_id}/license`
- Fungsi: update data lisensi contact.
- Cara pakai: kirim `user_id` di path dan payload field lisensi.
### 11. Update chief flags
- `PATCH /api/v1/contacts/{user_id}/chief-flags`
- Fungsi: update flag chief.
- Cara pakai: kirim `user_id` di path dan payload flag yang ingin diubah.
### 12. Update responsible complaints flag
- `PATCH /api/v1/contacts/{user_id}/responsible-complaints`
- Fungsi: update flag responsible complaints.
- Cara pakai: kirim `user_id` di path dan payload flag yang ingin diubah.
### 13. Bulk update contacts status
- `POST /api/v1/contacts/bulk-update`
- Fungsi: update status banyak contact sekaligus.
- Cara pakai: kirim daftar contact yang ingin diupdate.
## Flights API
### Get all flights
- `GET /api/v1/flights/get-all`
- Fungsi: list flight dengan pagination, filter, sort, dan step workflow.
- Cara pakai:
- `search` atau `filter[search]`
- `date` atau `filter[date]` untuk filter tanggal flight
- `sort`
- `page[number]`, `page[size]`
- `page`, `size`, `limit`
### Contoh response
```json
{
"data": [
{
"type": "flight",
"id": "019e8afa-e602-716c-8d2a-b6b11a89caf0",
"attributes": {
"status": "",
"mission_code": "M-060326-001",
"date": "2026-06-03",
"total_draft": 2,
"takeover": {
"id": "019e8afa-e5fe-7de0-ac5d-fb5ab95896b0",
"daily_inspection": {
"name": "test test",
"short_name": "",
"date": "05.06.2026",
"utc_time": "05:03"
}
},
"steps": [
{
"phase": "takeover",
"position": "takeover",
"step": 1,
"complete": true,
"id": "019e8afa-e5fe-7de0-ac5d-fb5ab95896b0",
"status": "completed",
"completed_at": "2026-06-03T00:55:59Z",
"completed_by": "test test"
},
{
"phase": "mission",
"step": 2,
"complete": true,
"status": "assigned",
"mission_type": [
{
"type": "CAT",
"draft": 2,
"completed": 0
}
],
"completed_at": "",
"completed_by": ""
}
],
"draft": [
{
"type": "CAT",
"items": [
{
"id": "019e9640-f7af-7940-80e8-1e9a83013afb",
"type": "CAT",
"status": "draft",
"flight_data_id": "019e9640-f7b0-7787-b43c-0b395ff2792a"
},
{
"id": "019e9640-f8cf-72b1-84dc-b50c1a3c2cc6",
"type": "CAT",
"status": "draft",
"flight_data_id": "019e9640-f8d0-7ea2-b250-a7e31bfba95f"
}
]
}
],
"created_at": "2026-06-03T00:55:59Z",
"created_by": "test test",
"updated_at": "2026-06-03T00:55:59Z",
"updated_by": "test test"
}
}
],
"meta": {
"page_number": 1,
"page_size": 20,
"total": 3
}
}
```
## Takeover APIs
### 1. Create takeover
- `POST /api/v1/takeovers/create`
- Fungsi: membuat takeover secara atomik.
- Cara pakai:
- `base_id`, `duty_date`, `helicopter_id`
- `inspection`
- `roster_detail`
- `notes`
- Catatan:
- `shift_date` dan `shift_time` sudah tidak dipakai lagi di takeover request.
- shift diambil dari `base`.
### 2. Update takeover
- `PATCH /api/v1/takeovers/update/{id}`
- Fungsi: replace takeover berdasarkan flight UUID.
- Cara pakai:
- kirim `id` takeover / flight di path
- body mengikuti format takeover update yang sama dengan create
### 3. Get takeover by ID
- `GET /api/v1/takeovers/get/{id}`
- Fungsi: ambil takeover detail.
- Cara pakai: kirim `id` di path.
### 4. Get all takeovers
- `GET /api/v1/takeovers/get-all`
- Fungsi: list takeover composite yang dibangun dari flight, reserve AC, duty roster, dan inspection.
- Cara pakai: tidak ada parameter wajib.
### 5. Delete takeover
- `DELETE /api/v1/takeovers/delete/{id}`
- Fungsi: delete takeover berdasarkan flight UUID.
- Cara pakai: kirim `id` di path.
### Payload create/update takeover
```json
{
"data": {
"attributes": {
"base_id": "string",
"duty_date": "string",
"helicopter_id": "string",
"inspection": {
"before": {
"file_checklist": [
{
"helicopter_file_id": "019d7000-aaaa-7bbb-8ccc-111111111111",
"is_done": true
}
],
"fuel_added_amount": 0,
"fuel_amount": 0,
"fuel_unit": "string",
"hydraulic_lh_checked": true,
"hydraulic_rh_checked": true,
"note": "string",
"oil_engine_nr1_checked": true,
"oil_engine_nr2_checked": true,
"oil_transmission_igb_checked": true,
"oil_transmission_mgb_checked": true,
"oil_transmission_tgb_checked": true
},
"inspection_date": "2026-04-15",
"prepare": {
"file_checklist": [
{
"helicopter_file_id": "019d7000-aaaa-7bbb-8ccc-111111111111",
"is_done": true
}
],
"notam_briefing": true,
"operational_flight_plan": true,
"weather_briefing": true
}
},
"notes": "string",
"roster_detail": {
"doctor": [
{
"id": "018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"
}
],
"helper": [
{
"id": "018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"
}
],
"other_person": [
{
"email": "guest@example.com",
"mobile_phone": "+43-1234",
"name": "Guest Person"
}
],
"pilot": [
{
"co_pilot": true,
"crew_type": "main",
"examiner": true,
"flight_instructor": true,
"id": "018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d",
"line_checker": true,
"supervisor": true
}
],
"rescuer": [
{
"id": "018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"
}
]
}
},
"type": "takeover_create"
}
}
```
### Response takeover detail
```json
{
"data": {
"type": "takeover",
"id": "019e8713-aa19-7fb7-a510-a0332dc69697",
"attributes": {
"id": "019e8713-aa19-7fb7-a510-a0332dc69697",
"flight_id": "019e8afa-e602-716c-8d2a-b6b11a89caf0",
"reserve_ac_id": "019e8713-aa19-7fb7-a510-a0332dc69698",
"flight_inspection_id": "019e8713-aa19-7fb7-a510-a0332dc69699",
"shift_start": "05:00:00",
"shift_end": "13:00:00",
"base_id": "019d61db-53c6-7280-87ec-e65f205c6d3b",
"base": {
"id": "019d61db-53c6-7280-87ec-e65f205c6d3b",
"name": "Base Name"
},
"duty_date": "2026-06-03",
"helicopter_id": "019d6771-5fb5-7337-837f-bc5ed85181a1",
"helicopter": {
"id": "019d6771-5fb5-7337-837f-bc5ed85181a1",
"identifier": "D-HYAR",
"designation": "AIRBUS H145",
"type": "H145",
"aog": false,
"is_active": true
},
"notes": "string",
"roster_detail": {
"pilot": [],
"doctor": [],
"rescuer": [],
"helper": [],
"other_person": []
},
"inspection": {
"before": {},
"prepare": {},
"inspection_date": "2026-06-03"
}
}
}
}
```
## Notes
- `takeover` request tidak memakai `shift_date` dan `shift_time`.
- `flights/get-all` menampilkan step `takeover`, `mission`, dan `after_flight_inspection` kalau record after inspection sudah ada.
- `mission.step` ditampilkan sebagai `step: 2`.
- `complete` selalu ada di response step; kalau belum selesai nilainya `false`.
- `mission_type.completed` masih angka, karena itu hitungan draft/completed, bukan boolean.