Membangun Website Kasir Laundry Menggunakan Laravel 11

Hai Sobat BWA!🙌

Terjun secara langsung dalam pembuatan project merupakan salah satu hal yang perlu kalian lakukan ketika belajar suatu bahasa pemrograman atau framework. Karena dengan hal tersebut, kalian bisa belajar secara langsung mengenai cara implementasi, penggunaan, dan langkah-langkah pembuatan project. Maka dari itu, pada artikel kali ini kita akan belajar untuk membuat aplikasi kasir laundry berbasis website menggunakan Laravel 11.

Pastikan kalian mengikuti langkah-langkahnya dari awal sampai akhir ya!

Persiapan

Terdapat beberapa tools yang harus kalian persiapkan agar pembuatan project berjalan dengan lancar.

  1. Visual Studio Code: VS Code merupakan salah satu text editor yang banyak digunakan oleh programmer saat ini. Pastikan kalian sudah meng-install VS Code dan jika belum, kalian dapat meng-install nya di sini
  2. Xampp: Paket software yang menyediakan Apache, MySQL, dan PHP untuk menjalankan server lokal. Jika belum tersedia xampp pada komputer kalian, kalian dapat melakukan instalasi xampp terlebih dahulu. Kalian dapat meng-install nya di sini
  3. Postman: Aplikasi ini diperlukan untuk melakukan testing API yang telah kita buat. Install postman di sini
  4. PHP: PHP yang diperlukan untuk Laravel 11 adalah PHP dengan versi ≥ 7.3.
  5. Composer: Sebuah dependency manager untuk bahasa pemrograman PHP. Untuk mengecek apakah pada laptop kalian sudah ter-install composer, jalankan perintah composer -v . Dan jika belum ter-install, kalian dapat meng-installnya di sini

Struktur Database

Sebelum memulai membangun project, kalian perlu memahami struktur database yang akan dibuat seperti contohnya adalah struktur tabel dan relasi yang akan digunakan antara tabel-tabel tersebut.

tools (9).jpg

Gambar di atas adalah struktur database pada project kasir laundry yang akan kita buat. Terdapat 3 tabel yaitu users, package, dan oders. Tabel users dan package sama-sama memiliki relasi one to many untuk tabel orders.

Langkah-Langkah

Setelah memhami struktur database dan semua tools sudah siap, kita dapat langsung mengeksekusi project!

1. Buka command prompt dan masuk pada direktori mana kalian akan menyimpan project ini. Lalu, create project menggunakan Laravel dengan menjalankan perintah berikut dan tunggu hingga proses instalasi selesai

composer create-project laravel/laravel laundry_cashier

2. Setelah proses instalasi selesai, buka file .env dan sesuaikan dengan kode berikut:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=cashier_laundry
DB_USERNAME=root
DB_PASSWORD=

Jangan lupa untuk membuat db cashier_laundry pada MySQL terelebih dahulu ya!

3. Membuat file migration dan mengatur relasi antar database

  • Tabel users Secara default, Laravel sudah menyediakan tabel users sehingga kita tidak perlu create migration untuk tabel users. Edit file migration users dengan kode berikut agar sesuai dengan struktur database yang akan kita buat.
public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }
  • Tabel package Jalankan perintah berikut untuk membuat migration tabel transkasi php artisan make:migration create_package_table
  • Buka file migration yang baru dibuat dan sesuaikan dengan kode berikut:
public function up()
    {
        Schema::create('package', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->enum('service', ['wash', 'iron', 'wash and iron']);
            $table->decimal('price', 8, 2);
            $table->timestamps();
        });
    }
  • Tabel orders Jalankan perintah berikut untuk membuat migration tabel orders php artisan make:migration create_orders_table Buka file migration yang baru dibuat dan sesuaikan dengan kode berikut:
public function up(): void
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->foreignId('package_id')->constrained('packages')->onDelete('cascade');
            $table->string('customer_name');
            $table->decimal('weight', 8, 2);
            $table->decimal('total_price', 10, 2);
            $table->enum('status', ['on process', 'done']);
            $table->timestamps();
        });
    }

4. Jalankan php artisan migrate untuk melakukan migrasi database

5. Setelah migrasi selesai, selanjutnya kita akan membuat file model dan contoroller yang nantinya akan terdapat function CRUD (Create, Read, Update, Delete). Jalankan perintah berikut untuk membuat file model dan controller sekaligus

php artisan make:model User -mcr
php artisan make:model Package -mcr
php artisan make:model Orders -mcr

6. Buka file model dan sesuaikan dengan kode berikut:

class Package extends Model
{
    protected $fillable = [
        'name',
        'service',
        'price',
    ];
}

Contoh di atas merupakan model Package, lakukan hal yang sama pada tabel User dan Orders dengan menyesuaikannya sesuai kolom pada masing-masing database

7. Buka file controller dan buat function CRUD sesuai masing-maisng tabel

UserController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UsersController extends Controller
{
    public function create(Request $request)
    {
        // Validasi request jika diperlukan
        $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required',
        ]);

        // Simpan data baru ke dalam tabel users
        $user = new User();
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->password = bcrypt($request->input('password')); 
        $user->save();

        return response()->json(['message' => 'User created successfully', 'data' => $user], 201);
    }

    public function read()
    {
        // Mengambil semua data users
        $users = User::all();

        return response()->json(['data' => $users], 200);
    }

    public function update(Request $request, $id)
    {
        // Validasi request jika diperlukan
        $request->validate([
            'name' => 'required',
            'email' => 'required|email',
        ]);

        // Cari user berdasarkan ID
        $user = User::findOrFail($id);

        // Update data user
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        // Anda bisa menambahkan update untuk password juga jika dibutuhkan

        $user->save();

        return response()->json(['message' => 'User updated successfully', 'data' => $user], 200);
    }

    public function delete($id)
    {
        // Cari user berdasarkan ID
        $user = User::findOrFail($id);

        // Hapus user
        $user->delete();

        return response()->json(['message' => 'User deleted successfully'], 200);
    }
}

