[Api Template & Kategori]

This commit is contained in:
Arief Dwi Wicaksono 2025-10-03 11:18:16 +07:00
parent e4ffa61083
commit 97d79b4a84
5 changed files with 111 additions and 16 deletions

View File

@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Kategori;
class KategoriApiController extends Controller
{
// Ambil semua kategori
public function index()
{
// 1. Ambil semua kategori dari database
$kategoris = Kategori::all();
// 2. Ubah koleksi data untuk membuat URL foto yang benar
$transformedKategoris = $kategoris->map(function($kategori) {
return [
'id' => $kategori->id,
'nama' => $kategori->nama,
'deskripsi' => $kategori->deskripsi,
// Gunakan helper asset() untuk membuat URL lengkap
'foto' => $kategori->foto ? asset('storage/' . $kategori->foto) : null,
];
});
// 3. Kirim data yang sudah diubah sebagai JSON
return response()->json($transformedKategoris);
}
// Ambil detail satu kategori
public function show(Kategori $kategori)
{
// Sebaiknya detail juga diubah agar konsisten
return response()->json([
'id' => $kategori->id,
'nama' => $kategori->nama,
'deskripsi' => $kategori->deskripsi,
'foto' => asset('storage/' . $kategori->foto),
]);
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Template;
class TemplateApiController extends Controller
{
// Ambil semua template
public function index()
{
$templates = Template::with('kategori')->get();
$transformedTemplates = $templates->map(function ($template) {
return [
'id' => $template->id,
'nama_template' => $template->nama_template,
'harga' => $template->harga,
'paket' => $template->paket,
'kategori' => $template->kategori ? $template->kategori->nama : null,
'foto' => $template->foto ? asset('storage/' . $template->foto) : null,
];
});
return response()->json($transformedTemplates);
}
// Ambil detail template tertentu
public function show(Template $template)
{
return response()->json([
'id' => $template->id,
'nama_template' => $template->nama_template,
'harga' => $template->harga,
'paket' => $template->paket,
'kategori' => $template->kategori ? $template->kategori->nama : null,
'foto' => $template->foto ? asset('storage/' . $template->foto) : null,
]);
}
}

View File

@ -7,20 +7,20 @@ use Illuminate\Http\Request;
class TemplateController extends Controller
{
// Lihat semua template (dari seeder)
// Lihat semua template (untuk admin web)
public function index()
{
$templates = Template::with('kategori')->get();
return view('admin.template.index', compact('templates'));
}
// Form edit (untuk ubah harga / nama dsb)
// Form edit (ubah data template)
public function edit(Template $template)
{
return view('admin.template.edit', compact('template'));
}
// Update template (ubah harga / nama / paket)
// Update template (nama, harga, paket)
public function update(Request $request, Template $template)
{
$validated = $request->validate([

View File

@ -26,6 +26,7 @@ class TemplateSeeder extends Seeder
]
],
'kategori_id' => $k1->id,
'foto' => 'templates/Pernikahan.jpg', // taruh di storage/app/public/templates/
]);
Template::create([
@ -40,6 +41,22 @@ class TemplateSeeder extends Seeder
]
],
'kategori_id' => $k2->id,
'foto' => 'templates/HBD.jpg',
]);
Template::create([
'nama_template' => 'Undangan Khitan Modern',
'harga' => 85000,
'paket' => 'premium',
'form' => [
'fields' => [
['name' => 'nama_anak', 'label' => 'Nama Anak', 'type' => 'text'],
['name' => 'tanggal_acara', 'label' => 'Tanggal Acara', 'type' => 'date'],
['name' => 'lokasi', 'label' => 'Lokasi', 'type' => 'text'],
]
],
'kategori_id' => $k3->id,
'foto' => 'templates/Khitan.jpg',
]);
}
}

View File

@ -2,18 +2,13 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\TemplateApiController;
use App\Http\Controllers\Api\KategoriApiController;
Route::get('kategoris', [KategoriApiController::class, 'index']);
Route::get('kategoris/{kategori}', [KategoriApiController::class, 'show']);
Route::get('/templates', [TemplateApiController::class, 'index']);
Route::get('/templates/{template}', [TemplateApiController::class, 'show']);
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});