MIF_E31222675/app/Http/Controllers/JadwalImunisasiController.php

123 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\JadwalImunisasi;
use Illuminate\Support\Facades\Storage;
class JadwalImunisasiController extends Controller
{
// Menampilkan semua jadwal imunisasi berdasarkan anak
public function index(Request $request)
{
$anak_id = $request->query('anak_id');
$jadwal = JadwalImunisasi::where('anak_id', $anak_id)->get();
return response()->json($jadwal, 200);
}
// Menyimpan jadwal imunisasi baru
public function store(Request $request)
{
$request->validate([
'anak_id' => 'required|exists:anak,id',
'nama_imunisasi' => 'required|string|max:255',
'tanggal_imunisasi' => 'required|date',
'is_done' => 'sometimes|boolean',
'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
]);
$data = $request->all();
// Proses upload file jika ada
if ($request->hasFile('bukti_file')) {
$file = $request->file('bukti_file');
$path = $file->store('bukti_imunisasi', 'public'); // simpan ke storage/app/public/bukti_imunisasi
$data['bukti_file'] = $path;
}
$jadwal = JadwalImunisasi::create($data);
return response()->json($jadwal, 201);
}
// Menampilkan detail jadwal imunisasi
public function show($id)
{
$jadwal = JadwalImunisasi::find($id);
if (!$jadwal) {
return response()->json(['message' => 'Data tidak ditemukan'], 404);
}
return response()->json($jadwal, 200);
}
// Mengupdate jadwal imunisasi (termasuk bukti_file)
public function update(Request $request, $id)
{
$jadwal = JadwalImunisasi::find($id);
if (!$jadwal) {
return response()->json(['message' => 'Data tidak ditemukan'], 404);
}
$request->validate([
'nama_imunisasi' => 'sometimes|required|string|max:255',
'tanggal_imunisasi' => 'sometimes|required|date',
'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
]);
$data = $request->all();
// Handle upload file baru (replace yang lama jika ada)
if ($request->hasFile('bukti_file')) {
// Hapus file lama jika ada
if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
Storage::disk('public')->delete($jadwal->bukti_file);
}
$file = $request->file('bukti_file');
$path = $file->store('bukti_imunisasi', 'public');
$data['bukti_file'] = $path;
}
$jadwal->update($data);
return response()->json($jadwal, 200);
}
// Menghapus jadwal imunisasi dan file buktinya jika ada
public function destroy($id)
{
$jadwal = JadwalImunisasi::find($id);
if (!$jadwal) {
return response()->json(['message' => 'Data tidak ditemukan'], 404);
}
// Hapus file bukti jika ada
if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
Storage::disk('public')->delete($jadwal->bukti_file);
}
$jadwal->delete();
return response()->json(['message' => 'Data berhasil dihapus'], 200);
}
// Toggle status selesai
public function toggleStatus($id)
{
$jadwal = JadwalImunisasi::find($id);
if (!$jadwal) {
return response()->json(['message' => 'Data tidak ditemukan'], 404);
}
$jadwal->is_done = !$jadwal->is_done;
$jadwal->save();
return response()->json($jadwal, 200);
}
}