8.1 KiB
API Documentation - Produk & Foto Sementara
Produk API
1. Get All Products
GET /api/produk
Mendapatkan semua produk dengan jumlah item dan foto.
Response Success (200):
[
{
"id": 1,
"nama": "Cincin Berlian",
"kategori": "cincin",
"berat": 2.5,
"kadar": 18,
"harga_per_gram": 850000,
"harga_jual": 2500000,
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z",
"deleted_at": null,
"items_count": 5,
"foto": [
{
"id": 1,
"id_produk": 1,
"url": "http://localhost:8000/storage/foto/cincin1.jpg",
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z"
}
]
}
]
2. Get Single Product
GET /api/produk/{id}
Mendapatkan detail produk berdasarkan ID dengan foto dan items.
Parameters:
id
(integer, required) - Product ID
Response Success (200):
{
"id": 1,
"nama": "Cincin Berlian",
"kategori": "cincin",
"berat": 2.5,
"kadar": 18,
"harga_per_gram": 850000,
"harga_jual": 2500000,
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z",
"deleted_at": null,
"foto": [
{
"id": 1,
"id_produk": 1,
"url": "http://localhost:8000/storage/foto/cincin1.jpg",
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z"
}
],
"items": [
{
"id": 1,
"id_produk": 1,
"status": "tersedia",
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z"
}
]
}
3. Create Product
POST /produk
Membuat produk baru dengan foto dari foto sementara.
Headers:
Content-Type: application/json
Request Body:
{
"nama": "Cincin Berlian",
"kategori": "cincin",
"berat": 2.5,
"kadar": 18,
"harga_per_gram": 850000,
"harga_jual": 2500000,
"id_user": 1
}
Request Body Parameters:
nama
(string, required) - Nama produk (max: 100 karakter)kategori
(string, required) - Kategori produk:cincin
,gelang
,kalung
,anting
berat
(numeric, required) - Berat produk dalam gramkadar
(integer, required) - Kadar emasharga_per_gram
(numeric, required) - Harga per gramharga_jual
(numeric, required) - Harga jualid_user
(integer, optional) - User ID untuk mengambil foto sementara
Response Success (201):
{
"message": "Produk berhasil dibuat",
"data": {
"id": 1,
"nama": "Cincin Berlian",
"kategori": "cincin",
"berat": 2.5,
"kadar": 18,
"harga_per_gram": 850000,
"harga_jual": 2500000,
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z",
"foto": [
{
"id": 1,
"id_produk": 1,
"url": "http://localhost:8000/storage/foto/cincin1.jpg",
"created_at": "2025-08-27T10:30:00.000000Z",
"updated_at": "2025-08-27T10:30:00.000000Z"
}
]
}
}
Response Error (422):
{
"message": "The given data was invalid.",
"errors": {
"nama": ["Nama produk harus diisi."],
"kategori": ["Kategori harus salah satu dari cincin, gelang, kalung, atau anting."],
"berat": ["Berat harus diisi."],
"kadar": ["Kadar harus diisi"],
"harga_per_gram": ["Harga per gram harus diisi"],
"harga_jual": ["Harga jual harus diisi"]
}
}
4. Update Product
PUT /produk/{id}
Memperbarui produk berdasarkan ID dengan opsi foto.
Parameters:
id
(integer, required) - Product ID
Headers:
Content-Type: application/json
Request Body:
{
"nama": "Cincin Berlian Updated",
"kategori": "cincin",
"berat": 3.0,
"kadar": 22,
"harga_per_gram": 900000,
"harga_jual": 3000000,
"id_user": 1,
"hapus_foto_lama": true
}
Request Body Parameters:
nama
(string, required) - Nama produk (max: 100 karakter)kategori
(string, required) - Kategori produk:cincin
,gelang
,kalung
,anting
berat
(numeric, required) - Berat produk dalam gramkadar
(integer, required) - Kadar emasharga_per_gram
(numeric, required) - Harga per gramharga_jual
(numeric, required) - Harga jualid_user
(integer, optional) - User ID untuk mengambil foto sementara baruhapus_foto_lama
(boolean, optional) - Flag untuk menghapus foto lama (default: false)
Response Success (200):
{
"message": "Produk berhasil diubah",
"data": {
"id": 1,
"nama": "Cincin Berlian Updated",
"kategori": "cincin",
"berat": 3.0,
"kadar": 22,
"harga_per_gram": 900000,
"harga_jual": 3000000,
"updated_at": "2025-08-27T11:30:00.000000Z",
"foto": [
{
"id": 2,
"id_produk": 1,
"url": "http://localhost:8000/storage/foto/cincin2.jpg",
"created_at": "2025-08-27T11:30:00.000000Z",
"updated_at": "2025-08-27T11:30:00.000000Z"
}
]
}
}
5. Delete Product
DELETE /produk/{id}
Menghapus produk berdasarkan ID (soft delete) beserta foto-foto terkait.
Parameters:
id
(integer, required) - Product ID
Response Success (200):
{
"message": "Produk berhasil dihapus."
}
Response Error (404):
{
"message": "No query results for model [App\\Models\\Produk] 999"
}
Foto Sementara API
1. Upload Foto Sementara
POST /foto/upload
Upload foto sementara yang akan digunakan saat create/update produk.
Headers:
Content-Type: multipart/form-data
Request Body (Form Data):
id_produk
(integer, required) - Product ID (untuk validasi exists di tabel produk)foto
(file, required) - File foto (jpg, jpeg, png, max: 2MB)
Response Success (201):
{
"message": "Foto berhasil disimpan"
}
Response Error (422):
{
"message": "The given data was invalid.",
"errors": {
"id_produk": ["The id_produk field is required."],
"foto": ["The foto field is required."]
}
}
Response Error - Invalid File (422):
{
"message": "The given data was invalid.",
"errors": {
"foto": [
"The foto must be an image.",
"The foto must be a file of type: jpg, jpeg, png.",
"The foto may not be greater than 2048 kilobytes."
]
}
}
2. Hapus Foto Sementara
DELETE /foto/hapus/{id}
Menghapus foto sementara berdasarkan ID.
Parameters:
id
(integer, required) - Foto Sementara ID
Response Success (200):
{
"message": "Foto berhasil dihapus"
}
Response Error (404):
{
"message": "No query results for model [App\\Models\\FotoSementara] 999"
}
3. Get Foto Sementara User
DELETE /foto/get/{user_id}
Ambil semua foto sementara milik user tertentu.
Parameters:
user_id
(integer, required) - User ID
Response Success (200):
[
{
"id": 2,
"id_user": 1,
"url": "http://localhost:8000/storage/foto/cincin2.jpg",
"created_at": "2025-08-27T11:30:00.000000Z",
"updated_at": "2025-08-27T11:30:00.000000Z"
}
]
4. Reset Foto Sementara User
DELETE /foto/reset/{user_id}
Menghapus semua foto sementara milik user tertentu.
Parameters:
user_id
(integer, required) - User ID
Response Success (200):
{
"message": "Foto sementara berhasil direset"
}
Workflow Penggunaan
Membuat Produk dengan Foto:
- Upload foto menggunakan
POST /api/foto/upload
denganid_produk
dummy atau existing - Simpan
id_user
yang digunakan saat upload - Create produk dengan
POST /api/produk
dan sertakanid_user
- Foto sementara akan otomatis dipindahkan ke foto permanent
Update Produk dengan Foto Baru:
- Upload foto baru dengan
POST /api/foto/upload
- Update produk dengan
PUT /api/produk/{id}
, sertakanid_user
danhapus_foto_lama: true
- Foto lama akan dihapus dan foto sementara dipindahkan ke permanent
Membersihkan Foto Sementara:
- Gunakan
DELETE /api/foto/reset/{user_id}
untuk menghapus semua foto sementara user - Atau
DELETE /api/foto/hapus/{id}
untuk menghapus foto sementara spesifik