RuangController.php 3.81 KB
<?php

namespace App\Http\Controllers\CRUD;


use Illuminate\Http\Request;
use App\Models\Ruang;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; 


class RuangController extends Controller
{
    public function index()
    {
        $ruangs = Ruang::all();
        return response()->json($ruangs);
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'nama_ruang' => 'required',
            'ketersediaan_ruang' => 'required',
            'kapasitas' => 'required',
            'fasilitas' => 'required',
            'foto_ruang' => 'required',
        ]);

        // response error validation
        if ($validator->fails()) {
            return response()->json($validator->errors(), 400);
        }

        if ($request->hasFile('foto_ruang')) {
            $file = $request->file('foto_ruang');
            $uuid = (string) Str::uuid(); 
            $extension = $file->getClientOriginalExtension();
            $filename = $uuid . '.' . $extension; 
            $path = $file->storeAs('public/ruang', $filename);
            $newpath = 'storage/ruang/' . $filename;
        } else {
            return response()->json([
                'success' => false,
                'message' => 'Foto ruang tidak ditemukan'
            ], 400);
        }

        $ruang = ruang::create([
            'nama_ruang' => $request->nama_ruang,
            'ketersediaan_ruang' => $request->ketersediaan_ruang,
            'kapasitas' => $request->kapasitas,
            'fasilitas' => $request->fasilitas,
            'foto_ruang' => $newpath,
        ]);

        return response()->json(['message' => 'ruang berhasil ditambahkan']);

    }

    public function show($id)
    {
        $ruang = Ruang::find($id);
        if ($ruang) {
            return response()->json($ruang);
        } else {
            return response()->json(['message' => 'Ruang tidak ditemukan'], 404);
        }
    }


    public function update(Request $request, $id)
    {
        
        $db_ruang = ruang::findOrFail($id);

        $validator = Validator::make($request->all(), [
            'nama_ruang' => 'required',
            'ketersediaan_ruang' => 'required',
            'kapasitas' => 'required',
            'fasilitas' => 'required',
            'foto_ruang' => 'image', 
        ]);

        if ($validator->fails()) {
            return response()->json($validator->errors(), 400);
        }

        $data = [
            'nama_ruang' => $request->nama_ruang,
            'ketersediaan_ruang' => $request->ketersediaan_ruang,
            'kapasitas' => $request->kapasitas,
            'fasilitas' => $request->fasilitas,
        ];

        if ($request->hasFile('foto_ruang')) {
            if (File::exists(public_path($db_ruang->foto_ruang))) {
                File::delete(public_path($db_ruang->foto_ruang));
            }

            $file = $request->file('foto_ruang');
            $uuid = (string) Str::uuid();
            $extension = $file->getClientOriginalExtension();
            $filename = $uuid . '.' . $extension;
            $path = $file->storeAs('public/ruang', $filename);
            $newpath = 'storage/ruang/' . $filename;
            $data['foto_ruang'] = $newpath;
        }

        $db_ruang->update($data);

        return response()->json(['message' => 'ruang berhasil diupdate'], 200);
    }
    

public function destroy($id)
{
    $ruang = Ruang::findOrFail($id);
    if(File::exists($ruang->foto_ruang)){
        File::delete($ruang->foto_ruang);
    }

    if (!$ruang) {
        return response()->json(['message' => 'Ruang tidak ditemukan'], 404);
    }

    $ruang->delete();

    return response()->json(['message' => 'Ruang berhasil dihapus']);
}
    
}