TIF_E41253316/app/Http/Controllers/RekomendasiController.php

109 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class RekomendasiController extends Controller
{
public function prosesRekomendasi(Request $request)w
{
// Map input form ke fitur model
$input = [
"Intensitas Cahaya (Kategori)" => $request->input('sunlight'),
"Intensitas Air (Kategori)" => $request->input('intensitas_air', ''),
"Cara Penyiraman (Frekuensi)" => $request->input('cara_penyiraman', ''),
"Konsep Utama Taman" => $request->input('konsep_taman'),
"Ukuran Taman yang Cocok (Kategori)" => $request->input('ukuran_taman'),
"Lokasi Penanaman (Indoor/Outdoor)" => $request->input('indoor_use'),
];
// Validasi input wajib
$required = [
'sunlight' => 'Intensitas Cahaya (Kategori)',
'konsep_taman' => 'Konsep Utama Taman',
'ukuran_taman' => 'Ukuran Taman yang Cocok (Kategori)',
'indoor_use' => 'Lokasi Penanaman (Indoor/Outdoor)'
];
$missing = [];
foreach ($required as $field => $label) {
if (empty($request->input($field))) {
$missing[] = $label;
}
}
if (count($missing) > 0) {
$msg = 'Field berikut wajib diisi: ' . implode(', ', $missing);
if ($request->ajax()) {
return response()->json([
'error' => $msg
], 422);
}
return redirect()
->back()
->withInput()
->with('error', $msg);
}
try {
// Kirim data ke Flask lokal
$response = Http::post(
'http://127.0.0.1:5000/predict',
$input
);
} catch (\Exception $e) {
$msg = 'Gagal menghubungi server rekomendasi: ' . $e->getMessage();
if ($request->ajax()) {
return response()->json([
'error' => $msg
], 500);
}
return redirect()
->back()
->withInput()
->with('error', $msg);
}
if ($response->failed()) {
$msg = 'Terjadi kesalahan pada server rekomendasi.';
if ($response->json('error')) {
$msg = $response->json('error');
}
if ($request->ajax()) {
return response()->json([
'error' => $msg
], $response->status());
}
return redirect()
->back()
->withInput()
->with('error', $msg);
}
$top_types = $response->json('top_types') ?? [];
$rekomendasi = $response->json('rekomendasi') ?? [];
if ($request->ajax()) {
return response()->json([
'top_types' => $top_types,
'rekomendasi' => $rekomendasi
]);
}
return view(
'landing.rekomendasi',
compact('rekomendasi')
);
}
}