Feature: Manajemen User (Create & Get User)
Dokumen ini berisi panduan dan tahapan implementasi fitur manajemen user. Tugas ini dirancang agar dapat diimplementasikan setahap demi setahap.
1. Modifikasi Skema Database (Drizzle ORM)
Buat atau perbarui definisi tabel users (misalnya di src/db/schema.ts) dengan struktur berikut:
id: int, auto increment, primary key
username: varchar(255), not null
email: varchar(255), not null (sebaiknya unique)
password: varchar(255), not null (Catatan: harus menyimpan hash dari bcrypt)
created_at: timestamp, default current_timestamp
updated_at: timestamp, default current_timestamp on update current_timestamp
Setelah mendefinisikan skema, pastikan untuk meng-generate dan memigrasikannya ke database MySQL.
2. Pembuatan Struktur Folder & File Baru
Kita akan memisahkan antara routing dan business logic. Buat struktur berikut di dalam folder src/:
src/routes/ : Folder ini berisi routing ElysiaJS.
- Buat file:
user-routes.ts
src/services/ : Folder ini berisi logika bisnis aplikasi (pemrosesan data, hashing, interaksi DB).
- Buat file:
users-services.ts
3. Implementasi Logic di Services (users-services.ts)
Buat fungsi-fungsi yang akan menangani operasi utama:
- Create User:
- Menerima parameter
username, email, dan password.
- Hash field
password menggunakan bcrypt (atau modul hash bawaan Bun).
- Insert data ke dalam tabel
users.
- Harus bisa menangani error, misalnya saat mencoba memasukkan email yang sudah terdaftar.
- Get User by ID:
- Menerima parameter
id.
- Mengambil (select) data dari tabel
users berdasarkan id.
4. Implementasi Endpoint API di Routes (user-routes.ts)
Buat rute Elysia untuk menghubungkan request HTTP dengan fungsi di services.
A. Create User
- Endpoint:
POST /users
- Request Body yang Diharapkan:
{
"username": "masdest",
"email": "masdest@localhost",
"password": "rahasia"
}
- Expected Response (Success):
{
"data": "ok",
"message": "user berhasil dibuat",
"status": "200"
}
- Expected Response (Error - misal email duplikat):
{
"data": null,
"message": "email sudah terdaftar",
"status": "400"
}
B. Get User
- Endpoint:
GET /users/:id
- Expected Response: Mengembalikan object JSON berisi detail user yang ditemukan di database.
5. Integrasi Routing ke Aplikasi Utama
- Buka
src/index.ts.
- Import plugin/router yang telah diexport dari
src/routes/user-routes.ts.
- Daftarkan (use) rute tersebut ke dalam instance Elysia utama agar endpoint
/users dapat diakses.
Instruksi Tambahan untuk Implementator:
- Disarankan menggunakan validasi tipe
t bawaan ElysiaJS untuk memvalidasi body request.
- Terapkan blok
try...catch pada service atau route agar jika terjadi error dari DrizzleORM (seperti duplicate entry), bisa mengembalikan response error 400 dengan format JSON yang sesuai.
Feature: Manajemen User (Create & Get User)
Dokumen ini berisi panduan dan tahapan implementasi fitur manajemen user. Tugas ini dirancang agar dapat diimplementasikan setahap demi setahap.
1. Modifikasi Skema Database (Drizzle ORM)
Buat atau perbarui definisi tabel
users(misalnya disrc/db/schema.ts) dengan struktur berikut:id: int, auto increment, primary keyusername: varchar(255), not nullemail: varchar(255), not null (sebaiknya unique)password: varchar(255), not null (Catatan: harus menyimpan hash dari bcrypt)created_at: timestamp, defaultcurrent_timestampupdated_at: timestamp, defaultcurrent_timestampon updatecurrent_timestampSetelah mendefinisikan skema, pastikan untuk meng-generate dan memigrasikannya ke database MySQL.
2. Pembuatan Struktur Folder & File Baru
Kita akan memisahkan antara routing dan business logic. Buat struktur berikut di dalam folder
src/:src/routes/: Folder ini berisi routing ElysiaJS.user-routes.tssrc/services/: Folder ini berisi logika bisnis aplikasi (pemrosesan data, hashing, interaksi DB).users-services.ts3. Implementasi Logic di Services (
users-services.ts)Buat fungsi-fungsi yang akan menangani operasi utama:
username,email, danpassword.passwordmenggunakanbcrypt(atau modul hash bawaan Bun).users.id.usersberdasarkanid.4. Implementasi Endpoint API di Routes (
user-routes.ts)Buat rute Elysia untuk menghubungkan request HTTP dengan fungsi di services.
A. Create User
POST /users{ "username": "masdest", "email": "masdest@localhost", "password": "rahasia" }{ "data": "ok", "message": "user berhasil dibuat", "status": "200" }{ "data": null, "message": "email sudah terdaftar", "status": "400" }B. Get User
GET /users/:id5. Integrasi Routing ke Aplikasi Utama
src/index.ts.src/routes/user-routes.ts./usersdapat diakses.Instruksi Tambahan untuk Implementator:
tbawaan ElysiaJS untuk memvalidasi body request.try...catchpada service atau route agar jika terjadi error dari DrizzleORM (seperti duplicate entry), bisa mengembalikan response error 400 dengan format JSON yang sesuai.