Memberikan Keterangan

This commit is contained in:
iFannJR 2026-05-30 18:02:53 +07:00
parent 547058b069
commit 18ef3de34c
28 changed files with 30 additions and 25 deletions

View File

@ -11,7 +11,7 @@ # Salin env
# Database (MySQL) # Database (MySQL)
# Set di .env: DB_CONNECTION=mysql, DB_DATABASE=..., DB_USERNAME=..., DB_PASSWORD=... # Set di .env: DB_CONNECTION=mysql, DB_DATABASE=..., DB_USERNAME=..., DB_PASSWORD=...
php artisan migrate # php artisan migrate
php artisan db:seed php artisan db:seed
# Storage link (untuk gambar produk) # Storage link (untuk gambar produk)

View File

@ -8,6 +8,7 @@
class CriteriaController extends Controller class CriteriaController extends Controller
{ {
#mengelola data kriteria
public function index() public function index()
{ {
$criterias = Criteria::orderBy('weight_order')->get(); $criterias = Criteria::orderBy('weight_order')->get();

View File

@ -81,7 +81,7 @@ public function index(Request $request)
if ($availableYears->isEmpty()) { if ($availableYears->isEmpty()) {
$availableYears = collect([$currentYear]); $availableYears = collect([$currentYear]);
} }
#untuk menampilkan data di dashboard admin
return view('admin.dashboard', compact( return view('admin.dashboard', compact(
'totalProducts', 'totalProducts',
'totalTransactions', 'totalTransactions',

View File

@ -12,6 +12,7 @@
class ProductController extends Controller class ProductController extends Controller
{ {
#mengelola data produk dan menampilkan data produk di dashboard admin
public function index(Request $request) public function index(Request $request)
{ {
$products = Product::with('criterias') $products = Product::with('criterias')

View File

@ -10,7 +10,7 @@
class TransactionController extends Controller class TransactionController extends Controller
{ {
public function index(Request $request) public function index(Request $request)
{ { #untuk menampilkan data transaksi di dashboard admin
Transaction::cancelOverduePendingPickup(); Transaction::cancelOverduePendingPickup();
$query = Transaction::with('user', 'details.product'); $query = Transaction::with('user', 'details.product');

View File

@ -10,7 +10,7 @@
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
class ForgotPasswordController extends Controller class ForgotPasswordController extends Controller
{ { #untuk mengelola proses lupa password, termasuk menampilkan form lupa password dan mengirim kode verifikasi ke email pengguna
public function create() public function create()
{ {
return view('auth.forgot-password'); return view('auth.forgot-password');

View File

@ -12,7 +12,7 @@ public function showLoginForm()
{ {
return view('auth.login'); return view('auth.login');
} }
#untuk mengelola proses login, termasuk menampilkan form login dan memproses data login yang dikirimkan oleh pengguna
public function login(Request $request) public function login(Request $request)
{ {
$credentials = $request->validate([ $credentials = $request->validate([

View File

@ -9,7 +9,7 @@
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
class RegisterController extends Controller class RegisterController extends Controller
{ { #untuk mengelola proses registrasi, termasuk menampilkan form registrasi dan memproses data registrasi yang dikirimkan oleh pengguna
public function showRegistrationForm() public function showRegistrationForm()
{ {
return view('auth.register'); return view('auth.register');

View File

@ -12,7 +12,7 @@
use Illuminate\Validation\Rules\Password as PasswordRule; use Illuminate\Validation\Rules\Password as PasswordRule;
class ResetPasswordController extends Controller class ResetPasswordController extends Controller
{ { #untuk mengelola proses reset password, termasuk menampilkan form verifikasi kode reset password dan memproses data reset password yang dikirimkan oleh pengguna
public function create(Request $request) public function create(Request $request)
{ {
return view('auth.verify-reset-password', [ return view('auth.verify-reset-password', [

View File

@ -7,7 +7,7 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
class CartController extends Controller class CartController extends Controller
{ { #mengelola data keranjang belanja pengguna, termasuk menampilkan isi keranjang, menambahkan produk ke keranjang, memperbarui jumlah produk dalam keranjang, dan menghapus produk dari keranjang
public function index() public function index()
{ {
$items = auth()->user()->carts()->with('product')->get(); $items = auth()->user()->carts()->with('product')->get();

View File

@ -11,7 +11,7 @@
class CheckoutController extends Controller class CheckoutController extends Controller
{ {
public function show() public function show()
{ { #untuk menampilkan halaman checkout, termasuk menampilkan isi keranjang, total harga, dan jam pengambilan yang tersedia
$items = auth()->user()->carts()->with('product')->get(); $items = auth()->user()->carts()->with('product')->get();
if ($items->isEmpty()) { if ($items->isEmpty()) {
return redirect()->route('cart.index')->with('error', 'Keranjang kosong.'); return redirect()->route('cart.index')->with('error', 'Keranjang kosong.');

View File

@ -8,7 +8,7 @@
class HomeController extends Controller class HomeController extends Controller
{ {
public function index() public function index()
{ { #untuk menampilkan halaman utama aplikasi, termasuk menampilkan produk unggulan dan mengarahkan pengguna ke dashboard yang sesuai berdasarkan peran mereka (admin atau pengguna biasa)
if (auth()->check()) { if (auth()->check()) {
if (auth()->user()->isAdmin()) { if (auth()->user()->isAdmin()) {
return redirect()->route('admin.dashboard'); return redirect()->route('admin.dashboard');

View File

@ -8,7 +8,7 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
class RecommendationController extends Controller class RecommendationController extends Controller
{ { #untuk mengelola proses rekomendasi mainan, termasuk menampilkan form rekomendasi dan menampilkan hasil rekomendasi berdasarkan input pengguna
public function __construct( public function __construct(
protected ToyRecommendationService $sawService protected ToyRecommendationService $sawService
) {} ) {}

View File

@ -8,7 +8,7 @@
class ShopController extends Controller class ShopController extends Controller
{ {
public function index(Request $request) public function index(Request $request)
{ { #untuk menampilkan halaman toko, termasuk menampilkan daftar produk yang tersedia dan memungkinkan pengguna untuk mencari dan menyaring produk
$query = Product::query()->where('stock', '>', 0); $query = Product::query()->where('stock', '>', 0);
if ($request->filled('search')) { if ($request->filled('search')) {

View File

@ -7,7 +7,7 @@
class TransactionController extends Controller class TransactionController extends Controller
{ {
public function index() public function index()
{ { #untuk menampilkan daftar transaksi yang dilakukan oleh pengguna yang sedang login, termasuk menampilkan detail transaksi dan statusnya
Transaction::cancelOverduePendingPickup(); Transaction::cancelOverduePendingPickup();
$transactions = auth()->user() $transactions = auth()->user()

View File

@ -2,6 +2,7 @@
@section('title', 'Manajemen Produk') @section('title', 'Manajemen Produk')
<!-- Halaman Manajemen Produk Admin -->
@section('content') @section('content')
<div class="space-y-6"> <div class="space-y-6">
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"> <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Manajemen Transaksi') @section('title', 'Manajemen Transaksi')
<!-- Halaman Manajemen Transaksi Admin -->
@section('content') @section('content')
<div class="space-y-6"> <div class="space-y-6">
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"> <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
@ -16,7 +16,7 @@
@endforeach @endforeach
</select> </select>
<x-button type="submit" variant="outline" size="sm">Filter</x-button> <x-button type="submit" variant="outline" size="sm">Filter</x-button>
<x-button href="{{ route('admin.transactions.export', request()->query()) }}" variant="outline" size="sm" class="!border-secondary-200 !text-secondary-700 hover:!bg-secondary-50">Export CSV</x-button> <!-- <x-button href="{{ route('admin.transactions.export', request()->query()) }}" variant="outline" size="sm" class="!border-secondary-200 !text-secondary-700 hover:!bg-secondary-50">Export CSV</x-button> -->
</form> </form>
</div> </div>

View File

@ -16,7 +16,7 @@
<div class="min-h-screen flex"> <div class="min-h-screen flex">
@auth @auth
<div id="sidebar-overlay" class="sidebar-overlay md:hidden" aria-hidden="true" role="button" tabindex="-1" aria-label="Tutup menu"></div> <div id="sidebar-overlay" class="sidebar-overlay md:hidden" aria-hidden="true" role="button" tabindex="-1" aria-label="Tutup menu"></div>
<!-- Sidebar User -->
{{-- Sidebar: light for user, dark for admin --}} {{-- Sidebar: light for user, dark for admin --}}
@php $isAdmin = auth()->user()->isAdmin(); @endphp @php $isAdmin = auth()->user()->isAdmin(); @endphp
<aside id="sidebar" class="sidebar fixed md:static inset-y-0 left-0 z-50 flex flex-col w-72 flex-shrink-0 transform md:transform-none transition-all duration-300 ease-out -translate-x-full md:translate-x-0 {{ $isAdmin ? 'bg-gray-900 text-white' : 'bg-white border-r border-gray-100 shadow-sm' }}" data-collapsed="false"> <aside id="sidebar" class="sidebar fixed md:static inset-y-0 left-0 z-50 flex flex-col w-72 flex-shrink-0 transform md:transform-none transition-all duration-300 ease-out -translate-x-full md:translate-x-0 {{ $isAdmin ? 'bg-gray-900 text-white' : 'bg-white border-r border-gray-100 shadow-sm' }}" data-collapsed="false">

View File

@ -2,6 +2,7 @@
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex h-16 items-center justify-between gap-4"> <div class="flex h-16 items-center justify-between gap-4">
{{-- Logo --}} {{-- Logo --}}
<!-- Halaman Awal -->
<a href="{{ url('/') }}" class="flex items-center gap-2.5 shrink-0"> <a href="{{ url('/') }}" class="flex items-center gap-2.5 shrink-0">
<span class="flex h-9 w-9 items-center justify-center rounded-xl bg-primary-500 text-white"> <span class="flex h-9 w-9 items-center justify-center rounded-xl bg-primary-500 text-white">
<i class="fa-solid fa-puzzle-piece text-lg"></i> <i class="fa-solid fa-puzzle-piece text-lg"></i>

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Keranjang') @section('title', 'Keranjang')
<!-- Halaman Keranjang User -->
@section('content') @section('content')
@if($items->isEmpty()) @if($items->isEmpty())
<x-card class="max-w-lg mx-auto text-center py-16"> <x-card class="max-w-lg mx-auto text-center py-16">

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Checkout') @section('title', 'Checkout')
<!-- Halaman Checkout -->
@section('content') @section('content')
<div class="max-w-5xl mx-auto"> <div class="max-w-5xl mx-auto">
<h2 class="text-2xl font-bold text-gray-900 tracking-tight mb-6">Checkout</h2> <h2 class="text-2xl font-bold text-gray-900 tracking-tight mb-6">Checkout</h2>

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Dashboard') @section('title', 'Dashboard')
<!-- Halaman Dashboard User -->
@section('content') @section('content')
<div class="space-y-8"> <div class="space-y-8">
<div> <div>

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Hasil Rekomendasi SAW') @section('title', 'Hasil Rekomendasi SAW')
<!-- Halaman Hasil Rekomendasi -->
@section('content') @section('content')
<div class="max-w-6xl mx-auto space-y-8"> <div class="max-w-6xl mx-auto space-y-8">
<div> <div>

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Konsultasi Rekomendasi SAW') @section('title', 'Konsultasi Rekomendasi SAW')
<!-- Halaman Konsultasi -->
@section('content') @section('content')
<div class="max-w-3xl mx-auto space-y-8"> <div class="max-w-3xl mx-auto space-y-8">
<div> <div>

View File

@ -2,6 +2,7 @@
@section('title', 'Belanja Mainan') @section('title', 'Belanja Mainan')
<!-- Halaman Belanja User -->
@section('content') @section('content')
<div class="flex flex-col lg:flex-row gap-6"> <div class="flex flex-col lg:flex-row gap-6">
{{-- Sidebar filter (desktop) / Collapse (mobile) --}} {{-- Sidebar filter (desktop) / Collapse (mobile) --}}

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Detail Transaksi') @section('title', 'Detail Transaksi')
<!-- Halaman Detail Transaksi -->
@section('content') @section('content')
<div class="max-w-2xl space-y-6"> <div class="max-w-2xl space-y-6">
<a href="{{ route('transactions.index') }}" class="inline-flex items-center gap-2 text-sm font-medium text-primary-600 hover:text-primary-700"> <a href="{{ route('transactions.index') }}" class="inline-flex items-center gap-2 text-sm font-medium text-primary-600 hover:text-primary-700">

View File

@ -1,7 +1,7 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Riwayat Transaksi') @section('title', 'Riwayat Transaksi')
<!-- Halaman Riwayat Transaksi -->
@section('content') @section('content')
<div class="space-y-6"> <div class="space-y-6">
<x-card :padding="false"> <x-card :padding="false">

View File

@ -1,11 +1,11 @@
@extends('layouts.guest') @extends('layouts.guest')
<!-- halman awal -->
@section('title', 'Rekomendasi Mainan Anak - SAW') @section('title', 'Rekomendasi Mainan Anak - SAW')
@section('content') @section('content')
{{-- Hero --}} {{-- Hero --}}
<section id="beranda" class="relative overflow-hidden"> <section id="beranda" class="relative overflow-hidden">
<div class="absolute inset-0 bg-gradient-to-br from-primary-50 via-white to-secondary-50" aria-hidden="true"></div> <div class="absolute inset-0 bg-gradient-to-br from-primary-50 via-white " aria-hidden="true"></div>
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 lg:py-28"> <div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
<div class="grid lg:grid-cols-2 gap-12 lg:gap-16 items-center"> <div class="grid lg:grid-cols-2 gap-12 lg:gap-16 items-center">
<div class="space-y-6"> <div class="space-y-6">