PackageController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Package; // Pastikan model Package sudah di-import

class PackageController extends Controller
{
    public function create(Request $request)
    {
        // Validasi input dari request jika diperlukan
        $request->validate([
            'name' => 'required|string',
            'service' => 'required|in:wash,iron,wash and iron',
            'price' => 'required|numeric',
        ]);

        // Buat objek Package baru
        $package = new Package();
        $package->name = $request->name;
        $package->service = $request->service;
        $package->price = $request->price;
        $package->save();

        return response()->json(['message' => 'Package created successfully', 'package' => $package], 201);
    }

    public function read($id)
    {
        // Ambil Package berdasarkan ID
        $package = Package::find($id);

        if (!$package) {
            return response()->json(['message' => 'Package not found'], 404);
        }

        return response()->json(['package' => $package], 200);
    }

    public function update(Request $request, $id)
    {
        // Validasi input dari request jika diperlukan
        $request->validate([
            'name' => 'required|string',
            'service' => 'required|in:wash,iron,wash and iron',
            'price' => 'required|numeric',
        ]);

        // Cari Package yang akan di-update
        $package = Package::find($id);

        if (!$package) {
            return response()->json(['message' => 'Package not found'], 404);
        }

        // Update informasi Package
        $package->name = $request->name;
        $package->service = $request->service;
        $package->price = $request->price;
        $package->save();

        return response()->json(['message' => 'Package updated successfully', 'package' => $package], 200);
    }

    public function delete($id)
    {
        // Cari Package yang akan dihapus
        $package = Package::find($id);

        if (!$package) {
            return response()->json(['message' => 'Package not found'], 404);
        }

        // Hapus Package
        $package->delete();

        return response()->json(['message' => 'Package deleted successfully'], 200);
    }
}

OrdersController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Orders;

class OrdersController extends Controller
{
    // Function to create a new order
    public function create(Request $request)
    {
        // Validate incoming request data
        $request->validate([
            'user_id' => 'required|integer',
            'package_id' => 'required|integer',
            'customer_name' => 'required|string',
            'weight' => 'required|numeric',
            'total_price' => 'required|numeric',
            'status' => 'required|in:on process,done',
        ]);

        // Create new order
        $order = Order::create($request->all());

        return response()->json(['message' => 'Order created successfully', 'data' => $order], 201);
    }

    // Function to read a specific order
    public function read($id)
    {
        $order = Order::findOrFail($id);

        return response()->json(['data' => $order], 200);
    }

    // Function to update a specific order
    public function update(Request $request, $id)
    {
        // Validate incoming request data
        $request->validate([
            'user_id' => 'required|integer',
            'package_id' => 'required|integer',
            'customer_name' => 'required|string',
            'weight' => 'required|numeric',
            'total_price' => 'required|numeric',
            'status' => 'required|in:on process,done',
        ]);

        // Find the order
        $order = Order::findOrFail($id);

        // Update the order
        $order->update($request->all());

        return response()->json(['message' => 'Order updated successfully', 'data' => $order], 200);
    }

    // Function to delete a specific order
    public function delete($id)
    {
        $order = Order::findOrFail($id);

        $order->delete();

        return response()->json(['message' => 'Order deleted successfully'], 200);
    }
}

8. Buat file routing. Karena pada Laravel 11 tidak menyediakan route api secara langsung, kita harus membuatnya secara manual. Jalankan perintah php artisan install:api untuk membuat file route api. Setelah instalasi selesai, edit file API seperti kode berikut: Jangan lupa untuk import controller pada file api terlebih dahulu ya! Contohnya seperti berikut:

use App\Http\Controllers\UserController;
use App\Http\Controllers\PackageController;
use App\Http\Controllers\OrdersController;

Lalu, tambahkan kode berikut

Route::apiResource('/user', UserController::class);
Route::apiResource('/package', PackageController::class);
Route::apiResource('/orders', OrdersController::class);

Setelah selesai, kita dapat melakukan testing API yang telah dibuat. Jalankan php artisan serve dan buka aplikasi postman. Berikut ini adalah cara melakukan testing API pada tabel user

Jika berhasil, maka data yang diinputkan akan masuk ke dalam database.

Kesimpulan

Itulah langkah-langkah pembuatan aplikasi kasir laundry berbasi webiste menggunakan Laravel 11. Ingat untuk selalu memperhatikan tools dan struktur database project kalian agar proses pembuatan project dapat berjalan dengan lancar tanpa hambatan. Setelah mempersiapkan hal-hal itu, kalian dapat langsung mengeksekusi project mulai dari membuat file migrasi, model, controller, dan routing. Jangan lupa untuk selalu teliti ketika ngoding karena sedikit kesalahan saja dapat menyebabkan kode kalian eror loh!

Semoga artikel ini dapat bermanfaat ya! Dan bagi kalian yang tertarik untuk mempelajari lebih lanjut tentang Laravel, kalian bisa mempelajarinya secara gratis melalui BuildWithAngga loh! Selain itu, terdapat banyak kelas lain seperti membangun website rental mobil, booking travel, dan lain-lain yang nantinya dapat kalian jadikan sebagai portofolio. Jangan lupa kepoin kelas-kelasnya ya! Sampai jumpa di artikel selanjutnya🙌