182 lines
6.0 KiB
Markdown
182 lines
6.0 KiB
Markdown
```python?code_reference&code_event_index=2
|
|
import pandas as pd
|
|
|
|
# Read the CSV file
|
|
try:
|
|
df = pd.read_csv("akun rt teraskota_281125.xlsx - csv_rt.csv")
|
|
except:
|
|
# Fallback for different delimiters commonly used in regions
|
|
df = pd.read_csv("akun rt teraskota_281125.xlsx - csv_rt.csv", sep=';')
|
|
|
|
# Display the first few rows and info to understand the structure
|
|
print("First 5 rows:")
|
|
print(df.head().to_markdown(index=False, numalign="left", stralign="left"))
|
|
|
|
print("\nInfo:")
|
|
print(df.info())
|
|
|
|
```
|
|
|
|
```text?code_stdout&code_event_index=2
|
|
First 5 rows:
|
|
| username | nama_lengkap | kecamatan | kelurahan | rw | rt |
|
|
|:------------------|:--------------------|:-----------------|:-------------------|:-----|:-----|
|
|
| irwan11 | Irwan | MAGELANG SELATAN | JURANGOMBO SELATAN | 1 | 1 |
|
|
| amrihpriyono | AMRIH PRIYONO | MAGELANG SELATAN | JURANGOMBO SELATAN | 1 | 2 |
|
|
| hudidanuwuryanto | HUDI DANU WURYANTO | MAGELANG SELATAN | JURANGOMBO SELATAN | 1 | 3 |
|
|
| tuirwanto | TUIRWANTO | MAGELANG SELATAN | JURANGOMBO SELATAN | 1 | 4 |
|
|
| emanindrasulaeman | EMAN INDRA SULAEMAN | MAGELANG SELATAN | JURANGOMBO SELATAN | 1 | 5 |
|
|
|
|
Info:
|
|
<class 'pandas.core.frame.DataFrame'>
|
|
RangeIndex: 1029 entries, 0 to 1028
|
|
Data columns (total 6 columns):
|
|
# Column Non-Null Count Dtype
|
|
--- ------ -------------- -----
|
|
0 username 1029 non-null object
|
|
1 nama_lengkap 1029 non-null object
|
|
2 kecamatan 1029 non-null object
|
|
3 kelurahan 1029 non-null object
|
|
4 rw 1029 non-null int64
|
|
5 rt 1029 non-null int64
|
|
dtypes: int64(2), object(4)
|
|
memory usage: 48.4+ KB
|
|
None
|
|
|
|
```
|
|
|
|
Berdasarkan analisis file `akun rt teraskota_281125.xlsx - csv_rt.csv`, file ini berisi data master akun untuk **1.029 Ketua RT** di Kota Magelang.
|
|
|
|
Data ini krusial karena menjadi "kunci masuk" bagi user RT untuk mengakses fitur Renja RT di aplikasi ORARIBET. Berikut adalah rancangan spesifikasi API yang siap Anda berikan ke Copilot/Developer.
|
|
|
|
-----
|
|
|
|
### **Spesifikasi API Service: Modul Autentikasi & Akun RT**
|
|
|
|
**Base URL:** `/api/v2/auth`
|
|
|
|
#### **1. Analisis Struktur Data (Database)**
|
|
|
|
Sebelum membuat API, data dari CSV harus dimasukkan (seeding) ke database dengan struktur berikut:
|
|
|
|
* `username` (PK/Unique): *String* (Contoh: "irwan11")
|
|
* `password`: *Hash* (Note: Karena di CSV tidak ada password, set **default password** saat migrasi, misal: `Magelang2025!` atau sama dengan username).
|
|
* `nama_lengkap`: *String*
|
|
* `wilayah`:
|
|
* `kecamatan`: *String*
|
|
* `kelurahan`: *String*
|
|
* `rw`: *Integer*
|
|
* `rt`: *Integer*
|
|
|
|
-----
|
|
|
|
#### **2. Endpoint Login RT**
|
|
|
|
Digunakan oleh Ketua RT untuk masuk ke aplikasi. Endpoint ini akan mencocokkan username dari CSV dan mengembalikan Token akses serta scope wilayahnya.
|
|
|
|
* **Endpoint:** `POST /login-rt`
|
|
* **Description:** Otentikasi user RT dan pengambilan token sesi.
|
|
* **Request Body:**
|
|
```json
|
|
{
|
|
"username": "irwan11",
|
|
"password": "password_rahasia"
|
|
}
|
|
```
|
|
* **Response Body (Success 200):**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Login berhasil",
|
|
"data": {
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", // JWT Token
|
|
"user": {
|
|
"username": "irwan11",
|
|
"nama_lengkap": "Irwan",
|
|
"role": "KETUA_RT",
|
|
"scope_wilayah": {
|
|
"kecamatan": "MAGELANG SELATAN",
|
|
"kelurahan": "JURANGOMBO SELATAN",
|
|
"rw": "001", // Diformat string 3 digit
|
|
"rt": "001" // Diformat string 3 digit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
-----
|
|
|
|
#### **3. Endpoint Cek Profil (Me)**
|
|
|
|
Digunakan aplikasi untuk memastikan siapa yang sedang login dan membatasi data Renja hanya untuk RT yang bersangkutan.
|
|
|
|
* **Endpoint:** `GET /me`
|
|
* **Header:** `Authorization: Bearer <token>`
|
|
* **Response Body:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"akun": {
|
|
"username": "amrihpriyono",
|
|
"nama_lengkap": "AMRIH PRIYONO",
|
|
"status_aktif": true
|
|
},
|
|
"lokasi_tugas": {
|
|
"kecamatan": "MAGELANG SELATAN",
|
|
"kelurahan": "JURANGOMBO SELATAN",
|
|
"rw": 1,
|
|
"rt": 2,
|
|
"kode_area": "33.71.01.1004.01.02" // Optional: Kode Kemendagri generated
|
|
},
|
|
"hak_akses": [
|
|
"input_renja",
|
|
"lihat_profil_rt",
|
|
"cetak_berita_acara"
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
-----
|
|
|
|
#### **4. Endpoint List Master RT (Khusus Admin/Kelurahan)**
|
|
|
|
Digunakan oleh Admin Kota atau Lurah untuk melihat daftar Ketua RT di wilayahnya (berdasarkan data CSV tadi).
|
|
|
|
* **Endpoint:** `GET /master/rt-list`
|
|
* **Query Params:**
|
|
* `kelurahan` (Optional, filter by nama kelurahan)
|
|
* `rw` (Optional, filter by RW)
|
|
* **Response Body:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"total_data": 5, // Pagination info
|
|
"data": [
|
|
{
|
|
"username": "hudidanuwuryanto",
|
|
"nama": "HUDI DANU WURYANTO",
|
|
"wilayah": "RT 003 / RW 001, JURANGOMBO SELATAN"
|
|
},
|
|
{
|
|
"username": "tuirwanto",
|
|
"nama": "TUIRWANTO",
|
|
"wilayah": "RT 004 / RW 001, JURANGOMBO SELATAN"
|
|
}
|
|
// ... dst sesuai data CSV
|
|
]
|
|
}
|
|
```
|
|
|
|
-----
|
|
|
|
### **Instruksi Khusus untuk Copilot/Developer**
|
|
|
|
1. **Data Seeding:** Instruksikan untuk membuat script `seeder` database yang membaca file `csv_rt.csv`.
|
|
2. **Default Password:** Karena file CSV tidak memiliki kolom password, buat logika di backend:
|
|
* *Skenario A:* Set default password = `username`.
|
|
* *Skenario B:* Set default password global, misal `MagelangMaju!`.
|
|
* User **WAJIB** dipaksa ganti password saat login pertama (*Force Change Password*).
|
|
3. **Format Wilayah:** Perhatikan kolom `rw` dan `rt` di CSV bertipe Integer (contoh: `1`), namun di sistem API Teraskota sebelumnya sering menggunakan String 3 digit (contoh: `"001"`). Lakukan *padding* (penambahan nol di depan) di backend agar sinkron dengan API lain. |