Pendahuluan

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.

Base URL

http://localhost:8000/api

Autentikasi

API ini menggunakan Laravel Sanctum untuk autentikasi. Token akan diberikan setelah login dan harus disertakan dalam header setiap permintaan ke endpoint yang terproteksi.

Format Header

Authorization: Bearer {token}

Role & Hak Akses

Sistem memiliki 3 role pengguna:

  • admin - Administrator platform
  • penjahit - Penjahit/Penyedia jasa
  • pelanggan - Pelanggan/Pengguna jasa

Endpoint API

Endpoint Publik

GET /test

Tes koneksi API

Response
{
  "message": "API is working"
}
GET /specializations

Mendapatkan semua spesialisasi penjahit

GET /tailors/search?specialization={id}

Mencari penjahit berdasarkan spesialisasi

GET /tailors/{id}

Mendapatkan detail informasi penjahit

Autentikasi

POST /pelanggan/register

Registrasi akun pelanggan baru

Headers
Content-Type: application/json
Request Body
{
    "name": "John Doe",
    "email": "john@example.com",
    "password": "password123",
    "password_confirmation": "password123",
    "phone_number": "08123456789",
    "address": "Jl. Example No. 123"
}
Validasi
  • name - Wajib diisi, nama lengkap pengguna
  • email - Wajib diisi, format email, harus unik
  • password - Wajib diisi, minimal 8 karakter
  • password_confirmation - Wajib diisi, harus sama dengan password
  • phone_number - Wajib diisi, nomor telepon
  • address - Wajib diisi, alamat lengkap
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "email": ["Email sudah digunakan."],
        "password": ["Password minimal harus 8 karakter."]
    },
    "message": "Validation Error."
}
POST /pelanggan/login

Login sebagai pelanggan

Headers
Content-Type: application/json
Request Body
{
    "email": "john@example.com",
    "password": "password123"
}
Validasi
  • email - Wajib diisi, format email
  • password - Wajib diisi
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Email atau password tidak valid"
    },
    "message": "Authentication Error."
}
POST /penjahit/register

Registrasi akun penjahit baru

Headers
Content-Type: application/json
Request Body
{
    "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]
}
Validasi
  • name - Wajib diisi, nama lengkap penjahit
  • email - Wajib diisi, format email, harus unik
  • password - Wajib diisi, minimal 8 karakter
  • password_confirmation - Wajib diisi, harus sama dengan password
  • phone_number - Wajib diisi, nomor telepon
  • address - Wajib diisi, alamat lengkap
  • shop_description - Wajib diisi, deskripsi toko/jasa
  • specializations - Wajib diisi, array ID spesialisasi
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "email": ["Email sudah digunakan."],
        "specializations": ["Spesialisasi wajib diisi."]
    },
    "message": "Validation Error."
}
POST /penjahit/login

Login sebagai penjahit

Headers
Content-Type: application/json
Request Body
{
    "email": "tailor@example.com",
    "password": "password123"
}
Validasi
  • email - Wajib diisi, format email
  • password - Wajib diisi
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Email atau password tidak valid"
    },
    "message": "Authentication Error."
}
POST /admin/login

Login sebagai admin

Headers
Content-Type: application/json
Request Body
{
    "email": "admin@example.com",
    "password": "admin123"
}
Validasi
  • email - Wajib diisi, format email
  • password - Wajib diisi
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Email atau password tidak valid"
    },
    "message": "Authentication Error."
}
POST /logout

Logout pengguna (invalidasi token)

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": {},
    "message": "Berhasil logout"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthenticated"
    },
    "message": "Error."
}
POST /email/verification-notification

Mengirim ulang email verifikasi

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": {},
    "message": "Email verifikasi telah dikirim"
}

Profil

GET /profile

Mendapatkan informasi profil pengguna

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthenticated"
    },
    "message": "Error."
}
POST /profile

Mengupdate informasi profil pengguna

