Skip to content

Feature: Manajemen User (Create & Get User) #4

Description

@masdest-coding

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:

  1. 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.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions