# Kampung Kita API Spec
## 1. ✅ Auth Process
### 1.0 ✅ Registration
Perform checking on user registration info and request code. Request hash is sha256(EMEL+KATA_LALUAN+APP_SECRET).
App Secret = 18171e-40d6a4-5353ad
```
POST /api/auth/register
```
Request body:
```
{
"nama_penuh": "Shafiq Rizwan bin Shaukat",
"no_ic": "888888-88-8888",
"no_tel": "0124205391",
"emel": "shafiq.rizwan@gmail.com",
"alamat1": "39 Jalan Eco Majestic",
"alamat2": "Eco Majestic",
"poskod": "43500",
"negeri": "Selangor",
"kata_laluan": "abcd123@!",
"hash": "c22b6ad706c66f6d0dfe7af3d9dd2816"
}
```
Success Response:
```
{
"status": "OK",
"_token": "xxxxxxxxxxxxxxxxx"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Emel telah didaftarkan"
}
```
### 1.1 ✅ Verify Code
Perform code verification input by user
```
POST /api/auth/verify_code
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request Body:
```
{
"code": "120852"
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Kod tidak tepat"
}
```
### 1.2 ✅ Resent Verify Code
Perform code verification input by user
```
GET /api/auth/resent_verify_code
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Kod pengesahan tidak berjaya untuk menghantar."
}
```
### 1.3 ✅ Login
Perform user login
Note:
- Request hash is md5(EMEL+KATA_LALUAN+APP_SECRET).
- App Secret = 18171e-40d6a4-5353ad
```
POST /api/auth/login
```
Request Body:
```
{
"username": "0123456659",
"kata_laluan": "abcd123@!",
"request_hash": "c22b6ad706c66f6d0dfe7af3d9dd2816"
}
```
Success Response:
```
{
"status": "OK",
"bearer_token": "xxxxxxxxxxxxxxxxxxxx"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Emel atau kata laluan tidak tepat"
}
```
### 1.4 ✅Update Push Notification Token
Send device push ID to server to store with user token.
```
POST /api/updatePushID
Authorization: Bearer xxxxxxxxxxxxxxxx
```
Request Body:
```
{
"pushID": "XXXXXXXXXXXXXXXXXXX"
}
```
Success Response:
```
{
"status": "OK"
}
```
### 1.5 ✅ Check User Session
Perform user session check to see if active.
```
GET /api/auth/validate
Authorization: Bearer xxxxxxxxxxx
```
Success Response:
```
{
"status": "OK"
"user": {
"nama_penuh": "Shafiq Rizwan bin Shaukat",
"emel": "shafiq.rizwan@gmail.com",
...
}
}
```
Error Response:
```
{
"code" : 419,
"status": "Error",
"error": "Token invalid or your session has been expired.",
"terminate_session": true
}
```
### 1.6 ✅ Request TAC for Password Reset
Perform email TAC request to complete password reset. Request hash is sha256(EMEL+APP_SECRET).
```
POST /api/auth/request_tac
```
Request Body:
```
{
"emel": "shafiq.rizwan@gmail.com",
"hash": "c22b6ad706c66f6d0dfe7af3d9dd2816"
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"status": "Error",
"code": "400",
"error": "Tiada rekod emel"
}
```
### 1.7 ✅ Password Reset
Perform password . Request hash is sha256(EMEL+KATA_LALUAN+APP_SECRET).
```
POST /api/auth/reset_password
```
Request Body:
```
{
"emel": "shafiq.rizwan@gmail.com",
"kata_laluan": "m7Pas5w0r6!",
"tac": "249201",
"hash": "c22b6ad706c66f6d0dfe7af3d9dd2816"
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"status": "Error",
"code": "",
"error": "TAC tidak tepat"
}
```
### 1.8 ✅ Log Out
Perform logout, destroying token and push ID.
```
POST /api/auth/logout
Authorization: Bearer xxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 419,
"status": "Error",
"error": "Token invalid or your session has been expired.",
"terminate_session": true
}
```
### 1.9 ✅ Update Profile
Perform profile update
```
POST /api/update_profile
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request body:
```
{
"nama_penuh": "Shafiq Rizwan bin Shaukat",
"no_ic": "888888-88-8888",
"no_tel": "0124205391",
"emel": "shafiq.rizwan@gmail.com",
"alamat1": "39 Jalan Eco Majestic",
"alamat2": "Eco Majestic",
"poskod": "43500",
"negeri": "Selangor"
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Pastikan poskod telah diisi"
}
```
### 1.9 ✅ Change Password
Perform password change
```
POST /api/change_password
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request body:
```
{
"kata_laluan_lama": "123891238aa@@",
"kata_laluan_baru": "myNewPass",
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Kata laluan lama tidak tepat"
}
```
### 1.10 Delete Account
Perform account deletion
```
POST /api/delete_account
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request body:
```
{
"kata_laluan": "123891238aa@@"
}
```
Success Response:
```
{
"status": "OK"
}
```
Error Response:
```
{
"code" : 400,
"status": "Error",
"error": "Kata laluan lama tidak tepat"
}
```
## 2. ✅ Aduan Processes
### 2.0 ✅ Get Aduan categories
Perform request to retrieve all aduan categories
```
GET /api/aduan/categories
Authorization: Bearer xxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"categories": [
{"id": 1, "category": "Jalan Rosak"},
{"id": 2, "category": "Lampu Jalan Rosak"},
{"id": 3, "category": "Longkang Tersumbat"},
]
}
```
Error Response:
```
{
"code": 403,
"status": "Error",
"reason": "Unautorized request"
}
```
### 2.1 ✅ Post Aduan
Perform aduan submission. To force submission due to similar aduan records set `"force": 1`
```
PUT /api/aduan/store
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request Body:
```
{
"category": "Jalan Rosak",
"tarikh": "2023-04-13 11:05:00", // Format : YYYY-MM-DD HH:II:SS
"keterangan": "Jalan rosak di beranang hingga menyebabkan kemalangan",
"alamat": "Jalan Beranang 1, 43500 Semenyih",
"geocoordinate": "5.128291,101.903202",
"temp_resources": [
"https://cdn.kampungkita.com/tmp/1b4ed0f9.png",
"https://cdn.kampungkita.com/tmp/1b4ed0a5.png",
"https://cdn.kampungkita.com/tmp/1b4ed0dc.png"],
"force_submission": 0
}
```
Success Response:
```
{
"status": "OK",
"aduan_id": "1002",
}
```
Prompt Response:
```
{
"status": "Prompt",
"reason": "Aduan yang hampir sama telah direkod di kawasan yang dilaporkan. Anda pasti ingin membuat aduan ini?",
"similar_aduan_id": "998"
}
```
Error Response:
```
{
"code": 403,
"status": "Error",
"reason": "Unautorized request"
}
```
### 2.2 ✅ Get Aduan list
Perform request to retrieve all user-relevant Aduan listing
```
GET /api/aduan/list
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"aduan": [
{"id": "887", "keterangan": "Lampu jalan rosak", ...},
...
]
}
```
### 2.2 ✅ Get Aduan by id
Perform request to retrieve all user-relevant Aduan listing
```
GET /api/aduan/list/{id}
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"aduan": {"id": "887", "keterangan": "Lampu jalan rosak", ...}
}
```
## 3. ✅ Hebahan Processes
### 3.1 ✅ Get Hebahan list
Perform request to retrieve all user-relevant hebahan listing
NOTE: if the news didn't have image, use this image as placeholder http://kampung_kita_web.test/images/40904151189.png
```
GET /api/hebahan/list
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"hebahan": [
{"id": "887", "title": "Lampu jalan rosak", "datetime": "2023-04-30 23:11:21"},
...
]
}
```
### 3.2 ✅ Get Hebahan by id
Perform request to retrieve all user-relevant Hebahan listing
```
GET /api/hebahan/list/{id}
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"aduan": {"id": "887", "title": "Lampu jalan rosak", "datetime": "2023-04-30 23:11:21"}
}
```
### 3.3 ✅ Post Hebahan
Perform Hebahan Putih submission.
```
PUT /api/hebahan/store
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request Body:
```
{
"tarikh": "2023-04-13 11:05:00", // Format : YYYY-MM-DD HH:II:SS
"tajuk": "Mesyuarat Persatuan Penduduk"
"keterangan": "Lorem Ipsum is simply dummy text of the printing and typesetting industry",
"temp_resources": [
"https://kampungkita.com/tmp/1b4ed0f9.png",
],
}
```
Success Response:
```
{
"status": "OK",
}
```
## 4. ✅ Bendera Putih Processes
### 4.1 ✅ Post Bendera Putih
Perform Bendera Putih submission.
```
PUT /api/bputih/store
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request Body:
```
{
"tarikh": "2023-04-13 11:05:00", // Format : YYYY-MM-DD HH:II:SS
"category": "Makanan",
"keterangan": "Lorem Ipsum is simply dummy text of the printing and typesetting industry",
"catatan": "Lorem Ipsum is simply dummy text of the printing and typesetting industry",
"geocoordinate": "5.128291,101.903202",
"temp_resources": [
"https://kampungkita.com/tmp/1b4ed0f9.png",
"https://kampungkita.com/tmp/1b4ed0a5.png",
"https://kampungkita.com/tmp/1b4ed0dc.png"
],
}
```
Success Response:
```
{
"status": "OK",
}
```
### 4.2 ✅ Get Bendera Putih List
Perform request to retrieve all user-relevant Bendera Putih listing
```
GET /api/bputih/list
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"bputih": [
{"id": "887", "keterangan": "Lorem Ipsum", ...},
...
]
}
```
### 4.3 ✅ Get Bendera Putih by id
Perform request to retrieve user-relevant Aduan listing
```
GET /api/bputih/list/{id}
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"categories": [
{"id": 1, "category": "Makanan"},
{"id": 2, "category": "Perubatan"},
{"id": 3, "category": "Lain-lain"},
]
}
```
### 4.4 ✅ Get Bendera Putih Categories List
Perform request to retrieve all user-relevant Aduan listing
```
GET /api/bputih/categories
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"categories": [
{"id": 1, "category": "Makanan"},
{"id": 2, "category": "Perubatan"},
{"id": 3, "category": "Lain-lain"},
]
}
```
## 5. Admin Processes
### 5.0 Dashboard Data
Perform request to retrieve all admin dashboard relevant data
```
GET /api/admin/dashboard?from=XXXX-XX-XX&to=XXXX-XX-XX
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Query String:
```
from=2023-04-01&to=2023-04-30
```
Success Response:
```
{
"status": "OK",
"jumlah_kutipan": 1000,
"jumlah_sedekah": 500,
"jumlah_semasa": 500,
"permohonan": {
aduan: {"q1":50,"q2":23,"q3":21,"q4":23},
khairat_kematian: {"q1":50,"q2":23,"q3":21,"q4":23},
kongsi_rezeki: {"q1":50,"q2":23,"q3":21,"q4":23},
bendera_putih: {"q1":50,"q2":23,"q3":21,"q4":23},
},
"pendaftaran_baru": [
{"nama": "Muhammad adam"}
...
]
}
```
## 6. ✅ Utilities
### 6.0 ✅ Upload Resource
Upload media resources such as photo / video using multipart form data encoding with "file" as input parameter.
```
POST /api/resources/upload
Authorization: Bearer xxxxxxxxxxxxxxxx
Content-Type: multipart/form-data
Content-Disposition: form-data; name="file"; filename="myphoto.png"
Content-Type: image/png
...
```
Success Response:
```
{
"status": "OK",
"temp_resource": "https://cdn.kampungkita.com/tmp/1b4ed0f9.png",
"expiry": "2023-04-14 09:59:00"
}
```
Error Response:
```
{
"status": "Error",
"reason": "Invalid file format"
}
```
## 7. ✅ In-App-Browser
### 7.0 ✅ Call In-App-Browser
list of routes
| No | Name | Route |
| -- | -------------------- | -------------- |
| 1 | Khairat Kematian | khairat |
| 2 | Kongsi Rezeki | kongsi_rezeki |
| 3 | Pendaftaran Ahli | daftar_ahli |
| 4 | FAQ | faq |
| 5 | Terma & Syarat | tns |
| 6 | Dasar Privasi | dp |
param for **route** please follow above value
```
GET /in_app_browser/{ROUTE}/{TOKEN}/call
```
The response will render Web views else if return 404
## 8.0 ✅ Panic Button
### 8.1 ✅ Trigger panic button
Perform request to toggle panic mode states
```
POST /api/panic
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Request Body:
```
{
"panic": 1, // toggle state between panic mode 1 - on, 0 - off
"geocoordinate": "5.128291,101.903202",
}
```
Success Response:
```
{
"status": "OK",
"panic": 1
}
```
### 8.2 ✅ Panic Details
Perform request to get information of panic user
```
GET /api/panic/{panic_id}
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"user": { ... },
"geocoordinate": "5.128291,101.903202"
}
```
### 8.3 ✅ Panic List
Perform request to get list of past panic triggers
```
GET /api/panic/list
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"list": { ... },
}
```
### 8.4 ✅ Panic Details from list
Perform request to get information of panic user
```
GET /api/panic2/{panic_id}
Authorization: Bearer xxxxxxxxxxxxxxxxx
```
Success Response:
```
{
"status": "OK",
"user": { ... },
"geocoordinate": "5.128291,101.903202"
}
```