ApiTerasKotaMagelang/akses_rt.md

6.0 KiB

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())

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:
    {
      "username": "irwan11",
      "password": "password_rahasia"
    }
    
  • Response Body (Success 200):
    {
      "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:
    {
      "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:
    {
      "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.