# Mengimpor modul bawaan Python 'os' untuk manipulasi path direktori dan file sistem operasi import os # Mengimpor BaseSettings dan SettingsConfigDict dari pydantic_settings untuk manajemen variabel lingkungan (.env) yang bertipe data aman (type-safe) from pydantic_settings import BaseSettings, SettingsConfigDict # Mendefinisikan class Settings yang mewarisi BaseSettings untuk menyimpan semua konfigurasi global aplikasi class Settings(BaseSettings): # ================= Pengaturan Aplikasi (App Settings) ================= # Nama aplikasi yang ditampilkan pada dokumentasi Swagger / OpenAPI APP_NAME: str = "FastAPI TA Alumni" # Mode debug: bernilai True saat proses pengembangan untuk menampilkan detail log error DEBUG: bool = True # Prefix rute utama untuk semua endpoint REST API (versi 1) API_PREFIX: str = "/api/v1" # ================= Pengaturan Database (Database Settings) ================= # URL koneksi database MySQL menggunakan driver pymysql (format: mysql+pymysql://user:password@host:port/nama_database) DATABASE_URL: str = "mysql+pymysql://root:@localhost:3306/tracerstudy_db" # ================= Pengaturan Keamanan & JWT (Security Settings) ================= # Kunci rahasia (secret key) yang digunakan untuk mengenkripsi dan memverifikasi signature token JWT JWT_SECRET_KEY: str = "436ad82810a95059d9c87d4982a514d87455ee4a4c16d68b6d773fb62b661d9a" # Algoritma kriptografi yang digunakan untuk menandatangani token JWT (HMAC-SHA256) JWT_ALGORITHM: str = "HS256" # Masa berlaku akses token JWT dalam satuan menit (1440 menit = 24 jam) ACCESS_TOKEN_EXPIRE_MINUTES: int = 1440 # ================= Konfigurasi Pembacaan File .env ================= # Konfigurasi Pydantic untuk menentukan lokasi pembacaan file .env model_config = SettingsConfigDict( # Menentukan path file .env yang berada 3 level di atas file ini (root direktori Backend/) env_file=os.path.join( # Mendapatkan direktori root Backend/ secara dinamis dari path file ini (__file__) os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), ".env" ), # Encoding karakter file .env menggunakan format utf-8 env_file_encoding="utf-8", # Mengabaikan variabel tambahan yang ada di .env jika tidak didefinisikan di class Settings extra="ignore" ) # Menginstansiasi objek settings agar dapat diimpor dan digunakan secara langsung di seluruh modul sistem settings = Settings()