A RESTful API application for User Management built with Bun and ElysiaJS.
Aplikasi ini adalah backend service sederhana yang menyediakan fitur manajemen pengguna (User Management). Fitur utama yang tersedia meliputi registrasi pengguna baru, login untuk mendapatkan token otentikasi, mengambil data profil pengguna yang sedang login (current user), dan logout untuk menghapus sesi.
- Runtime: Bun (v1.3+)
- Framework: Elysia
- ORM: Drizzle ORM
- Database: MySQL
- Language: TypeScript
elysia: Web framework yang sangat cepat untuk Bun.drizzle-orm: TypeScript ORM untuk query database.mysql2: MySQL driver untuk Node.js/Bun.drizzle-kit: CLI tool untuk Drizzle (digunakan untuk memanajemen schema database).
Proyek ini menggunakan pendekatan arsitektur berlapis (layered architecture) untuk memisahkan antara routing, business logic, dan koneksi database.
.
├── src/
│ ├── db/
│ │ ├── index.ts # Konfigurasi koneksi database MySQL
│ │ └── schema.ts # Definisi schema/tabel database (Drizzle format)
│ ├── routes/
│ │ └── users-route.ts # Definisi endpoint API untuk fitur pengguna
│ ├── services/
│ │ └── users-service.ts# Business logic (Register, Login, Get Current, Logout)
│ └── index.ts # Entry point aplikasi dan setup utama Elysia
├── tests/
│ └── users.test.ts # Unit/Integration tests menggunakan test runner Bun
├── drizzle.config.ts # Konfigurasi setup Drizzle ORM
├── package.json # Daftar dependencies, NPM scripts, config
└── bun.lock # Lockfile dependensi dari Bun
Terdapat 2 tabel utama dalam sistem ini:
1. Tabel users
Menyimpan data otentikasi dan profil pengguna.
id:INT(Primary Key, Auto Increment)name:VARCHAR(255)(Not Null)email:VARCHAR(255)(Not Null, Unique)password:VARCHAR(255)(Not Null)createdAt:TIMESTAMP(Default Current Timestamp)
2. Tabel sessions
Menyimpan token sesi pengguna yang sedang aktif (login).
id:INT(Primary Key, Auto Increment)token:VARCHAR(255)(Not Null)userId:INT(Foreign Key mengarah keusers.id)createdAt:TIMESTAMP(Default Current Timestamp)
Base URL: http://localhost:3000 (jika menggunakan default port)
| Endpoint | Method | Headers | Body | Deskripsi |
|---|---|---|---|---|
/api/users |
POST |
- | { "name": "...", "email": "...", "password": "..." } |
Registrasi user baru |
/api/users/login |
POST |
- | { "email": "...", "password": "..." } |
Login user, mengembalikan token string |
/api/users/current |
GET |
Authorization: Bearer <token> |
- | Mengambil data diri user (id, name, email) |
/api/users/logout |
DELETE |
Authorization: Bearer <token> |
- | Logout user (menghapus session database) |
- Pastikan Bun dan MySQL database server sudah terinstall di komputer Anda.
- Clone repository proyek ini dan masuk ke dalam foldernya.
- Install seluruh dependencies dengan perintah:
bun install
- Buat database MySQL baru, misalnya:
belajar_vibe_coding. - Buat file
.envdi dalam root direktori proyek (jika belum ada), lalu isikan konfigurasi database berikut (sesuaikan dengan username dan password database lokal Anda):DB_HOST=localhost DB_USER=root DB_PASSWORD= DB_NAME=belajar_vibe_coding
- Sinkronisasi (push) schema database untuk membuat tabel ke dalam MySQL dengan menjalankan perintah:
bunx drizzle-kit push
Untuk menjalankan server dalam mode development (otomatis restart jika ada perubahan file):
bun run devUntuk menjalankan aplikasi standar (tanpa watch/reload file):
bun run src/index.tsJika tidak ada error, Anda akan melihat log 🦊 Elysia is running at localhost:3000.
Proyek ini telah dikonfigurasi menggunakan test runner bawaan dari Bun (bun:test). Seluruh pengujian disimpan di folder tests/.
Untuk mengeksekusi seluruh pengujian (integration testing API register, login, current, logout) jalankan perintah:
bun testCatatan: Pastikan koneksi dan tabel database (via .env dan drizzle-kit push) sudah berhasil disetup sebelum menjalankan test, karena test akan melakukan proses baca/tulis terhadap database secara real.