API untuk manajemen user dengan fitur Register, Login (JWT), CRUD User, Upload Avatar ke Cloudinary, serta proteksi keamanan menggunakan CORS & Helmet.
✅ Register & Login user (autentikasi JWT)
✅ CRUD data user (hanya untuk user dengan token aktif)
✅ Upload foto profil (Cloudinary integration)
✅ Validasi email dan password
✅ User hanya bisa ubah profil miliknya sendiri
✅ Menyimpan waktu updated_at setiap perubahan profil
✅ Middleware keamanan (CORS, Helmet)
✅ Dokumentasi API dengan Swagger & Postman
user_management_api/
│
├── index.js
├── .env
│
├── src/
│ ├── config/
│ │ ├── db.js
│ │ └── cloudinary.js
│ ├── middleware/
│ │ ├── auth.js
│ │ └── upload.js
│ ├── controllers/
│ │ ├── authController.js
│ │ └── userController.js
│ ├── routes/
│ │ ├── authRoutes.js
│ │ └── userRoutes.js
│ └── models/
│ └── userModel.js
-
Clone repository / buka folder project
cd user_management_api -
Install dependencies
npm install
-
Buat file
.envPORT=5000 DATABASE_URL=postgresql://postgres:yourpassword@localhost:5432/user_management JWT_SECRET=your_jwt_secret CLOUDINARY_NAME=your_cloud_name CLOUDINARY_KEY=your_cloud_key CLOUDINARY_SECRET=your_cloud_secret
-
Jalankan server
nodemon index.js
Atau tanpa nodemon:
node index.js
-
Akses Swagger UI
http://localhost:5000/api-docs
| Method | Endpoint | Deskripsi | Token |
|---|---|---|---|
POST |
/api/auth/register |
Registrasi user baru | ❌ |
POST |
/api/auth/login |
Login & dapatkan JWT token | ❌ |
GET |
/api/users |
Ambil semua user | ✅ |
POST |
/api/users/avatar |
Upload foto profil (Cloudinary) | ✅ |
PUT |
/api/users/profile |
Update profil user sendiri | ✅ |
Gunakan token JWT dari endpoint /api/auth/login:
Authorization: Bearer <your_token_here>
Endpoint:
POST /api/users/avatar
Form-Data:
| Key | Type | Description |
|---|---|---|
file |
File | Foto profil yang ingin diupload |
- User hanya dapat mengedit profilnya sendiri.
- Validasi input email & password.
- Waktu
updated_atotomatis disimpan setiap kali profil diubah.
Buka di browser:
http://localhost:5000/api-docs
Kamu juga bisa mengakses dokumentasi dan testing API melalui Postman:
👉 Klik di sini untuk membuka koleksi Postman
- Node.js + Express.js — backend framework
- PostgreSQL — database
- bcryptjs — hashing password
- jsonwebtoken (JWT) — autentikasi
- Cloudinary + Multer + Streamifier — upload file
- CORS + Helmet — keamanan API
- Swagger — dokumentasi interaktif API
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(100) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(50) DEFAULT 'user',
avatar_url TEXT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);| Aspek | Status |
|---|---|
| Autentikasi JWT | ✅ |
| CRUD User (Protected) | ✅ |
| Upload File Cloudinary | ✅ |
| Validasi Input | ✅ |
| Edit Profil Sendiri | ✅ |
| Keamanan (CORS & Helmet) | ✅ |
| Dokumentasi API (Swagger + Postman) | ✅ |
| Clean Code | ✅ |
Nama: Tiara Pramita Sari
Kelas : Backend Development
Deadline: 22 Oktober 2025, 23:59 WIB
💡 “Code less, build more — backend yang aman dan rapi adalah fondasi aplikasi modern.”