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
- Routers (
app/routers/): Menerima HTTP Request, mencocokkan path, menerapkan proteksi middleware jika perlu, dan memvalidasi tipe data input menggunakan Schemas (Pydantic). - Controllers (
app/controllers/): Mengambil data dari request yang sudah tervalidasi, mengelola status code HTTP, dan memanggil Services. - Services (
app/services/): Tempat utama menulis logika bisnis (seperti verifikasi aturan bisnis, perhitungan, integrasi AI/ML, enkripsi password). Memanggil Repositories. - 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):
- Buat Model Database:
Buat file
app/models/dosen.pyyang mendefinisikan skema tabel database. Registrasikan ke database engine jika diperlukan. - Buat Pydantic Schema:
Buat file
app/schemas/dosen.pyuntuk validasi data request masuk (DosenCreate,DosenUpdate) dan data response keluar (DosenResponse). - Buat Repository:
Buat file
app/repositories/dosen.py. Warisi dariBaseRepositoryuntuk mendapatkan fitur CRUD bawaan secara instan. - Buat Service:
Buat file
app/services/dosen.pyuntuk mengolah logika bisnis Dosen. - Buat Controller:
Buat file
app/controllers/dosen.pyuntuk memetakan request ke service dan menyusun output response. - Buat & Daftarkan Router:
Buat file
app/routers/dosen.py. Daftarkan file router ini ke dalam file registry utama diapp/routers/api.py.