Selamat datang di dokumentasi API E-Commerce UNIKLA.
API E-Commerce pada umumnya, dengan fitur spesial "Virtual Try-On" yang dapat membuat Anda mencoba baju secara online.
- Base URL:
http://localhost:3000
Sebagian besar endpoint di API ini memerlukan Authentication menggunakan JWT (JSON Web Token).
Untuk mengakses endpoint yang dilindungi, Anda harus menyertakan token di dalam header Authorization.
- Header:
Authorization - Format:
Bearer <YOUR_ACCESS_TOKEN>
Anda bisa mendapatkan access_token dengan melakukan panggilan ke endpoint POST /login menggunakan email dan password yang sudah terdaftar.
Endpoint yang berkaitan dengan registrasi dan login pengguna.
Membuat akun pengguna baru di dalam sistem.
- Method:
POST - Endpoint:
/register - Authentication: Tidak diperlukan.
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
fullName |
string |
Nama lengkap pengguna. | Ya |
email |
string |
Alamat email unik pengguna. | Ya |
password |
string |
Kata sandi pengguna. | Ya |
201 Created- Sukses membuat pengguna baru.{ "id": 1, "email": "john.doe@example.com" }400 Bad Request- Jika ada data yang tidak valid atau email sudah terdaftar.{ "message": "Email already exists" }
Mengautentikasi pengguna dan mendapatkan access_token untuk mengakses endpoint lain.
- Method:
POST - Endpoint:
/login - Authentication: Tidak diperlukan.
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
email |
string |
Alamat email pengguna. | Ya |
password |
string |
Kata sandi pengguna. | Ya |
200 OK- Login berhasil.{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }401 Unauthorized- Jika email atau password salah.{ "message": "Invalid email or password" }
Mengautentikasi atau mendaftarkan pengguna menggunakan kredensial Google dan mendapatkan access_token.
- Method:
POST - Endpoint:
/google-login - Authentication: Tidak diperlukan.
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
google_token |
string |
Token ID yang didapatkan dari Google Sign-In. | Ya |
200 OK- Login berhasil.{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }401 Unauthorized- Jika token Google tidak valid.{ "message": "Invalid google token" }
Endpoint untuk melihat dan mengelola produk.
Mengambil daftar semua produk yang tersedia.
- Method:
GET - Endpoint:
/products - Authentication: Tidak diperlukan.
200 OK- Success get product.[ { "id": 1, "name": "Kemeja Lengan Panjang", "price": 250000, "stock": 50, "imageUrl": "http://example.com/image.png", "categoryId": 1 }, { "id": 2, "name": "Celana Jeans", "price": 450000, "stock": 30, "imageUrl": "http://example.com/image2.png", "categoryId": 2 } ]
Mengambil informasi detail dari satu produk berdasarkan ID-nya.
- Method:
GET - Endpoint:
/products/:id - Authentication: Tidak diperlukan.
| Parameter | Tipe Data | Keterangan |
|---|---|---|
id |
integer |
Unique ID Product. |
200 OK- Success get product.{ "id": 1, "name": "Kemeja Lengan Panjang", "description": "Kemeja formal dengan bahan katun premium.", "price": 250000, "stock": 50, "imageUrl": "http://example.com/image.png", "Category": { "id": 1, "name": "Pakaian Pria" } }404 Not Found- Jika produk dengan ID tersebut tidak ditemukan.{ "message": "Product not found" }
Menambahkan produk baru ke dalam database.
- Method:
POST - Endpoint:
/products - Authentication: Diperlukan (
Bearer Token). - Hak Akses: Admin.
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
name |
string |
Nama produk. | Ya |
description |
string |
Deskripsi lengkap produk. | Ya |
price |
integer |
Harga produk. | Ya |
stock |
integer |
Jumlah stok yang tersedia. | Ya |
imageUrl |
string |
URL gambar produk. | Ya |
categoryId |
integer |
ID kategori yang sesuai. | Ya |
201 Created- Sukses membuat produk baru.{ "id": 3, "name": "Produk Baru", "price": 100000, "stock": 10, "imageUrl": "http://example.com/new.png", "categoryId": 1 }403 Forbidden- Jika pengguna bukan admin.{ "message": "You're unauthorized" }
Memperbarui informasi produk yang sudah ada berdasarkan ID-nya.
- Method:
PUT - Endpoint:
/products/:id - Authentication: Diperlukan (
Bearer Token). - Hak Akses: Admin.
| Parameter | Tipe Data | Keterangan |
|---|---|---|
id |
integer |
Unique ID Product. |
Semua field dari "Tambah Produk Baru" bersifat opsional.
200 OK- Sukses memperbarui produk.{ "id": 1, "name": "Nama Produk Diubah", "price": 275000, "stock": 45, "imageUrl": "http://example.com/image.png", "categoryId": 1 } ```* **`404 Not Found`** - Jika produk dengan ID tersebut tidak ditemukan. ```json { "message": "Product not found" }
Menghapus produk dari database berdasarkan ID-nya.
- Method:
DELETE - Endpoint:
/products/:id - Authentication: Diperlukan (
Bearer Token). - Hak Akses: Admin.
| Parameter | Tipe Data | Keterangan |
|---|---|---|
id |
integer |
Unique ID Product. |
200 OK- Sukses menghapus produk.{ "message": "Product with id: 1 deleted successfully" }404 Not Found- Jika produk dengan ID tersebut tidak ditemukan.{ "message": "Product not found" }
Menggunakan AI untuk menghasilkan gambar pengguna yang seolah-olah sedang memakai produk pakaian.
- Method:
POST - Endpoint:
/products/:id/virtual-try-on - Authentication: Diperlukan (
Bearer Token). - Content-Type:
multipart/form-data
| Parameter | Tipe Data | Keterangan |
|---|---|---|
id |
integer |
Unique ID Product pakaian yang akan dicoba. |
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
userImage |
file |
Gambar pengguna (menghadap depan, seluruh tubuh). | Ya |
height |
integer |
Tinggi badan pengguna dalam cm. | Ya |
weight |
integer |
Berat badan pengguna dalam kg. | Ya |
product_size |
string |
Ukuran produk yang ingin dicoba (S, M, L, XL). | Ya |
200 OK- Sukses menghasilkan gambar.{ "message": "Virtual try-on successful", "resultUrl": "http://cloudinary.com/path/to/generated-image.jpg" }400 Bad Request- Jika file tidak dilampirkan atau parameter tidak lengkap.{ "message": "Height, weight, and product size are required" }404 Not Found- Jika produk tidak ditemukan.{ "message": "Product not found" }500 Internal Server Error- Jika terjadi kegagalan pada AI.{ "message": "Failed to generate virtual try-on image" }
Menambahkan item ke keranjang pengguna.
- Method:
POST - Endpoint:
/carts/items - Authentication: Diperlukan (
Bearer Token).
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
productId |
integer |
ID produk yang ingin ditambahkan. | Ya |
quantity |
integer |
Jumlah item yang ingin ditambahkan. | Ya |
201 Created- Item berhasil ditambahkan ke keranjang.{ "message": "Item added to cart successfully", "item": { "id": 1, "cartId": 1, "productId": 2, "quantity": 3 } }400 Bad Request- Jika data tidak valid.{ "message": "Invalid request data" }
Mengambil daftar item di keranjang pengguna.
- Method:
GET - Endpoint:
/carts - Authentication: Diperlukan (
Bearer Token).
200 OK- Sukses mengambil data keranjang.{ "id": 1, "userId": 1, "items": [ { "id": 1, "cartId": 1, "productId": 2, "quantity": 3, "product": { "id": 2, "name": "Celana Jeans", "price": 450000, "stock": 30 } } ] }404 Not Found- Jika keranjang tidak ditemukan.{ "message": "Cart not found" }
Melakukan checkout untuk semua item di keranjang.
- Method:
POST - Endpoint:
/orders/checkout - Authentication: Diperlukan (
Bearer Token).
| Field | Tipe Data | Keterangan | Wajib? |
|---|---|---|---|
shippingAddress |
string |
Alamat pengiriman. | Ya |
200 OK- Sukses melakukan checkout.{ "message": "Checkout successful", "order": { "id": 1, "userId": 1, "totalPrice": 1000000, "shippingAddress": "Jl. Contoh No. 123", "status": "pending" } }400 Bad Request- Jika keranjang kosong atau data tidak valid.{ "message": "Your cart is empty" }
- Fields:
fullName(string, required)email(string, unique, required)password(string, required)role(enum:customer,admin, default:customer)
- Relations:
- Memiliki satu
Cart. - Have many
Order.
- Memiliki satu
- Fields:
userId(integer, unique, required)
- Relations:
- Have one
User. - Have many
CartItem.
- Have one
- Fields:
cartId(integer, required)productId(integer, required)quantity(integer, default: 1, required)
- Relations:
- Have one
Cart. - Have one
Product.
- Have one
- Fields:
name(string, unique, required)slug(string, unique, required)description(text, optional)
- Relations:
- Have many
Product.
- Have many
- Fields:
name(string, required)description(text, optional)price(decimal, required)stock(integer, default: 0, required)categoryId(integer, required)
- Relations:
- Have one
Category.
- Have one
- Fields:
userId(integer, optional)totalPrice(decimal, required)shippingAddress(text, required)status(enum:pending,paid,shipped,delivered,cancelled, default:pending)
- Relations:
- Have one
User. - Have many
OrderItem.
- Have one
- Fields:
orderId(integer, required)productId(integer, optional)quantity(integer, required)priceAtPurchase(decimal, required)
- Relations:
- Have one
Order. - Have one
Product.
- Have one