User Registration & Password Complexity Validator

30:00

1. Studi Kasus

Fitur pendaftaran pengguna baru (User Registration) membutuhkan validasi data input yang ketat pada layer backend sebelum data disimpan ke basis data. Anda diminta membuat logika endpoint REST API Express.js untuk:

POST /users/register

2. Spesifikasi Input & Output

Request Body:

{
  "email": "user@example.com",
  "password": "Password123!",
  "age": 20
}

Response Berhasil (HTTP 201):

{
  "message": "User registered successfully",
  "userId": "USR_101"
}

3. Data Awal In-Memory

const registeredUsers = [
  { id: "USR_100", email: "existing@example.com", age: 25 }
];

4. Requirement & Aturan Validasi

  1. Validasi Field Wajib: Jika email, password, atau age tidak diisi → HTTP 400 dengan pesan "Missing required registration fields".
  2. Validasi Format Email: Harus mengandung karakter @ dan .HTTP 400 dengan pesan "Invalid email format".
  3. Validasi Kompleksitas Password:
    • Panjang minimal 8 karakter.
    • Harus memiliki minimal 1 huruf kapital (A-Z).
    • Harus memiliki minimal 1 angka (0-9).
    • Jika tidak memenuhi → HTTP 400 dengan pesan "Password does not meet complexity requirements".
  4. Validasi Usia Minimum: User harus berusia minimal 18 tahun (age >= 18) → HTTP 400 dengan pesan "User must be at least 18 years old".
  5. Cek Email Duplikat: Jika email sudah ada di registeredUsersHTTP 409 dengan pesan "Email already registered".
  6. Registrasi Berhasil: Tambahkan data user ke array registeredUsers dan kembalikan HTTP 201 dengan userId baru ("USR_" + Date.now()).

5. Pertanyaan Bonus Konseptual 💡

Keamanan Password: Hashing & Salt Rounds Di bagian komentar kode solusi Anda, jelaskan:

  • Mengapa password TIDAK BOLEH disimpan dalam bentuk plaintext di database.
  • Perbedaan algoritma hashing Argon2 / bcrypt dibanding MD5/SHA-256.
  • Peran Salt dan Cost Factor (Salt Rounds) dalam mencegah Rainbow Table Attack.
solution.js
Loading...
Local Test Console