2490 lines
101 KiB
PHP
2490 lines
101 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="id">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Dokumentasi API Project Jahit</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<style>
|
|
body {
|
|
padding-top: 56px;
|
|
position: relative;
|
|
}
|
|
|
|
.sidebar {
|
|
position: sticky;
|
|
top: 70px;
|
|
height: calc(100vh - 70px);
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.endpoint {
|
|
padding: 15px;
|
|
border-radius: 5px;
|
|
margin-bottom: 15px;
|
|
border-left: 5px solid #0d6efd;
|
|
background-color: #f8f9fa;
|
|
}
|
|
|
|
.get {
|
|
border-left-color: #0d6efd;
|
|
}
|
|
|
|
.post {
|
|
border-left-color: #198754;
|
|
}
|
|
|
|
.put,
|
|
.patch {
|
|
border-left-color: #ffc107;
|
|
}
|
|
|
|
.delete {
|
|
border-left-color: #dc3545;
|
|
}
|
|
|
|
.method {
|
|
display: inline-block;
|
|
padding: 5px 10px;
|
|
border-radius: 3px;
|
|
color: white;
|
|
font-weight: bold;
|
|
min-width: 80px;
|
|
text-align: center;
|
|
}
|
|
|
|
.get-method {
|
|
background-color: #0d6efd;
|
|
}
|
|
|
|
.post-method {
|
|
background-color: #198754;
|
|
}
|
|
|
|
.put-method,
|
|
.patch-method {
|
|
background-color: #ffc107;
|
|
color: #212529;
|
|
}
|
|
|
|
.delete-method {
|
|
background-color: #dc3545;
|
|
}
|
|
|
|
pre {
|
|
background-color: #212529;
|
|
color: #f8f9fa;
|
|
padding: 15px;
|
|
border-radius: 5px;
|
|
}
|
|
|
|
code {
|
|
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
white-space: pre-wrap;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body data-bs-spy="scroll" data-bs-target="#navbar-example">
|
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="#">Dokumentasi API Project Jahit</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarNav">
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#introduction">Pendahuluan</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#authentication">Autentikasi</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#endpoints">Endpoint</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#models">Model Data</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#examples">Contoh</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-3 col-lg-2 d-none d-md-block bg-light sidebar">
|
|
<div class="position-sticky pt-3" id="navbar-example">
|
|
<h5>Daftar Isi</h5>
|
|
<ul class="nav flex-column">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#introduction">Pendahuluan</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#authentication">Autentikasi</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#roles">Role & Hak Akses</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#endpoints">Endpoint API</a>
|
|
<ul class="nav flex-column ps-3">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#public-endpoints">Endpoint Publik</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#auth-endpoints">Autentikasi</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#profile-endpoints">Profil</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#customer-endpoints">Pelanggan</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#tailor-endpoints">Penjahit</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#admin-endpoints">Admin</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#wallet-endpoints">Wallet & Withdrawal</a>
|
|
<ul class="nav flex-column ps-3">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#midtrans-payment">Midtrans Payment</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#bank-account-management">Manajemen Rekening Bank</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#models">Model Data</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#status-codes">Kode Status</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#examples">Contoh</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#files">File & Media</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
|
|
<div class="mt-4" id="introduction">
|
|
<h2>Pendahuluan</h2>
|
|
<p>Project Jahit adalah platform yang menghubungkan pelanggan dengan penjahit. API ini menyediakan
|
|
endpoint untuk mengelola registrasi pengguna, pencarian penjahit, pemesanan jasa, manajemen
|
|
galeri dan layanan penjahit, serta sistem rating.</p>
|
|
|
|
<h4>Base URL</h4>
|
|
<pre><code>http://localhost:8000/api</code></pre>
|
|
</div>
|
|
|
|
<div class="mt-4" id="authentication">
|
|
<h2>Autentikasi</h2>
|
|
<p>API ini menggunakan Laravel Sanctum untuk autentikasi. Token akan diberikan setelah login dan
|
|
harus disertakan dalam header setiap permintaan ke endpoint yang terproteksi.</p>
|
|
|
|
<h4>Format Header</h4>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
</div>
|
|
|
|
<div class="mt-4" id="roles">
|
|
<h2>Role & Hak Akses</h2>
|
|
<p>Sistem memiliki 3 role pengguna:</p>
|
|
<ul>
|
|
<li><strong>admin</strong> - Administrator platform</li>
|
|
<li><strong>penjahit</strong> - Penjahit/Penyedia jasa</li>
|
|
<li><strong>pelanggan</strong> - Pelanggan/Pengguna jasa</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="mt-5" id="endpoints">
|
|
<h2>Endpoint API</h2>
|
|
|
|
<div id="public-endpoints" class="mt-4">
|
|
<h3>Endpoint Publik</h3>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/test</span>
|
|
<p class="mt-2">Tes koneksi API</p>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"message": "API is working"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/specializations</span>
|
|
<p class="mt-2">Mendapatkan semua spesialisasi penjahit</p>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/tailors/search?specialization={id}</span>
|
|
<p class="mt-2">Mencari penjahit berdasarkan spesialisasi</p>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/tailors/{id}</span>
|
|
<p class="mt-2">Mendapatkan detail informasi penjahit</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="auth-endpoints" class="mt-4">
|
|
<h3>Autentikasi</h3>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/pelanggan/register</span>
|
|
<p class="mt-2">Registrasi akun pelanggan baru</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"password": "password123",
|
|
"password_confirmation": "password123",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>name</strong> - Wajib diisi, nama lengkap pengguna</li>
|
|
<li><strong>email</strong> - Wajib diisi, format email, harus unik</li>
|
|
<li><strong>password</strong> - Wajib diisi, minimal 8 karakter</li>
|
|
<li><strong>password_confirmation</strong> - Wajib diisi, harus sama dengan password</li>
|
|
<li><strong>phone_number</strong> - Wajib diisi, nomor telepon</li>
|
|
<li><strong>address</strong> - Wajib diisi, alamat lengkap</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "pelanggan",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
},
|
|
"token": "1|laravel_sanctum_token..."
|
|
},
|
|
"message": "Pendaftaran berhasil"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"email": ["Email sudah digunakan."],
|
|
"password": ["Password minimal harus 8 karakter."]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/pelanggan/login</span>
|
|
<p class="mt-2">Login sebagai pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"email": "john@example.com",
|
|
"password": "password123"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>email</strong> - Wajib diisi, format email</li>
|
|
<li><strong>password</strong> - Wajib diisi</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "pelanggan",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
},
|
|
"token": "1|laravel_sanctum_token..."
|
|
},
|
|
"message": "Login berhasil"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Email atau password tidak valid"
|
|
},
|
|
"message": "Authentication Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/penjahit/register</span>
|
|
<p class="mt-2">Registrasi akun penjahit baru</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"name": "John Doe",
|
|
"email": "tailor@example.com",
|
|
"password": "password123",
|
|
"password_confirmation": "password123",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"shop_description": "Jasa jahit profesional dengan pelayanan terbaik",
|
|
"specializations": [1, 2, 3]
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>name</strong> - Wajib diisi, nama lengkap penjahit</li>
|
|
<li><strong>email</strong> - Wajib diisi, format email, harus unik</li>
|
|
<li><strong>password</strong> - Wajib diisi, minimal 8 karakter</li>
|
|
<li><strong>password_confirmation</strong> - Wajib diisi, harus sama dengan password</li>
|
|
<li><strong>phone_number</strong> - Wajib diisi, nomor telepon</li>
|
|
<li><strong>address</strong> - Wajib diisi, alamat lengkap</li>
|
|
<li><strong>shop_description</strong> - Wajib diisi, deskripsi toko/jasa</li>
|
|
<li><strong>specializations</strong> - Wajib diisi, array ID spesialisasi</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "tailor@example.com",
|
|
"role": "penjahit",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"shop_description": "Jasa jahit profesional dengan pelayanan terbaik",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z",
|
|
"specializations": [
|
|
{
|
|
"id": 1,
|
|
"name": "Kemeja"
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Gaun"
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Celana"
|
|
}
|
|
]
|
|
},
|
|
"token": "1|laravel_sanctum_token..."
|
|
},
|
|
"message": "Pendaftaran berhasil"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"email": ["Email sudah digunakan."],
|
|
"specializations": ["Spesialisasi wajib diisi."]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/penjahit/login</span>
|
|
<p class="mt-2">Login sebagai penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"email": "tailor@example.com",
|
|
"password": "password123"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>email</strong> - Wajib diisi, format email</li>
|
|
<li><strong>password</strong> - Wajib diisi</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "tailor@example.com",
|
|
"role": "penjahit",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"shop_description": "Jasa jahit profesional dengan pelayanan terbaik",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
},
|
|
"token": "1|laravel_sanctum_token..."
|
|
},
|
|
"message": "Login berhasil"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Email atau password tidak valid"
|
|
},
|
|
"message": "Authentication Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/admin/login</span>
|
|
<p class="mt-2">Login sebagai admin</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"email": "admin@example.com",
|
|
"password": "admin123"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>email</strong> - Wajib diisi, format email</li>
|
|
<li><strong>password</strong> - Wajib diisi</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 3,
|
|
"name": "Admin",
|
|
"email": "admin@example.com",
|
|
"role": "admin",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
},
|
|
"token": "1|laravel_sanctum_token..."
|
|
},
|
|
"message": "Login berhasil"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Email atau password tidak valid"
|
|
},
|
|
"message": "Authentication Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/logout</span>
|
|
<p class="mt-2">Logout pengguna (invalidasi token)</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {},
|
|
"message": "Berhasil logout"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthenticated"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/email/verification-notification</span>
|
|
<p class="mt-2">Mengirim ulang email verifikasi</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {},
|
|
"message": "Email verifikasi telah dikirim"
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="profile-endpoints" class="mt-4">
|
|
<h3>Profil</h3>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/profile</span>
|
|
<p class="mt-2">Mendapatkan informasi profil pengguna</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "pelanggan",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"profile_photo": "profile_photos/user1.jpg",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
},
|
|
"message": "Profil berhasil ditemukan"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthenticated"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/profile</span>
|
|
<p class="mt-2">Mengupdate informasi profil pengguna</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"name": "John Doe Updated",
|
|
"phone_number": "087654321",
|
|
"address": "Jl. Updated No. 456",
|
|
"shop_description": "Deskripsi toko yang diupdate" // khusus penjahit
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>name</strong> - Opsional, nama baru pengguna</li>
|
|
<li><strong>phone_number</strong> - Opsional, nomor telepon baru</li>
|
|
<li><strong>address</strong> - Opsional, alamat baru</li>
|
|
<li><strong>shop_description</strong> - Opsional, deskripsi toko baru (hanya untuk penjahit)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"name": "John Doe Updated",
|
|
"email": "john@example.com",
|
|
"role": "pelanggan",
|
|
"phone_number": "087654321",
|
|
"address": "Jl. Updated No. 456",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-02T10:00:00.000000Z"
|
|
},
|
|
"message": "Profil berhasil diupdate"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"phone_number": ["Format nomor telepon tidak valid"]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/profile/photo</span>
|
|
<p class="mt-2">Mengupload foto profil</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: multipart/form-data</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"profile_photo": [file]
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>profile_photo</strong> - Wajib diisi, file gambar, maksimal 2MB</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"profile_photo": "profile_photos/user1_updated.jpg"
|
|
},
|
|
"message": "Foto profil berhasil diupload"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"profile_photo": ["File harus berupa gambar dengan ukuran maksimal 2MB"]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="customer-endpoints" class="mt-4">
|
|
<h3>Pelanggan</h3>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/dashboard</span>
|
|
<p class="mt-2">Mendapatkan data dashboard pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"phone_number": "08123456789"
|
|
},
|
|
"bookings_count": {
|
|
"total": 5,
|
|
"ongoing": 2,
|
|
"completed": 3
|
|
},
|
|
"latest_bookings": [
|
|
{
|
|
"id": 3,
|
|
"transaction_code": "TRX-003",
|
|
"tailor_name": "Penjahit ABC",
|
|
"category": "Atasan",
|
|
"service_type": "Jahit Baru",
|
|
"status": "diproses",
|
|
"appointment_date": "2023-05-10"
|
|
}
|
|
]
|
|
},
|
|
"message": "Dashboard data retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/bookings/customer</span>
|
|
<p class="mt-2">Mendapatkan semua booking yang dilakukan pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> (optional) - Filter berdasarkan status (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"transaction_code": "TRX-001",
|
|
"customer_id": 1,
|
|
"tailor_id": 2,
|
|
"appointment_date": "2023-05-05",
|
|
"appointment_time": "10:00",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"design_photo": "design_photos/design1.jpg",
|
|
"notes": "Mohon dibuat sesuai ukuran",
|
|
"status": "selesai",
|
|
"total_price": 150000,
|
|
"payment_status": "paid",
|
|
"payment_method": "Midtrans",
|
|
"completed_at": "2023-05-10T14:00:00.000000Z",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-10T14:00:00.000000Z",
|
|
"tailor": {
|
|
"id": 2,
|
|
"name": "Penjahit ABC",
|
|
"profile_photo": "profile_photos/tailor1.jpg",
|
|
"address": "Jl. Penjahit No. 123"
|
|
},
|
|
"rating": {
|
|
"id": 1,
|
|
"rating": 5,
|
|
"review": "Sangat puas dengan hasilnya"
|
|
}
|
|
}
|
|
],
|
|
"message": "Booking list retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/bookings/customer/status/{status}</span>
|
|
<p class="mt-2">Mendapatkan booking pelanggan berdasarkan status</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> - Status booking (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"transaction_code": "TRX-001",
|
|
"tailor_name": "Penjahit ABC",
|
|
"tailor_photo": "profile_photos/tailor1.jpg",
|
|
"appointment_date": "2023-05-05",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"payment_method": "Midtrans",
|
|
"payment_status": "paid"
|
|
}
|
|
],
|
|
"message": "Booking list retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Invalid status"
|
|
},
|
|
"message": "Invalid status"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/tailors/{tailor}/book</span>
|
|
<p class="mt-2">Membuat booking baru ke penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: multipart/form-data</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>tailor</strong> - ID penjahit yang akan dibooking</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"appointment_date": "2023-05-15",
|
|
"appointment_time": "14:00",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"design_photo": [file],
|
|
"notes": "Mohon dibuat sesuai ukuran",
|
|
"payment_method": "Midtrans"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>appointment_date</strong> - Wajib diisi, format tanggal (YYYY-MM-DD), harus tanggal sekarang atau setelahnya</li>
|
|
<li><strong>appointment_time</strong> - Wajib diisi, format waktu (HH:MM). Setiap booking memiliki durasi 2 jam. Jika ada booking pada jam 08:00, slot 08:00-10:00 akan terisi</li>
|
|
<li><strong>service_type</strong> - Wajib diisi, nilai valid: "Perbaikan", "Jahit Baru"</li>
|
|
<li><strong>category</strong> - Wajib diisi, nilai valid: "Atasan", "Bawahan", "Terusan"</li>
|
|
<li><strong>design_photo</strong> - Wajib diisi, file gambar, maksimal 2MB</li>
|
|
<li><strong>notes</strong> - Opsional, catatan tambahan</li>
|
|
<li><strong>payment_method</strong> - Wajib diisi, metode pembayaran</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"booking": {
|
|
"id": 5,
|
|
"transaction_code": "TRX-005",
|
|
"customer_id": 1,
|
|
"tailor_id": 2,
|
|
"appointment_date": "2023-05-15",
|
|
"appointment_time": "14:00",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"design_photo": "design_photos/design5.jpg",
|
|
"notes": "Mohon dibuat sesuai ukuran",
|
|
"status": "reservasi",
|
|
"payment_status": "unpaid",
|
|
"payment_method": "Midtrans",
|
|
"created_at": "2023-05-05T10:00:00.000000Z",
|
|
"updated_at": "2023-05-05T10:00:00.000000Z"
|
|
},
|
|
"message": "Booking berhasil dibuat",
|
|
"next_steps": {
|
|
"payment": "Silakan lakukan pembayaran untuk mengkonfirmasi booking",
|
|
"cancellation": "Anda dapat membatalkan booking sebelum melakukan pembayaran"
|
|
}
|
|
},
|
|
"message": "Booking berhasil dibuat"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"appointment": ["Jadwal tidak tersedia. Penjahit sudah memiliki booking pada waktu tersebut (durasi 2 jam)"]
|
|
},
|
|
"message": "Error validasi."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/cancel</span>
|
|
<p class="mt-2">Membatalkan booking</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan dibatalkan</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 5,
|
|
"status": "dibatalkan",
|
|
"updated_at": "2023-05-05T11:00:00.000000Z"
|
|
},
|
|
"message": "Booking berhasil dibatalkan."
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"status": ["Booking tidak dapat dibatalkan karena sudah diproses"]
|
|
},
|
|
"message": "Error validasi."
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="tailor-endpoints" class="mt-4">
|
|
<h3>Penjahit</h3>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/dashboard</span>
|
|
<p class="mt-2">Mendapatkan data dashboard penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"user": {
|
|
"id": 2,
|
|
"name": "Penjahit ABC",
|
|
"email": "tailor@example.com"
|
|
},
|
|
"stats": {
|
|
"total_bookings": 10,
|
|
"ongoing_bookings": 5,
|
|
"completed_bookings": 4,
|
|
"cancelled_bookings": 1,
|
|
"average_rating": 4.5
|
|
},
|
|
"recent_bookings": [
|
|
{
|
|
"id": 10,
|
|
"transaction_code": "TRX-010",
|
|
"customer_name": "John Doe",
|
|
"appointment_date": "2023-05-20",
|
|
"service_type": "Jahit Baru",
|
|
"status": "reservasi",
|
|
"created_at": "2023-05-10T10:00:00.000000Z"
|
|
}
|
|
],
|
|
"earnings": {
|
|
"this_month": 750000,
|
|
"last_month": 500000,
|
|
"total": 1250000
|
|
}
|
|
},
|
|
"message": "Dashboard data retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/calendar/{month}/{year}</span>
|
|
<p class="mt-2">Mendapatkan jadwal booking untuk bulan dan tahun tertentu</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>month</strong> - Bulan (1-12)</li>
|
|
<li><strong>year</strong> - Tahun (format 4 digit, contoh: 2023)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"2023-05-01": {
|
|
"date": "2023-05-01",
|
|
"day": "01",
|
|
"day_name": "Senin",
|
|
"bookings": []
|
|
},
|
|
"2023-05-02": {
|
|
"date": "2023-05-02",
|
|
"day": "02",
|
|
"day_name": "Selasa",
|
|
"bookings": [
|
|
{
|
|
"id": 1,
|
|
"transaction_code": "TRX-001",
|
|
"customer_name": "John Doe",
|
|
"customer_phone": "08123456789",
|
|
"appointment_time": "10:00",
|
|
"appointment_end_time": "12:00", // Durasi 2 jam
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"status": "dikonfirmasi"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"message": "Calendar data retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Invalid date"
|
|
},
|
|
"message": "Invalid date"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/accept</span>
|
|
<p class="mt-2">Menerima booking dari pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan diterima</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 5,
|
|
"status": "dikonfirmasi",
|
|
"accepted_at": "2023-05-05T14:00:00.000000Z",
|
|
"updated_at": "2023-05-05T14:00:00.000000Z"
|
|
},
|
|
"message": "Booking berhasil dikonfirmasi"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Booking tidak dapat dikonfirmasi karena status sudah berubah"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/reject</span>
|
|
<p class="mt-2">Menolak booking dari pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan ditolak</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"rejection_reason": "Jadwal sudah penuh"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>rejection_reason</strong> - Wajib diisi, alasan penolakan</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 5,
|
|
"status": "dibatalkan",
|
|
"rejection_reason": "Jadwal sudah penuh",
|
|
"rejected_at": "2023-05-05T14:00:00.000000Z",
|
|
"updated_at": "2023-05-05T14:00:00.000000Z"
|
|
},
|
|
"message": "Booking berhasil ditolak"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"rejection_reason": ["Alasan penolakan wajib diisi"]
|
|
},
|
|
"message": "Error validasi."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/payment</span>
|
|
<p class="mt-2">Mengubah status pembayaran booking menjadi paid</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan diubah status pembayarannya</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"payment_status": "paid"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>payment_status</strong> - Wajib diisi, nilai valid: "paid" atau "success"</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 5,
|
|
"payment_status": "paid",
|
|
"updated_at": "2023-05-05T15:00:00.000000Z"
|
|
},
|
|
"message": "Status pembayaran berhasil diubah"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Unauthorized."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/completion-payment</span>
|
|
<p class="mt-2">Memproses pembayaran akhir dan mengatur tanggal pengambilan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan diproses pembayaran akhirnya</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"pickup_date": "2023-05-20"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>pickup_date</strong> - Wajib diisi, format tanggal (YYYY-MM-DD), harus tanggal sekarang atau setelahnya</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 5,
|
|
"payment_status": "paid",
|
|
"pickup_date": "2023-05-20",
|
|
"updated_at": "2023-05-05T16:00:00.000000Z"
|
|
},
|
|
"message": "Pembayaran akhir berhasil diproses"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Invalid status",
|
|
"message": "Pembayaran hanya dapat dilakukan untuk pesanan yang sudah selesai"
|
|
},
|
|
"message": "Invalid status"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/bookings</span>
|
|
<p class="mt-2">Mendapatkan semua booking penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> (optional) - Filter berdasarkan status (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 5,
|
|
"transaction_code": "TRX-005",
|
|
"customer_id": 1,
|
|
"appointment_date": "2023-05-15",
|
|
"appointment_time": "14:00",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"status": "dikonfirmasi",
|
|
"total_price": 150000,
|
|
"payment_status": "paid",
|
|
"created_at": "2023-05-05T10:00:00.000000Z",
|
|
"updated_at": "2023-05-05T15:00:00.000000Z",
|
|
"customer": {
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"phone_number": "08123456789"
|
|
}
|
|
}
|
|
],
|
|
"message": "Booking list retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/bookings/status/{status}</span>
|
|
<p class="mt-2">Mendapatkan booking penjahit berdasarkan status</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> - Status booking (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 5,
|
|
"transaction_code": "TRX-005",
|
|
"customer_name": "John Doe",
|
|
"customer_phone": "08123456789",
|
|
"appointment_date": "2023-05-15",
|
|
"service_type": "Jahit Baru",
|
|
"payment_status": "paid"
|
|
}
|
|
],
|
|
"message": "Booking list retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Invalid status"
|
|
},
|
|
"message": "Invalid status"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/services</span>
|
|
<p class="mt-2">Mendapatkan semua layanan penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"tailor_id": 2,
|
|
"name": "Jahit Kemeja",
|
|
"description": "Jasa jahit kemeja pria dan wanita",
|
|
"price": 150000,
|
|
"is_available": true,
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}
|
|
],
|
|
"message": "Services retrieved successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/penjahit/services</span>
|
|
<p class="mt-2">Menambahkan layanan baru</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"name": "Jahit Jas",
|
|
"description": "Jasa pembuatan jas pria berkualitas tinggi",
|
|
"price": 500000
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>name</strong> - Wajib diisi, nama layanan</li>
|
|
<li><strong>description</strong> - Wajib diisi, deskripsi layanan</li>
|
|
<li><strong>price</strong> - Wajib diisi, harga layanan (angka)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 2,
|
|
"tailor_id": 2,
|
|
"name": "Jahit Jas",
|
|
"description": "Jasa pembuatan jas pria berkualitas tinggi",
|
|
"price": 500000,
|
|
"is_available": true,
|
|
"created_at": "2023-05-05T10:00:00.000000Z",
|
|
"updated_at": "2023-05-05T10:00:00.000000Z"
|
|
},
|
|
"message": "Service created successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"price": ["Harga harus berupa angka"]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/penjahit/gallery</span>
|
|
<p class="mt-2">Mendapatkan semua galeri penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"tailor_id": 2,
|
|
"title": "Kemeja Batik",
|
|
"description": "Kemeja batik pesanan pelanggan",
|
|
"photo_path": "gallery_photos/kemeja_batik.jpg",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}
|
|
],
|
|
"message": "Gallery items retrieved successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/penjahit/gallery</span>
|
|
<p class="mt-2">Menambahkan item galeri baru</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: multipart/form-data</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"title": "Jas Pernikahan",
|
|
"description": "Jas pernikahan custom pesanan pelanggan",
|
|
"photo": [file]
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>title</strong> - Wajib diisi, judul item galeri</li>
|
|
<li><strong>description</strong> - Wajib diisi, deskripsi item galeri</li>
|
|
<li><strong>photo</strong> - Wajib diisi, file gambar, maksimal 2MB</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 2,
|
|
"tailor_id": 2,
|
|
"title": "Jas Pernikahan",
|
|
"description": "Jas pernikahan custom pesanan pelanggan",
|
|
"photo_path": "gallery_photos/jas_pernikahan.jpg",
|
|
"created_at": "2023-05-05T10:00:00.000000Z",
|
|
"updated_at": "2023-05-05T10:00:00.000000Z"
|
|
},
|
|
"message": "Gallery item created successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"photo": ["File harus berupa gambar dengan ukuran maksimal 2MB"]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="admin-endpoints" class="mt-4">
|
|
<h3>Admin</h3>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/dashboard</span>
|
|
<p class="mt-2">Mendapatkan data dashboard admin</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"stats": {
|
|
"total_users": {
|
|
"customers": 50,
|
|
"tailors": 20,
|
|
"admins": 2
|
|
},
|
|
"bookings": {
|
|
"total": 100,
|
|
"ongoing": 40,
|
|
"completed": 55,
|
|
"cancelled": 5
|
|
},
|
|
"revenue": {
|
|
"this_month": 5000000,
|
|
"last_month": 4500000,
|
|
"total": 15000000
|
|
},
|
|
"ratings": {
|
|
"average": 4.7,
|
|
"count": 75
|
|
}
|
|
},
|
|
"recent_bookings": [
|
|
{
|
|
"id": 10,
|
|
"transaction_code": "TRX-010",
|
|
"customer_name": "John Doe",
|
|
"tailor_name": "Penjahit ABC",
|
|
"service_type": "Jahit Baru",
|
|
"status": "diproses",
|
|
"total_price": 150000,
|
|
"created_at": "2023-05-10T10:00:00.000000Z"
|
|
}
|
|
],
|
|
"recent_users": [
|
|
{
|
|
"id": 70,
|
|
"name": "Jane Smith",
|
|
"role": "pelanggan",
|
|
"created_at": "2023-05-10T10:00:00.000000Z"
|
|
}
|
|
]
|
|
},
|
|
"message": "Dashboard data retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized access"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/customers</span>
|
|
<p class="mt-2">Mendapatkan semua data pelanggan</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>search</strong> (optional) - Mencari berdasarkan nama atau email</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"profile_photo": "profile_photos/user1.jpg",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"bookings_count": 5
|
|
}
|
|
],
|
|
"message": "Customers retrieved successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/withdrawals/pending</span>
|
|
<p class="mt-2">Mendapatkan daftar permintaan penarikan dana yang perlu diproses</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{\n "success": true,\n "data": [\n {\n "id": 1,\n "amount": 500000.00,\n "status": "pending",\n "created_at": "2024-05-03T10:00:00.000000Z",\n "wallet": {\n "user": {\n "id": 1,\n "name": "John Doe",\n "email": "john@example.com"\n }\n },\n "bank_account": {\n "bank_name": "BCA",\n "account_number": "1234567890",\n "account_holder_name": "John Doe"\n }\n }\n ],\n "message": "Pending withdrawals retrieved successfully"\n}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/bank-accounts/pending</span>
|
|
<p class="mt-2">Mendapatkan daftar rekening bank yang perlu diverifikasi</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{\n "success": true,\n "data": [\n {\n "id": 1,\n "user_id": 2,\n "bank_name": "BCA",\n "account_number": "1234567890",
|
|
"account_holder_name": "John Doe",\n "status": "pending",\n "created_at": "2024-05-03T10:00:00.000000Z",\n "updated_at": "2024-05-03T10:00:00.000000Z",\n "user": {\n "id": 2,\n "name": "John Doe",\n "email": "john@example.com",\n "role": "penjahit"\n }\n }\n ],\n "message": "Pending bank accounts retrieved successfully"\n}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/admin/withdrawals/{withdrawal}/process</span>
|
|
<p class="mt-2">Memproses permintaan penarikan (approve/reject)</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: multipart/form-data</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>withdrawal</strong> - ID permintaan penarikan</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"status": "completed", // atau "rejected"
|
|
"rejection_reason": "", // wajib diisi jika status = "rejected"
|
|
"proof_of_payment": [file] // wajib diupload jika status = "completed"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>status</strong> - Wajib diisi, nilai yang valid: "completed" atau "rejected"</li>
|
|
<li><strong>rejection_reason</strong> - Wajib diisi jika status = "rejected"</li>
|
|
<li><strong>proof_of_payment</strong> - Wajib diisi jika status = "completed", file bukti pembayaran</li>
|
|
</ul>
|
|
<h5>Response (Completed)</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "completed",
|
|
"rejection_reason": null,
|
|
"proof_of_payment": "proof_of_payments/withdrawal_1_proof.jpg",
|
|
"processed_at": "2024-05-03T10:30:00.000000Z",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:30:00.000000Z"
|
|
},
|
|
"message": "Withdrawal completed successfully"
|
|
}</code></pre>
|
|
<h5>Response (Rejected)</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "rejected",
|
|
"rejection_reason": "Informasi rekening tidak valid",
|
|
"proof_of_payment": null,
|
|
"processed_at": "2024-05-03T10:30:00.000000Z",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:30:00.000000Z"
|
|
},
|
|
"message": "Withdrawal rejected successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"status": ["The status field is required."],
|
|
"rejection_reason": ["The rejection reason field is required when status is rejected."],
|
|
"proof_of_payment": ["The proof of payment field is required when status is completed."]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div id="wallet-endpoints" class="mt-4">
|
|
<h3>Wallet & Withdrawal</h3>
|
|
|
|
<h4 id="midtrans-payment" class="mt-4">Midtrans Payment</h4>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/midtrans/pay</span>
|
|
<p class="mt-2">Memulai proses pembayaran Midtrans</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan dibayar</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862",
|
|
"redirect_url": "https://app.sandbox.midtrans.com/snap/v2/vtweb/66e4fa55-fdac-4ef9-91b5-733b97d1b862",
|
|
"booking": {
|
|
"id": 1,
|
|
"transaction_code": "TRX-20240503-A1B2C3",
|
|
"total_price": 150000,
|
|
"status": "selesai"
|
|
}
|
|
},
|
|
"message": "Token pembayaran berhasil dibuat"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/bookings/{booking}/payment-status</span>
|
|
<p class="mt-2">Memeriksa status pembayaran</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan diperiksa status pembayarannya</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"booking_id": 1,
|
|
"transaction_code": "TRX-20240503-A1B2C3",
|
|
"payment_status": "pending",
|
|
"payment_method": "bank_transfer",
|
|
"total_price": 150000,
|
|
"status": "selesai",
|
|
"midtrans_snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862"
|
|
},
|
|
"message": "Status pembayaran berhasil diambil"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bookings/{booking}/payment-status/check</span>
|
|
<p class="mt-2">Memeriksa dan mengupdate status pembayaran secara manual</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>booking</strong> - ID booking yang akan diupdate status pembayarannya</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"booking_id": 1,
|
|
"transaction_code": "TRX-20240503-A1B2C3",
|
|
"payment_status": "paid",
|
|
"payment_method": "bank_transfer",
|
|
"total_price": 150000,
|
|
"status": "selesai",
|
|
"midtrans_status": "settlement",
|
|
"midtrans_snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862"
|
|
},
|
|
"message": "Status pembayaran berhasil diperbarui"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/wallet</span>
|
|
<p class="mt-2">Mendapatkan informasi wallet</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"balance": 1000000.00,
|
|
"pending_withdrawals": 300000.00,
|
|
"available_balance": 700000.00,
|
|
"transactions": [
|
|
{
|
|
"id": 1,
|
|
"type": "credit",
|
|
"amount": 500000.00,
|
|
"description": "Pembayaran booking #TRX-001",
|
|
"status": "success",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"booking": {
|
|
"id": 1,
|
|
"transaction_code": "TRX-001",
|
|
"service_type": "jahit",
|
|
"category": "baju"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"message": "Wallet information retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Catatan</h5>
|
|
<ul>
|
|
<li><strong>balance</strong> - Total saldo dalam wallet</li>
|
|
<li><strong>pending_withdrawals</strong> - Total semua penarikan yang masih dalam status "pending" atau "processing"</li>
|
|
<li><strong>available_balance</strong> - Saldo yang tersedia untuk penarikan (balance - pending_withdrawals)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/bank-accounts</span>
|
|
<p class="mt-2">Mendapatkan daftar rekening bank penjahit</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "active",
|
|
"rejection_reason": null,
|
|
"verified_at": "2024-05-03T10:00:00.000000Z",
|
|
"created_at": "2024-05-03T09:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z"
|
|
}
|
|
],
|
|
"message": "Bank accounts retrieved successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/bank-accounts</span>
|
|
<p class="mt-2">Mendaftarkan rekening bank baru</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>bank_name</strong> - Wajib diisi, nama bank</li>
|
|
<li><strong>account_number</strong> - Wajib diisi, nomor rekening</li>
|
|
<li><strong>account_holder_name</strong> - Wajib diisi, nama pemilik rekening</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "pending",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z"
|
|
},
|
|
"message": "Bank account registered successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/withdrawals</span>
|
|
<p class="mt-2">Membuat permintaan penarikan dana</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"bank_account_id": 1,
|
|
"amount": 500000
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>bank_account_id</strong> - Wajib diisi, ID rekening bank yang sudah terverifikasi</li>
|
|
<li><strong>amount</strong> - Wajib diisi, jumlah penarikan (minimal 10000)</li>
|
|
<li>Jumlah penarikan harus kurang dari atau sama dengan saldo tersedia (available_balance)</li>
|
|
<li>Saldo tersedia dihitung dari: saldo total (balance) dikurangi total penarikan tertunda (pending_withdrawals)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"withdrawal": {
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "pending",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z"
|
|
},
|
|
"wallet": {
|
|
"balance": 1000000.00,
|
|
"pending_withdrawals": 500000.00,
|
|
"available_balance": 500000.00
|
|
}
|
|
},
|
|
"message": "Withdrawal request submitted successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"balance": 1000000.00,
|
|
"pending_withdrawals": 800000.00,
|
|
"available_balance": 200000.00,
|
|
"requested_amount": 500000.00
|
|
},
|
|
"message": "Insufficient available balance."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/withdrawals</span>
|
|
<p class="mt-2">Mendapatkan riwayat penarikan dana</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> (optional) - Filter berdasarkan status penarikan. Nilai yang diperbolehkan: "pending", "processing", "completed", "rejected"</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"amount": 500000.00,
|
|
"status": "completed",
|
|
"created_at": "2024-05-03T10:00:00.000000Z",
|
|
"processed_at": "2024-05-03T11:00:00.000000Z",
|
|
"bank_account": {
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe"
|
|
}
|
|
}
|
|
],
|
|
"message": "Withdrawal history retrieved successfully"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<h4 id="bank-account-management" class="mt-4">Manajemen Rekening Bank</h4>
|
|
|
|
<div class="endpoint post">
|
|
<span class="method post-method">POST</span>
|
|
<span class="ms-2">/admin/bank-accounts/{bankAccount}/verify</span>
|
|
<p class="mt-2">Memverifikasi akun bank</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}
|
|
Content-Type: application/json</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>bankAccount</strong> - ID akun bank</li>
|
|
</ul>
|
|
<h5>Request Body</h5>
|
|
<pre><code>{
|
|
"status": "active", // atau "rejected"
|
|
"rejection_reason": null // wajib diisi jika status = "rejected", boleh null jika status = "active"
|
|
}</code></pre>
|
|
<h5>Validasi</h5>
|
|
<ul>
|
|
<li><strong>status</strong> - Wajib diisi, nilai yang valid: "active" atau "rejected"</li>
|
|
<li><strong>rejection_reason</strong> - Wajib diisi jika status = "rejected", boleh null jika status = "active"</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "active",
|
|
"rejection_reason": null,
|
|
"verified_at": "2024-05-03T10:00:00.000000Z",
|
|
"created_at": "2024-05-02T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z"
|
|
},
|
|
"message": "Bank account verification completed"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"status": ["The status field must be one of: active, rejected."],
|
|
"rejection_reason": ["The rejection reason field is required when status is rejected."]
|
|
},
|
|
"message": "Validation Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/bank-accounts/verified</span>
|
|
<p class="mt-2">Mendapatkan riwayat akun bank yang sudah diverifikasi (disetujui atau ditolak)</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> (optional) - Filter berdasarkan status ("active" atau "rejected")</li>
|
|
<li><strong>search</strong> (optional) - Pencarian berdasarkan nama penjahit, nama bank, nomor rekening, atau nama pemilik rekening</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "active",
|
|
"rejection_reason": null,
|
|
"verified_at": "2024-05-03T10:00:00.000000Z",
|
|
"created_at": "2024-05-01T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z",
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "penjahit"
|
|
}
|
|
},
|
|
{
|
|
"id": 2,
|
|
"user_id": 3,
|
|
"bank_name": "Mandiri",
|
|
"account_number": "9876543210",
|
|
"account_holder_name": "Jane Smith",
|
|
"status": "rejected",
|
|
"rejection_reason": "Data tidak sesuai dengan identitas penjahit",
|
|
"verified_at": "2024-05-02T11:00:00.000000Z",
|
|
"created_at": "2024-05-01T09:00:00.000000Z",
|
|
"updated_at": "2024-05-02T11:00:00.000000Z",
|
|
"user": {
|
|
"id": 3,
|
|
"name": "Jane Smith",
|
|
"email": "jane@example.com",
|
|
"role": "penjahit"
|
|
}
|
|
}
|
|
],
|
|
"message": "Verified bank accounts retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/bank-accounts/{bankAccount}</span>
|
|
<p class="mt-2">Mendapatkan detail akun bank beserta riwayat penarikannya</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Path Parameters</h5>
|
|
<ul>
|
|
<li><strong>bankAccount</strong> - ID akun bank</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "active",
|
|
"rejection_reason": null,
|
|
"verified_at": "2024-05-03T10:00:00.000000Z",
|
|
"created_at": "2024-05-02T10:00:00.000000Z",
|
|
"updated_at": "2024-05-03T10:00:00.000000Z",
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"phone_number": "08123456789",
|
|
"role": "penjahit"
|
|
},
|
|
"withdrawals": [
|
|
{
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "completed",
|
|
"rejection_reason": null,
|
|
"proof_of_payment": "proof_of_payments/withdrawal_1.jpg",
|
|
"processed_at": "2024-05-04T14:00:00.000000Z",
|
|
"created_at": "2024-05-04T10:00:00.000000Z",
|
|
"updated_at": "2024-05-04T14:00:00.000000Z"
|
|
}
|
|
]
|
|
},
|
|
"message": "Bank account detail retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Bank account not found"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="endpoint get">
|
|
<span class="method get-method">GET</span>
|
|
<span class="ms-2">/admin/withdrawals/history</span>
|
|
<p class="mt-2">Mendapatkan riwayat penarikan dana yang telah diproses (completed & rejected)</p>
|
|
<h5>Headers</h5>
|
|
<pre><code>Authorization: Bearer {token}</code></pre>
|
|
<h5>Query Parameters</h5>
|
|
<ul>
|
|
<li><strong>status</strong> (optional) - Filter berdasarkan status penarikan. Nilai yang diperbolehkan: "completed", "rejected"</li>
|
|
<li><strong>search</strong> (optional) - Pencarian berdasarkan nama pengguna, nomor rekening, atau nama bank</li>
|
|
<li><strong>from_date</strong> (optional) - Filter dari tanggal tertentu (format: YYYY-MM-DD)</li>
|
|
<li><strong>to_date</strong> (optional) - Filter sampai tanggal tertentu (format: YYYY-MM-DD)</li>
|
|
<li><strong>sort_by</strong> (optional) - Kolom yang digunakan untuk pengurutan. Nilai yang diperbolehkan: "created_at", "amount", "processed_at" (default: "processed_at")</li>
|
|
<li><strong>sort_order</strong> (optional) - Arah pengurutan. Nilai yang diperbolehkan: "asc", "desc" (default: "desc")</li>
|
|
<li><strong>per_page</strong> (optional) - Jumlah item per halaman (default: 15)</li>
|
|
</ul>
|
|
<h5>Response</h5>
|
|
<pre><code>{
|
|
"success": true,
|
|
"data": {
|
|
"current_page": 1,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "completed",
|
|
"rejection_reason": null,
|
|
"proof_of_payment": "proof_of_payments/withdrawal_1.jpg",
|
|
"processed_at": "2024-05-04T14:00:00.000000Z",
|
|
"created_at": "2024-05-04T10:00:00.000000Z",
|
|
"updated_at": "2024-05-04T14:00:00.000000Z",
|
|
"wallet": {
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"balance": 1500000,
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "penjahit"
|
|
}
|
|
},
|
|
"bank_account": {
|
|
"id": 1,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe"
|
|
}
|
|
},
|
|
{
|
|
"id": 2,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 300000.00,
|
|
"status": "rejected",
|
|
"rejection_reason": "Informasi rekening tidak sesuai dengan identitas penjahit",
|
|
"proof_of_payment": null,
|
|
"processed_at": "2024-05-05T15:00:00.000000Z",
|
|
"created_at": "2024-05-05T11:00:00.000000Z",
|
|
"updated_at": "2024-05-05T15:00:00.000000Z",
|
|
"wallet": {
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"balance": 1500000,
|
|
"user": {
|
|
"id": 2,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "penjahit"
|
|
}
|
|
},
|
|
"bank_account": {
|
|
"id": 1,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe"
|
|
}
|
|
}
|
|
],
|
|
"first_page_url": "http://localhost:8000/api/admin/withdrawals/history?page=1",
|
|
"from": 1,
|
|
"last_page": 1,
|
|
"last_page_url": "http://localhost:8000/api/admin/withdrawals/history?page=1",
|
|
"links": [
|
|
{
|
|
"url": null,
|
|
"label": "« Previous",
|
|
"active": false
|
|
},
|
|
{
|
|
"url": "http://localhost:8000/api/admin/withdrawals/history?page=1",
|
|
"label": "1",
|
|
"active": true
|
|
},
|
|
{
|
|
"url": null,
|
|
"label": "Next »",
|
|
"active": false
|
|
}
|
|
],
|
|
"next_page_url": null,
|
|
"path": "http://localhost:8000/api/admin/withdrawals/history",
|
|
"per_page": 15,
|
|
"prev_page_url": null,
|
|
"to": 2,
|
|
"total": 2
|
|
},
|
|
"message": "Withdrawal history retrieved successfully"
|
|
}</code></pre>
|
|
<h5>Error Response</h5>
|
|
<pre><code>{
|
|
"success": false,
|
|
"data": {
|
|
"error": "Unauthorized"
|
|
},
|
|
"message": "Error."
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-5 mb-5" id="models">
|
|
<h2>Model Data</h2>
|
|
|
|
<p class="mb-4">Berikut adalah struktur model data utama yang digunakan dalam API Project Jahit.</p>
|
|
|
|
<h4>User</h4>
|
|
<p>Representasi pengguna dalam sistem, bisa berupa admin, penjahit, atau pelanggan.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"role": "penjahit", // atau "pelanggan", "admin"
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"shop_description": "Jasa jahit profesional dengan pelayanan terbaik", // hanya untuk penjahit
|
|
"profile_photo": "profile_photos/user1.jpg",
|
|
"latitude": -6.123456,
|
|
"longitude": 106.789012,
|
|
"email_verified_at": "2023-05-01T10:00:00.000000Z",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>Booking</h4>
|
|
<p>Data pemesanan jasa jahit.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"transaction_code": "TRX-20230501-A1B2C3",
|
|
"customer_id": 1,
|
|
"tailor_id": 2,
|
|
"appointment_date": "2023-05-05",
|
|
"appointment_time": "10:00",
|
|
"service_type": "Jahit Baru", // atau "Perbaikan"
|
|
"category": "Atasan", // atau "Bawahan", "Terusan"
|
|
"design_photo": "design_photos/design1.jpg",
|
|
"notes": "Mohon dibuat sesuai ukuran",
|
|
"status": "reservasi", // atau "dikonfirmasi", "diproses", "selesai", "dibatalkan"
|
|
"total_price": 150000,
|
|
"payment_status": "unpaid", // atau "pending", "paid", "expired", "failed", "cancelled"
|
|
"payment_method": "Midtrans",
|
|
"midtrans_snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862",
|
|
"completed_at": null,
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>TailorSpecialization</h4>
|
|
<p>Kategori spesialisasi penjahit.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"name": "Kemeja",
|
|
"icon": "icons/kemeja.png",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>TailorService</h4>
|
|
<p>Layanan yang ditawarkan oleh penjahit.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"name": "Jahit Kemeja",
|
|
"description": "Jasa jahit kemeja pria dan wanita",
|
|
"price": 150000,
|
|
"is_available": true,
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>TailorGallery</h4>
|
|
<p>Item galeri karya penjahit.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"title": "Kemeja Batik",
|
|
"description": "Kemeja batik pesanan pelanggan",
|
|
"photo_path": "gallery_photos/kemeja_batik.jpg",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-01T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>TailorRating</h4>
|
|
<p>Penilaian yang diberikan pelanggan untuk penjahit.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"booking_id": 1,
|
|
"customer_id": 1,
|
|
"tailor_id": 2,
|
|
"rating": 5, // 1-5
|
|
"review": "Sangat puas dengan hasilnya",
|
|
"created_at": "2023-05-10T10:00:00.000000Z",
|
|
"updated_at": "2023-05-10T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>Wallet</h4>
|
|
<p>Dompet digital penjahit untuk menerima pembayaran.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"balance": 1000000.00,
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-10T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>BankAccount</h4>
|
|
<p>Akun bank penjahit untuk penarikan dana.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"user_id": 2,
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe",
|
|
"status": "active", // atau "pending", "rejected"
|
|
"rejection_reason": null,
|
|
"verified_at": "2023-05-03T10:00:00.000000Z",
|
|
"created_at": "2023-05-01T10:00:00.000000Z",
|
|
"updated_at": "2023-05-03T10:00:00.000000Z"
|
|
}</code></pre>
|
|
|
|
<h4>Withdrawal</h4>
|
|
<p>Permintaan penarikan dana dari wallet ke rekening bank.</p>
|
|
<pre><code>{
|
|
"id": 1,
|
|
"wallet_id": 1,
|
|
"bank_account_id": 1,
|
|
"amount": 500000.00,
|
|
"status": "pending", // atau "processing", "completed", "rejected"
|
|
"rejection_reason": null,
|
|
"proof_of_payment": null,
|
|
"processed_at": null,
|
|
"created_at": "2023-05-10T10:00:00.000000Z",
|
|
"updated_at": "2023-05-10T10:00:00.000000Z"
|
|
}</code></pre>
|
|
</div>
|
|
|
|
<div class="mt-5 mb-5" id="status-codes">
|
|
<h2>Kode Status</h2>
|
|
|
|
<p class="mb-4">Berikut adalah kode status HTTP yang digunakan dalam API Project Jahit:</p>
|
|
|
|
<table class="table table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Kode</th>
|
|
<th>Status</th>
|
|
<th>Deskripsi</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>200</td>
|
|
<td>OK</td>
|
|
<td>Permintaan berhasil diproses</td>
|
|
</tr>
|
|
<tr>
|
|
<td>201</td>
|
|
<td>Created</td>
|
|
<td>Sumber daya baru berhasil dibuat</td>
|
|
</tr>
|
|
<tr>
|
|
<td>400</td>
|
|
<td>Bad Request</td>
|
|
<td>Format permintaan tidak valid</td>
|
|
</tr>
|
|
<tr>
|
|
<td>401</td>
|
|
<td>Unauthorized</td>
|
|
<td>Kredensial autentikasi tidak valid atau tidak ada</td>
|
|
</tr>
|
|
<tr>
|
|
<td>403</td>
|
|
<td>Forbidden</td>
|
|
<td>Klien tidak memiliki hak akses ke sumber daya yang diminta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>404</td>
|
|
<td>Not Found</td>
|
|
<td>Sumber daya yang diminta tidak ditemukan</td>
|
|
</tr>
|
|
<tr>
|
|
<td>422</td>
|
|
<td>Unprocessable Entity</td>
|
|
<td>Validasi data gagal</td>
|
|
</tr>
|
|
<tr>
|
|
<td>500</td>
|
|
<td>Internal Server Error</td>
|
|
<td>Terjadi kesalahan pada server</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="mt-5 mb-5" id="examples">
|
|
<h2>Contoh</h2>
|
|
|
|
<h4>Alur Registrasi dan Login Pelanggan</h4>
|
|
<ol>
|
|
<li>Registrasi akun pelanggan:
|
|
<pre><code>POST /api/pelanggan/register
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"password": "password123",
|
|
"password_confirmation": "password123",
|
|
"phone_number": "08123456789",
|
|
"address": "Jl. Example No. 123",
|
|
"latitude": -6.123456,
|
|
"longitude": 106.789012
|
|
}</code></pre>
|
|
</li>
|
|
<li>Verifikasi email (jika diperlukan)</li>
|
|
<li>Login untuk mendapatkan token:
|
|
<pre><code>POST /api/pelanggan/login
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"email": "john@example.com",
|
|
"password": "password123"
|
|
}</code></pre>
|
|
</li>
|
|
<li>Simpan token untuk permintaan berikutnya:
|
|
<pre><code>Authorization: Bearer 1|laravel_sanctum_token...</code></pre>
|
|
</li>
|
|
</ol>
|
|
|
|
<h4>Alur Booking Jasa Jahit</h4>
|
|
<ol>
|
|
<li>Cari penjahit berdasarkan spesialisasi:
|
|
<pre><code>GET /api/tailors/search?specialization=1</code></pre>
|
|
</li>
|
|
<li>Lihat detail penjahit:
|
|
<pre><code>GET /api/tailors/2</code></pre>
|
|
</li>
|
|
<li>Buat booking baru:
|
|
<pre><code>POST /api/tailors/2/book
|
|
Content-Type: multipart/form-data
|
|
|
|
{
|
|
"appointment_date": "2023-05-15",
|
|
"appointment_time": "14:00",
|
|
"service_type": "Jahit Baru",
|
|
"category": "Atasan",
|
|
"design_photo": [file],
|
|
"notes": "Mohon dibuat sesuai ukuran"
|
|
}</code></pre>
|
|
</li>
|
|
<li>Lakukan pembayaran:
|
|
<pre><code>POST /api/bookings/5/midtrans/pay</code></pre>
|
|
</li>
|
|
<li>Cek status pembayaran secara manual:
|
|
<pre><code>POST /api/bookings/5/payment-status/check</code></pre>
|
|
</li>
|
|
</ol>
|
|
|
|
<h4>Alur Penarikan Dana Penjahit</h4>
|
|
<ol>
|
|
<li>Daftarkan rekening bank:
|
|
<pre><code>POST /api/bank-accounts
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"bank_name": "BCA",
|
|
"account_number": "1234567890",
|
|
"account_holder_name": "John Doe"
|
|
}</code></pre>
|
|
</li>
|
|
<li>Admin memverifikasi rekening bank:
|
|
<pre><code>POST /api/admin/bank-accounts/1/verify
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"status": "active"
|
|
}</code></pre>
|
|
</li>
|
|
<li>Penjahit melakukan permintaan penarikan dana:
|
|
<pre><code>POST /api/withdrawals
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"bank_account_id": 1,
|
|
"amount": 500000
|
|
}</code></pre>
|
|
</li>
|
|
<li>Admin memproses permintaan penarikan:
|
|
<pre><code>POST /api/admin/withdrawals/1/process
|
|
Content-Type: multipart/form-data
|
|
|
|
{
|
|
"status": "processing",
|
|
"proof_of_payment": [file]
|
|
}</code></pre>
|
|
</li>
|
|
<li>Admin menyelesaikan proses penarikan:
|
|
<pre><code>POST /api/admin/withdrawals/1/complete</code></pre>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
|
|
<div class="mt-5 mb-5" id="files">
|
|
<h2>File & Media</h2>
|
|
|
|
<p class="mb-4">Berikut adalah informasi tentang manajemen file dan media dalam API Project Jahit.</p>
|
|
|
|
<h4>Upload File</h4>
|
|
<p>Untuk mengupload file seperti foto profil, desain pakaian, bukti pembayaran, atau gambar galeri, gunakan format <code>multipart/form-data</code> dalam permintaan API.</p>
|
|
|
|
<h5>Endpoint yang Mendukung Upload File:</h5>
|
|
<ul>
|
|
<li><strong>/profile/photo</strong> - Upload foto profil pengguna</li>
|
|
<li><strong>/tailors/{tailor}/book</strong> - Upload desain pakaian saat membuat booking</li>
|
|
<li><strong>/penjahit/gallery</strong> - Upload foto untuk galeri penjahit</li>
|
|
<li><strong>/admin/withdrawals/{withdrawal}/process</strong> - Upload bukti pembayaran penarikan</li>
|
|
</ul>
|
|
|
|
<h5>Batasan Upload:</h5>
|
|
<ul>
|
|
<li>Format yang didukung: JPG, JPEG, PNG, GIF</li>
|
|
<li>Ukuran maksimum: 2MB per file</li>
|
|
<li>Resolusi gambar yang direkomendasikan: minimal 300x300 pixel</li>
|
|
</ul>
|
|
|
|
<h4>Penyimpanan File</h4>
|
|
<p>File yang diupload akan disimpan di server dengan struktur direktori sebagai berikut:</p>
|
|
<ul>
|
|
<li><strong>profile_photos/</strong> - Foto profil pengguna</li>
|
|
<li><strong>design_photos/</strong> - Foto desain pakaian</li>
|
|
<li><strong>gallery_photos/</strong> - Foto galeri penjahit</li>
|
|
<li><strong>proof_of_payments/</strong> - Bukti pembayaran penarikan</li>
|
|
</ul>
|
|
|
|
<h4>Mengakses File</h4>
|
|
<p>File yang telah diupload dapat diakses melalui URL yang dikembalikan dalam respons API. Contoh URL:</p>
|
|
<pre><code>https://api.project-jahit.com/storage/profile_photos/user1.jpg</code></pre>
|
|
|
|
<h4>Menghapus File</h4>
|
|
<p>Beberapa endpoint menyediakan operasi untuk menghapus file, seperti:</p>
|
|
<ul>
|
|
<li><strong>DELETE /penjahit/shop-profile/photo</strong> - Menghapus foto profil toko</li>
|
|
<li><strong>DELETE /penjahit/gallery/{gallery}</strong> - Menghapus item galeri</li>
|
|
</ul>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
|
|
</html>
|