TIF_E41253310/Backend/README.md

7.0 KiB

FastAPI Backend - TA Alumni

Repositori ini adalah bagian Backend dari proyek TA-PROJEK, yang dibangun menggunakan FastAPI dengan struktur folder yang mengadopsi pola Clean Architecture (mirip dengan arsitektur enterprise pada Node.js seperti Express/NestJS).

Struktur ini dibuat sangat terstruktur untuk memudahkan kolaborasi tim, terutama bagi developer junior, agar kode tetap rapi, mudah diuji, dan memiliki pemisahan tanggung jawab (Separation of Concerns) yang jelas.


📂 Struktur Folder & Fungsi

Berikut adalah penjelasan fungsi dari setiap folder di dalam app/:

Backend/
├── .env                  # Variabel lingkungan aktif (lokal) - JANGAN di-commit ke Git!
├── .env.example          # Template variabel lingkungan untuk anggota tim baru
├── requirements.txt      # Daftar dependensi library Python
├── README.md             # Dokumentasi panduan developer (file ini)
└── app/
    ├── main.py           # Entry point utama aplikasi (mirip server.js atau app.js di Node.js)
    │
    ├── config/           # Konfigurasi aplikasi & koneksi database
    │   ├── config.py     # Schema pembacaan & validasi file .env menggunakan Pydantic Settings
    │   └── database.py   # Setup engine SQLAlchemy, Session, dan koneksi ke database
    │
    ├── models/           # Definisi skema tabel Database (SQLAlchemy Models)
    │   ├── base.py       # Base class SQLAlchemy yang membagikan metadata tabel
    │   ├── user.py       # Model untuk tabel 'users'
    │   └── alumni.py     # Model untuk tabel 'alumni'
    │
    ├── schemas/          # Data Transfer Object (DTO) / Validasi Request & Response (Pydantic)
    │   ├── user.py       # Validasi input/output data User
    │   └── alumni.py     # Validasi input/output data Alumni
    │
    ├── repositories/     # Layer akses database (Data Access Object / DAO)
    │   ├── base.py       # Generic Repository yang berisi fungsi CRUD dasar (Get, Create, Update, Delete)
    │   └── alumni.py     # Operasi database spesifik untuk entitas Alumni
    │
    ├── services/         # Layer Logika Bisnis (Business Logic)
    │   ├── auth.py       # Logika registrasi, verifikasi password, login, dan pembuatan token JWT
    │   └── alumni.py     # Logika bisnis seputar validasi dan pengolahan data alumni
    │
    ├── controllers/      # Pengendali HTTP (Request & Response handler)
    │   ├── auth.py       # Menangani input request auth, memanggil auth service, mengembalikan HTTP response
    │   └── alumni.py     # Menangani input request alumni, memanggil alumni service, mengembalikan HTTP response
    │
    ├── routers/          # Pendefinisian Endpoint / Route API (sama seperti routes/ di Node.js)
    │   ├── api.py        # Central router registry (menggabungkan semua router dengan prefix API)
    │   ├── auth.py       # Endpoint untuk registrasi dan login (/api/v1/auth)
    │   └── alumni.py     # Endpoint untuk CRUD data alumni (/api/v1/alumni)
    │
    ├── middleware/       # Fungsi penengah/filter request (seperti Auth Guards)
    │   └── auth_middleware.py # Dependency injection untuk proteksi route menggunakan token JWT
    │
    └── utils/            # Helper fungsi utilitas umum
        ├── security.py   # Fungsi enkripsi/hashing password dan generator JWT
        └── helpers.py    # Utilitas pembantu lainnya

🔄 Aliran Data (Data Flow)

Saat aplikasi menerima request dari frontend, aliran datanya adalah sebagai berikut:

graph TD
    Client[Klien/Frontend] -->|1. Kirim HTTP Request| Router[Routers]
    Router -->|2. Validasi dengan Pydantic| Schema[Schemas]
    Router -->|3. Teruskan parameter| Controller[Controllers]
    Controller -->|4. Panggil logika bisnis| Service[Services]
    Service -->|5. Minta operasi DB| Repository[Repositories]
    Repository -->|6. Manipulasi data| Model[Models/Database]
    Model -->|7. Kembalikan data| Repository
    Repository -->|8. Kembalikan entitas| Service
    Service -->|9. Kembalikan hasil proses| Controller
    Controller -->|10. Format Output & Status Code| Router
    Router -->|11. Kirim HTTP Response| Client
  1. Routers (app/routers/): Menerima HTTP Request, mencocokkan path, menerapkan proteksi middleware jika perlu, dan memvalidasi tipe data input menggunakan Schemas (Pydantic).
  2. Controllers (app/controllers/): Mengambil data dari request yang sudah tervalidasi, mengelola status code HTTP, dan memanggil Services.
  3. Services (app/services/): Tempat utama menulis logika bisnis (seperti verifikasi aturan bisnis, perhitungan, integrasi AI/ML, enkripsi password). Memanggil Repositories.
  4. Repositories (app/repositories/): Melakukan operasi database langsung menggunakan Models (SQLAlchemy). Layer ini memisahkan logika kueri SQL/ORM dari logika bisnis.

🛠️ Cara Memulai & Menjalankan Proyek

Langkah-langkah berikut ditujukan untuk developer junior agar dapat menjalankan backend di lokal dengan cepat:

1. Buat Virtual Environment

Buka terminal di folder Backend/ dan jalankan perintah berikut:

Windows (PowerShell):

python -m venv venv
.\venv\Scripts\Activate

Linux/macOS:

python3 -m venv venv
source venv/bin/activate

2. Install Dependensi

pip install -r requirements.txt

3. Konfigurasi Environment File

Secara default, file .env sudah dikonfigurasi menggunakan database SQLite lokal bernama ta_database.db. Anda tidak perlu menginstal database server tambahan untuk memulai development.

4. Jalankan Aplikasi

Jalankan development server menggunakan Uvicorn:

uvicorn app.main:app --reload

Aplikasi akan berjalan di alamat http://127.0.0.1:8000.

5. Akses Dokumentasi Swagger API

Buka browser dan arahkan ke alamat berikut untuk melihat & menguji API secara interaktif: 👉 http://127.0.0.1:8000/docs


📝 Panduan Menambahkan Fitur Baru (Untuk Junior Team)

Jika Anda ingin menambahkan modul/fitur baru (misalnya fitur Dosen):

  1. Buat Model Database: Buat file app/models/dosen.py yang mendefinisikan skema tabel database. Registrasikan ke database engine jika diperlukan.
  2. Buat Pydantic Schema: Buat file app/schemas/dosen.py untuk validasi data request masuk (DosenCreate, DosenUpdate) dan data response keluar (DosenResponse).
  3. Buat Repository: Buat file app/repositories/dosen.py. Warisi dari BaseRepository untuk mendapatkan fitur CRUD bawaan secara instan.
  4. Buat Service: Buat file app/services/dosen.py untuk mengolah logika bisnis Dosen.
  5. Buat Controller: Buat file app/controllers/dosen.py untuk memetakan request ke service dan menyusun output response.
  6. Buat & Daftarkan Router: Buat file app/routers/dosen.py. Daftarkan file router ini ke dalam file registry utama di app/routers/api.py.