Headers
Authorization: Bearer {token}
Content-Type: application/json
Request Body
{
    "name": "John Doe Updated",
    "phone_number": "087654321",
    "address": "Jl. Updated No. 456",
    "shop_description": "Deskripsi toko yang diupdate" // khusus penjahit
}
Validasi
  • name - Opsional, nama baru pengguna
  • phone_number - Opsional, nomor telepon baru
  • address - Opsional, alamat baru
  • shop_description - Opsional, deskripsi toko baru (hanya untuk penjahit)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "phone_number": ["Format nomor telepon tidak valid"]
    },
    "message": "Validation Error."
}
POST /profile/photo

Mengupload foto profil

Headers
Authorization: Bearer {token}
Content-Type: multipart/form-data
Request Body
{
    "profile_photo": [file]
}
Validasi
  • profile_photo - Wajib diisi, file gambar, maksimal 2MB
Response
{
    "success": true,
    "data": {
        "id": 1,
        "name": "John Doe",
        "profile_photo": "profile_photos/user1_updated.jpg"
    },
    "message": "Foto profil berhasil diupload"
}
Error Response
{
    "success": false,
    "data": {
        "profile_photo": ["File harus berupa gambar dengan ukuran maksimal 2MB"]
    },
    "message": "Validation Error."
}

Pelanggan

GET /dashboard

Mendapatkan data dashboard pelanggan

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized"
    },
    "message": "Error."
}
GET /bookings/customer

Mendapatkan semua booking yang dilakukan pelanggan

Headers
Authorization: Bearer {token}
Query Parameters
  • status (optional) - Filter berdasarkan status (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized"
    },
    "message": "Error."
}
GET /bookings/customer/status/{status}

Mendapatkan booking pelanggan berdasarkan status

Headers
Authorization: Bearer {token}
Path Parameters
  • status - Status booking (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Invalid status"
    },
    "message": "Invalid status"
}
POST /tailors/{tailor}/book

Membuat booking baru ke penjahit

Headers
Authorization: Bearer {token}
Content-Type: multipart/form-data
Path Parameters
  • tailor - ID penjahit yang akan dibooking
Request Body
{
    "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"
}
Validasi
  • appointment_date - Wajib diisi, format tanggal (YYYY-MM-DD), harus tanggal sekarang atau setelahnya
  • appointment_time - Wajib diisi, format waktu (HH:MM)
  • service_type - Wajib diisi, nilai valid: "Perbaikan", "Jahit Baru"
  • category - Wajib diisi, nilai valid: "Atasan", "Bawahan", "Terusan"
  • design_photo - Wajib diisi, file gambar, maksimal 2MB
  • notes - Opsional, catatan tambahan
  • payment_method - Wajib diisi, metode pembayaran
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "appointment": ["Jadwal tidak tersedia. Penjahit sudah memiliki booking pada tanggal yang sama"]
    },
    "message": "Error validasi."
}
POST /bookings/{booking}/cancel

Membatalkan booking

Headers
Authorization: Bearer {token}
Path Parameters
  • booking - ID booking yang akan dibatalkan
Response
{
    "success": true,
    "data": {
        "id": 5,
        "status": "dibatalkan",
        "updated_at": "2023-05-05T11:00:00.000000Z"
    },
    "message": "Booking berhasil dibatalkan."
}
Error Response
{
    "success": false,
    "data": {
        "status": ["Booking tidak dapat dibatalkan karena sudah diproses"]
    },
    "message": "Error validasi."
}

Penjahit

GET /penjahit/dashboard

Mendapatkan data dashboard penjahit

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized"
    },
    "message": "Error."
}
GET /penjahit/calendar/{month}/{year}

Mendapatkan jadwal booking untuk bulan dan tahun tertentu

Headers
Authorization: Bearer {token}
Path Parameters
  • month - Bulan (1-12)
  • year - Tahun (format 4 digit, contoh: 2023)
Response
{
    "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",
                    "service_type": "Jahit Baru",
                    "category": "Atasan",
                    "status": "dikonfirmasi"
                }
            ]
        }
    },
    "message": "Calendar data retrieved successfully"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Invalid date"
    },
    "message": "Invalid date"
}
POST /bookings/{booking}/accept

Menerima booking dari pelanggan

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
  • booking - ID booking yang akan diterima
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Booking tidak dapat dikonfirmasi karena status sudah berubah"
    },
    "message": "Error."
}
POST /bookings/{booking}/reject

