Sistem manajemen produk terintegrasi dengan API FastPrint untuk Junior Programmer Test
Daftar Isi
Sistem Manajemen Produk FastPrint adalah aplikasi web yang dibangun sebagai bagian dari tes Junior Programmer. Aplikasi ini mengintegrasikan data produk dari API FastPrint ke dalam database lokal dan menyediakan antarmuka CRUD (Create, Read, Update, Delete) yang lengkap untuk mengelola data produk.
- ✅ Integrasi API FastPrint - Mengambil data produk secara otomatis dari API eksternal
- ✅ Manajemen Produk Lengkap - CRUD (Create, Read, Update, Delete) untuk data produk
- ✅ Filter Produk - Menampilkan produk berdasarkan status "Bisa Dijual"
- ✅ Validasi Form - Validasi input untuk nama produk dan harga
- ✅ Konfirmasi Hapus - Alert konfirmasi sebelum menghapus data
- ✅ Pagination - Menampilkan data produk dengan pagination (10 item per halaman)
- ✅ Relasi Database - Implementasi relasi antar tabel (Produk, Kategori, Status)
- ✅ UI Modern - Menggunakan Tailwind CSS untuk tampilan yang responsif dan modern
- ✅ Progress Bar - Progress indicator saat mengambil data dari API
Ikuti langkah-langkah berikut untuk menjalankan proyek ini di komputer lokal Anda.
Pastikan komputer Anda sudah terinstal software berikut:
-
PHP >= 8.1
php --version
-
Composer (Dependency Manager untuk PHP)
composer --version
Jika belum terinstal, download dari getcomposer.org
-
MySQL >= 5.7 atau MariaDB
mysql --version
-
Node.js & NPM (untuk Tailwind CSS)
node --version npm --version
Ikuti langkah-langkah berikut dengan seksama:
-
Clone Repository
git clone https://github.com/geboboi/fastprint-web.git cd fastprint-web -
Install Dependencies PHP
composer install
-
Install Dependencies Node.js
npm install
-
Copy File Environment
cp .env.example .env
-
Generate Application Key
php artisan key:generate
-
Konfigurasi Database
Buka file
.envdan sesuaikan konfigurasi database:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=fastprint_web DB_USERNAME=root DB_PASSWORD=
-
Buat Database
Buka MySQL/phpMyAdmin dan buat database baru:
CREATE DATABASE fastprint_web;
-
Jalankan Migration
Buat tabel-tabel yang diperlukan:
php artisan migrate
Migration akan membuat tabel berikut:
produk- Tabel untuk menyimpan data produkkategori- Tabel untuk menyimpan kategori produkstatus- Tabel untuk menyimpan status produk
-
Import Data dari API FastPrint
Jalankan seeder untuk mengambil data dari API:
php artisan db:seed
Atau jalankan command secara langsung:
php artisan produk:fetch
Catatan: Username API akan berubah setiap hari mengikuti server. Contoh untuk tanggal 29 Januari 2026:
tesprogrammer290126C22 -
Compile Assets (Tailwind CSS)
npm run dev
Atau untuk production:
npm run build
-
Jalankan Aplikasi
php artisan serve
Aplikasi akan berjalan di
http://localhost:8000
Setelah instalasi selesai, buka browser dan akses http://localhost:8000
Anda akan melihat halaman utama yang menampilkan daftar produk dengan fitur:
- Filter Status - Pilih "Bisa Dijual" atau "Semua" produk
- Pagination - Navigasi halaman dengan 10 produk per halaman
- Action Buttons - Edit dan Hapus untuk setiap produk
- Klik tombol "Tambah Produk" di halaman utama
- Isi form dengan data berikut:
- Nama Produk (wajib diisi)
- Harga (wajib diisi, hanya angka)
- Kategori (pilih dari dropdown)
- Status (pilih dari dropdown)
- Klik "Simpan"
- Klik tombol "Edit" pada produk yang ingin diubah
- Ubah data yang diperlukan
- Klik "Update"
- Klik tombol "Hapus" pada produk yang ingin dihapus
- Konfirmasi penghapusan pada dialog alert
- Produk akan dihapus dari database
Untuk memperbarui data produk dari API FastPrint:
php artisan produk:fetchCommand ini akan:
- Login ke API FastPrint dengan kredensial yang sesuai
- Mengambil semua data produk
- Menyimpan/update data ke database lokal
- Menampilkan progress bar selama proses
| Kolom | Tipe Data | Keterangan |
|---|---|---|
| id_produk | INT (PK) | Primary Key |
| nama_produk | VARCHAR(255) | Nama produk |
| harga | INT | Harga produk (dalam rupiah) |
| kategori_id | INT (FK) | Foreign key ke tabel kategori |
| status_id | INT (FK) | Foreign key ke tabel status |
| created_at | TIMESTAMP | Waktu pembuatan |
| updated_at | TIMESTAMP | Waktu update terakhir |
| Kolom | Tipe Data | Keterangan |
|---|---|---|
| id_kategori | INT (PK) | Primary Key |
| nama_kategori | VARCHAR(255) | Nama kategori |
| created_at | TIMESTAMP | Waktu pembuatan |
| updated_at | TIMESTAMP | Waktu update |
| Kolom | Tipe Data | Keterangan |
|---|---|---|
| id_status | INT (PK) | Primary Key |
| nama_status | VARCHAR(255) | Nama status |
| created_at | TIMESTAMP | Waktu pembuatan |
| updated_at | TIMESTAMP | Waktu update |
produk
├── belongsTo kategori (kategori_id -> id_kategori)
└── belongsTo status (status_id -> id_status)
URL: https://recruitment.fastprint.co.id/tes/api_tes_programmer
Method: POST
Content-Type: application/x-www-form-urlencoded
| Parameter | Tipe | Deskripsi |
|---|---|---|
| username | string | Format: tesprogrammer[DDMMYY]C22 |
| password | string | MD5 hash dari bisacoding-[DD-MM-YY] |
| status | string | Filter status (default: "1") |
// Tanggal: 29-01-2026
$username = 'tesprogrammer290126C22';
$password = md5('bisacoding-29-01-26');
$response = Http::asForm()->post('https://recruitment.fastprint.co.id/tes/api_tes_programmer', [
'username' => $username,
'password' => $password,
'status' => '1'
]);{
"error": 0,
"ket": "Sukses",
"data": [
{
"id_produk": "1",
"nama_produk": "Contoh Produk",
"harga": "Rp 50.000",
"kategori": "Nama Kategori",
"status": "bisa dijual"
}
]
}{
"error": 1,
"ket": "Username atau Password salah"
}Gabriela Sihutomo - gabie.jelita@gmail.com
Project Link: https://github.com/geboboi/fastprint-web
Solusi:
- Pastikan MySQL service sudah berjalan
- Periksa konfigurasi di file
.env(DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD)
Solusi:
- Periksa username di file
GetProduk.phpapakah sudah sesuai dengan tanggal hari ini - Format username:
tesprogrammer[DDMMYY]C22 - Contoh: untuk tanggal 29 Januari 2026 →
tesprogrammer290126C22
Solusi:
npm run devAtau compile untuk production:
npm run buildSolusi:
php artisan migrate:fresh
php artisan db:seedSolusi: Jalankan di port berbeda:
php artisan serve --port=8080