diff --git a/app/Http/Controllers/Admin/GuruController.php b/app/Http/Controllers/Admin/GuruController.php
index fc2f1da..cf48abd 100644
--- a/app/Http/Controllers/Admin/GuruController.php
+++ b/app/Http/Controllers/Admin/GuruController.php
@@ -1,45 +1,68 @@
json(Guru::with('user')->get());
+ $guru = Guru::with('user')->get();
+ return view('admin.guru.index', compact('guru'));
+ }
+
+ public function create()
+ {
+ $users = User::all(); // misalnya guru punya relasi ke user
+ return view('admin.guru.create', compact('users'));
}
public function store(Request $request)
+ {
+ $request->validate([
+ 'nama' => 'required|string|max:255',
+ 'bidang' => 'required|string|max:255',
+ 'alamat' => 'nullable|string',
+ 'no_hp' => 'nullable|string',
+]);
+
+
+ Guru::create($request->all());
+ return redirect()->route('guru.index')->with('success', 'Guru berhasil ditambahkan');
+ }
+
+ public function show($id)
+ {
+ $guru = Guru::with('user')->findOrFail($id);
+ return view('admin.guru.show', compact('guru'));
+ }
+
+ public function edit($id)
+ {
+ $guru = Guru::findOrFail($id);
+ $users = User::all();
+ return view('admin.guru.edit', compact('guru', 'users'));
+ }
+
+ public function update(Request $request, $id)
{
$request->validate([
'user_id' => 'required|exists:users,id',
'bidang' => 'required|string|max:255',
]);
- $guru = Guru::create($request->all());
- return response()->json($guru, 201);
- }
-
- public function show($id)
- {
- $guru = Guru::with('user')->findOrFail($id);
- return response()->json($guru);
- }
-
- public function update(Request $request, $id)
- {
$guru = Guru::findOrFail($id);
$guru->update($request->all());
- return response()->json($guru);
+
+ return redirect()->route('guru.index')->with('success', 'Data guru berhasil diperbarui');
}
public function destroy($id)
{
Guru::destroy($id);
- return response()->json(['message' => 'Guru deleted']);
+ return redirect()->route('guru.index')->with('success', 'Guru berhasil dihapus');
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/Admin/SiswaController.php b/app/Http/Controllers/Admin/SiswaController.php
index 2fedb67..a1e155e 100644
--- a/app/Http/Controllers/Admin/SiswaController.php
+++ b/app/Http/Controllers/Admin/SiswaController.php
@@ -3,61 +3,81 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
-use Illuminate\Http\Request;
use App\Models\Siswa;
+use App\Models\Kelas;
+use App\Models\WaliMurid;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Storage;
class SiswaController extends Controller
{
public function index()
{
- return response()->json(Siswa::with(['kelas', 'wali'])->get());
+ $siswa = Siswa::with(['kelas','wali'])->paginate(10);
+ return view('admin.siswa.index', compact('siswa'));
}
- public function store(SiswaRequest $request)
+ public function create()
{
- $siswa = Siswa::create($request->validated());
-
- return response()->json([
- 'message' => 'Siswa berhasil ditambahkan',
- 'data' => $siswa
- ], 201);
+ $kelas = Kelas::all();
+ $wali = WaliMurid::all();
+ return view('admin.siswa.create', compact('kelas','wali'));
}
- public function show($id)
+ public function store(Request $request)
{
- $siswa = Siswa::with(['kelas', 'wali'])->findOrFail($id);
-
- return response()->json($siswa);
- }
-
- public function update(Request $request, $id)
-{
- $siswa = Siswa::findOrFail($id);
-
- $validatedData = $request->validate([
- 'nama' => 'required|string|max:255',
- 'nis' => 'required|string|max:50|unique:siswas,nis,' . $id . ',id',
- 'tanggal_lahir' => 'required|date',
- 'kelas_id' => 'required|exists:kelas,id',
- 'wali_id' => 'required|exists:wali_murids,id', // <- pastikan nama tabel wali sesuai
- 'foto' => 'nullable|string',
- ]);
-
- $siswa->update($validatedData);
-
- return response()->json([
- 'message' => 'Siswa berhasil diupdate',
- 'data' => $siswa
- ], 200);
-}
-
- public function destroy($id)
- {
- $siswa = Siswa::findOrFail($id);
- $siswa->delete();
-
- return response()->json([
- 'message' => 'Siswa berhasil dihapus'
+ $validated = $request->validate([
+ 'nama' => 'required|string|max:100',
+ 'nis' => 'required|string|max:50|unique:siswa,nis',
+ 'tanggal_lahir' => 'required|date',
+ 'kelas_id' => 'required|exists:kelas,id',
+ 'wali_id' => 'required|exists:wali_murid,id',
+ 'foto' => 'nullable|image|max:2048'
]);
+
+ if ($request->hasFile('foto')) {
+ $validated['foto'] = $request->file('foto')->store('siswa','public');
+ }
+
+ Siswa::create($validated);
+ return redirect()->route('siswa.index')->with('success','Siswa berhasil ditambahkan');
}
-}
\ No newline at end of file
+
+ public function edit(Siswa $siswa)
+ {
+ $kelas = Kelas::all();
+ $wali = WaliMurid::all();
+ return view('admin.siswa.edit', compact('siswa','kelas','wali'));
+ }
+
+ public function update(Request $request, Siswa $siswa)
+ {
+ $validated = $request->validate([
+ 'nama' => 'required|string|max:100',
+ 'nis' => 'required|string|max:50|unique:siswa,nis,'.$siswa->id,
+ 'tanggal_lahir' => 'required|date',
+ 'kelas_id' => 'required|exists:kelas,id',
+ 'wali_id' => 'required|exists:wali_murid,id',
+ 'foto' => 'nullable|image|max:2048'
+ ]);
+
+ if ($request->hasFile('foto')) {
+ if ($siswa->foto && Storage::disk('public')->exists($siswa->foto)) {
+ Storage::disk('public')->delete($siswa->foto);
+ }
+ $validated['foto'] = $request->file('foto')->store('siswa','public');
+ }
+
+ $siswa->update($validated);
+ return redirect()->route('siswa.index')->with('success','Siswa berhasil diupdate');
+ }
+
+ public function destroy(Siswa $siswa)
+ {
+ if ($siswa->foto && Storage::disk('public')->exists($siswa->foto)) {
+ Storage::disk('public')->delete($siswa->foto);
+ }
+ $siswa->delete();
+ return redirect()->route('siswa.index')->with('success','Siswa berhasil dihapus');
+ }
+}
diff --git a/app/Http/Controllers/Admin/WaliMuridController.php b/app/Http/Controllers/Admin/WaliMuridController.php
index e870ac8..85a46bd 100644
--- a/app/Http/Controllers/Admin/WaliMuridController.php
+++ b/app/Http/Controllers/Admin/WaliMuridController.php
@@ -3,44 +3,64 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
-use Illuminate\Http\Request;
use App\Models\WaliMurid;
+use App\Models\User;
+use Illuminate\Http\Request;
class WaliMuridController extends Controller
{
public function index()
{
- return response()->json(WaliMurid::with('user')->get());
+ // ambil semua wali murid + user terkait
+ $wali = WaliMurid::with('user')->get();
+ return view('admin.wali.index', compact('wali'));
+ }
+
+ public function create()
+ {
+ // ambil data user untuk dropdown (jika sudah punya akun)
+ $users = User::where('role', 'wali')->get();
+ return view('admin.wali.create', compact('users'));
}
public function store(Request $request)
{
$request->validate([
- 'user_id' => 'required|exists:users,id',
- 'alamat' => 'nullable|string',
- 'pekerjaan' => 'nullable|string',
+ 'nama' => 'required|string|max:255',
+ 'alamat' => 'nullable|string',
+ 'lokasi_lat' => 'nullable|numeric',
+ 'lokasi_lng' => 'nullable|numeric',
]);
- $wali = WaliMurid::create($request->all());
- return response()->json($wali, 201);
+ WaliMurid::create($request->all());
+
+ return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil ditambahkan');
}
- public function show($id)
+ public function edit(WaliMurid $wali)
{
- $wali = WaliMurid::with('user')->findOrFail($id);
- return response()->json($wali);
+ $users = User::where('role', 'wali')->get();
+ return view('admin.wali.edit', compact('wali', 'users'));
}
- public function update(Request $request, $id)
+ public function update(Request $request, WaliMurid $wali)
{
- $wali = WaliMurid::findOrFail($id);
+ $request->validate([
+ 'nama' => 'required|string|max:255',
+ 'alamat' => 'nullable|string',
+ 'lokasi_lat' => 'nullable|numeric',
+ 'lokasi_lng' => 'nullable|numeric',
+ ]);
+
$wali->update($request->all());
- return response()->json($wali);
+
+ return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil diperbarui');
}
- public function destroy($id)
+ public function destroy(WaliMurid $wali)
{
- WaliMurid::destroy($id);
- return response()->json(['message' => 'Wali Murid deleted']);
+ $wali->delete();
+
+ return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil dihapus');
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php
index 88c89bb..2f65b08 100644
--- a/app/Http/Controllers/AuthController.php
+++ b/app/Http/Controllers/AuthController.php
@@ -32,4 +32,11 @@ public function login(Request $request)
// kalau email atau password salah
return back()->with('error', 'Username atau password salah!');
}
+public function logout(Request $request)
+{
+ Auth::logout();
+ $request->session()->invalidate();
+ $request->session()->regenerateToken();
+ return redirect('/login');
+}
}
\ No newline at end of file
diff --git a/resources/views/admin/guru/create.blade.php b/resources/views/admin/guru/create.blade.php
new file mode 100644
index 0000000..268705b
--- /dev/null
+++ b/resources/views/admin/guru/create.blade.php
@@ -0,0 +1,45 @@
+@extends('layouts.app')
+
+@section('content')
+
+@endsection
diff --git a/resources/views/admin/guru/edit.blade.php b/resources/views/admin/guru/edit.blade.php
new file mode 100644
index 0000000..57b8e42
--- /dev/null
+++ b/resources/views/admin/guru/edit.blade.php
@@ -0,0 +1,51 @@
+@extends('layouts.app')
+
+@section('content')
+
+@endsection
diff --git a/resources/views/admin/guru/index.blade.php b/resources/views/admin/guru/index.blade.php
new file mode 100644
index 0000000..7544cb3
--- /dev/null
+++ b/resources/views/admin/guru/index.blade.php
@@ -0,0 +1,55 @@
+@extends('layouts.app')
+
+@section('content')
+
+
+
+
+
+
+ | # |
+ Nama |
+ Bidang |
+ Telepon |
+ Alamat |
+ Aksi |
+
+
+
+ @forelse ($guru as $i => $item)
+
+ | {{ $i+1 }} |
+ {{ $item->nama ?? '-' }} |
+ {{ $item->bidang ?? '-' }} |
+ {{ $item->telepon ?? '-' }} |
+ {{ $item->alamat ?? '-' }} |
+
+
+ Edit
+
+
+ |
+
+ @empty
+
+ | Belum ada data guru |
+
+ @endforelse
+
+
+
+@endsection
diff --git a/resources/views/admin/siswa/create.blade.php b/resources/views/admin/siswa/create.blade.php
new file mode 100644
index 0000000..8f7f7a0
--- /dev/null
+++ b/resources/views/admin/siswa/create.blade.php
@@ -0,0 +1,56 @@
+@extends('layouts.app')
+
+@section('content')
+
+
➕ Tambah Peserta Didik
+
+
+
+@endsection
diff --git a/resources/views/admin/siswa/edit.blade.php b/resources/views/admin/siswa/edit.blade.php
new file mode 100644
index 0000000..52e00f1
--- /dev/null
+++ b/resources/views/admin/siswa/edit.blade.php
@@ -0,0 +1,68 @@
+@extends('layouts.app')
+
+@section('content')
+
+
✏️ Edit Peserta Didik
+
+
+
+@endsection
diff --git a/resources/views/admin/siswa/index.blade.php b/resources/views/admin/siswa/index.blade.php
new file mode 100644
index 0000000..1faa8a7
--- /dev/null
+++ b/resources/views/admin/siswa/index.blade.php
@@ -0,0 +1,64 @@
+@extends('layouts.app')
+
+@section('content')
+
+
+
+
+
+
+ | # |
+ Nama |
+ NIS |
+ Kelas |
+ Wali Murid |
+ Foto |
+ Aksi |
+
+
+
+ @forelse ($siswa as $i => $item)
+
+ | {{ $i+1 }} |
+ {{ $item->nama }} |
+ {{ $item->nis }} |
+ {{ $item->kelas->nama ?? '-' }} |
+ {{ $item->wali->nama ?? '-' }} |
+
+ @if($item->foto)
+
+ @else
+ -
+ @endif
+ |
+
+
+ Edit
+
+
+ |
+
+ @empty
+
+ | Belum ada data siswa |
+
+ @endforelse
+
+
+
+@endsection
diff --git a/resources/views/admin/wali/create.blade.php b/resources/views/admin/wali/create.blade.php
new file mode 100644
index 0000000..7b8830d
--- /dev/null
+++ b/resources/views/admin/wali/create.blade.php
@@ -0,0 +1,33 @@
+@extends('layouts.app')
+
+@section('content')
+
+
Tambah Wali Murid
+
+
+
+@endsection
diff --git a/resources/views/admin/wali/edit.blade.php b/resources/views/admin/wali/edit.blade.php
new file mode 100644
index 0000000..96953b9
--- /dev/null
+++ b/resources/views/admin/wali/edit.blade.php
@@ -0,0 +1,33 @@
+@extends('layouts.app')
+
+@section('content')
+
+@endsection
diff --git a/resources/views/admin/wali/index.blade.php b/resources/views/admin/wali/index.blade.php
new file mode 100644
index 0000000..03d2900
--- /dev/null
+++ b/resources/views/admin/wali/index.blade.php
@@ -0,0 +1,55 @@
+@extends('layouts.app')
+
+@section('content')
+
+
+
+
+
+
+ | # |
+ Nama |
+ Alamat |
+ Lokasi (Lat, Lng) |
+ Aksi |
+
+
+
+ @forelse ($wali as $i => $item)
+
+ | {{ $i+1 }} |
+ {{ $item->nama ?? '-' }} |
+ {{ $item->alamat ?? '-' }} |
+
+ {{ $item->lokasi_lat ?? '-' }}, {{ $item->lokasi_lng ?? '-' }}
+ |
+
+
+ Edit
+
+
+ |
+
+ @empty
+
+ | Belum ada data wali murid |
+
+ @endforelse
+
+
+
+@endsection
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 273371e..9edc95c 100644
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -20,9 +20,9 @@
diff --git a/routes/api.php b/routes/api.php
index a7e4278..614bc78 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -20,7 +20,26 @@
// pilih salah satu (saya sarankan pakai apiResource biar singkat)
Route::apiResource('kelas', KelasController::class);
- Route::apiResource('guru', GuruController::class);
- Route::apiResource('wali', WaliMuridController::class);
- Route::apiResource('siswa', SiswaController::class);
+ Route::apiResource('guru', GuruController::class)->names([
+ 'index' => 'api.guru.index',
+ 'show' => 'api.guru.show',
+ 'store' => 'api.guru.store',
+ 'update' => 'api.guru.update',
+ 'destroy' => 'api.guru.destroy',
+ ]);
+ Route::apiResource('wali', WaliMuridController::class)->names([
+ 'index' => 'api.wali.index',
+ 'show' => 'api.wali.show',
+ 'store' => 'api.wali.store',
+ 'update' => 'api.wali.update',
+ 'destroy' => 'api.wali.destroy',
+ ]);
+ Route::apiResource('siswa', SiswaController::class)->names([
+ 'index' => 'api.siswa.index',
+ 'show' => 'api.siswa.show',
+ 'store' => 'api.siswa.store',
+ 'update' => 'api.siswa.update',
+ 'destroy' => 'api.siswa.destroy',
+ ]);
+
});
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index 01e7493..a605b56 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -3,6 +3,9 @@
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\DashboardController;
+use App\Http\Controllers\Admin\GuruController;
+use App\Http\Controllers\Admin\WaliMuridController;
+use App\Http\Controllers\Admin\SiswaController;
// Login routes
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
@@ -17,4 +20,10 @@
// Hanya bisa diakses setelah login
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
-});
+
+Route::prefix('admin')->group(function () {
+ Route::resource('guru', GuruController::class);
+ Route::resource('wali', WaliMuridController::class);
+ Route::resource('siswa', SiswaController::class);
+ });
+});
\ No newline at end of file