Menolak booking dari pelanggan

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
  • booking - ID booking yang akan ditolak
Request Body
{
    "rejection_reason": "Jadwal sudah penuh"
}
Validasi
  • rejection_reason - Wajib diisi, alasan penolakan
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "rejection_reason": ["Alasan penolakan wajib diisi"]
    },
    "message": "Error validasi."
}
POST /bookings/{booking}/payment

Mengubah status pembayaran booking menjadi paid

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
  • booking - ID booking yang akan diubah status pembayarannya
Request Body
{
    "payment_status": "paid"
}
Validasi
  • payment_status - Wajib diisi, nilai valid: "paid" atau "success"
Response
{
    "success": true,
    "data": {
        "id": 5,
        "payment_status": "paid",
        "updated_at": "2023-05-05T15:00:00.000000Z"
    },
    "message": "Status pembayaran berhasil diubah"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized"
    },
    "message": "Unauthorized."
}
POST /bookings/{booking}/completion-payment

Memproses pembayaran akhir dan mengatur tanggal pengambilan

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
  • booking - ID booking yang akan diproses pembayaran akhirnya
Request Body
{
    "pickup_date": "2023-05-20"
}
Validasi
  • pickup_date - Wajib diisi, format tanggal (YYYY-MM-DD), harus tanggal sekarang atau setelahnya
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Invalid status",
        "message": "Pembayaran hanya dapat dilakukan untuk pesanan yang sudah selesai"
    },
    "message": "Invalid status"
}
GET /penjahit/bookings

Mendapatkan semua booking penjahit

Headers
Authorization: Bearer {token}
Query Parameters
  • status (optional) - Filter berdasarkan status (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized"
    },
    "message": "Error."
}
GET /penjahit/bookings/status/{status}

Mendapatkan booking penjahit berdasarkan status

Headers
Authorization: Bearer {token}
Path Parameters
  • status - Status booking (reservasi, dikonfirmasi, diproses, selesai, dibatalkan)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Invalid status"
    },
    "message": "Invalid status"
}
GET /penjahit/services

Mendapatkan semua layanan penjahit

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
POST /penjahit/services

Menambahkan layanan baru

Headers
Authorization: Bearer {token}
Content-Type: application/json
Request Body
{
    "name": "Jahit Jas",
    "description": "Jasa pembuatan jas pria berkualitas tinggi",
    "price": 500000
}
Validasi
  • name - Wajib diisi, nama layanan
  • description - Wajib diisi, deskripsi layanan
  • price - Wajib diisi, harga layanan (angka)
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "price": ["Harga harus berupa angka"]
    },
    "message": "Validation Error."
}
GET /penjahit/gallery

Mendapatkan semua galeri penjahit

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
POST /penjahit/gallery

Menambahkan item galeri baru

Headers
Authorization: Bearer {token}
Content-Type: multipart/form-data
Request Body
{
    "title": "Jas Pernikahan",
    "description": "Jas pernikahan custom pesanan pelanggan",
    "photo": [file]
}
Validasi
  • title - Wajib diisi, judul item galeri
  • description - Wajib diisi, deskripsi item galeri
  • photo - Wajib diisi, file gambar, maksimal 2MB
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "photo": ["File harus berupa gambar dengan ukuran maksimal 2MB"]
    },
    "message": "Validation Error."
}

Admin

GET /admin/dashboard

Mendapatkan data dashboard admin

Headers
Authorization: Bearer {token}
Response
{
    "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"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized access"
    },
    "message": "Error."
}
GET /customers

Mendapatkan semua data pelanggan

Headers
Authorization: Bearer {token}
Query Parameters
  • search (optional) - Mencari berdasarkan nama atau email
Response
{
    "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"
}

Wallet & Withdrawal

GET /wallet

Mendapatkan informasi wallet pengguna

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": {
        "balance": 1000000.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"
}
Error Response
{
    "success": false,
    "data": {
    }
}
GET /customers

Mendapatkan semua data pelanggan

Headers
Authorization: Bearer {token}
Query Parameters
  • search (optional) - Mencari berdasarkan nama atau email
Response
{
    "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"
}

File & Media