MIF_E31212365/app/Http/Controllers/Admin/MateriController.php

284 lines
8.1 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Likes;
use App\Models\Materi;
use App\Models\Module;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Inertia\Inertia;
class MateriController extends Controller
{
public function index()
{
return Inertia::render('Admin/Materi', []);
}
public function materiDetail($id_module)
{
return Inertia::render('Admin/MateriDetail', [
'id' => $id_module
]);
}
public function moduleDetail($id)
{
return Inertia::render('Admin/ModuleDetail', [
'id' => $id
]);
}
public function inputMateri($id)
{
$data = Materi::findOrFail($id);
return Inertia::render('Admin/InputMateri', [
"data" => $data
]);
}
public function getModule(Request $request)
{
try {
//code...
$data = Module::where('kategori_id', $request->id)->orderBy('created_at', 'DESC');
if ($request->has('search')) {
$data->where('name', 'like', '%' . $request->search . '%');
}
return response()->json([
"status" => "success",
"message" => "Data module berhasil diambil",
"result" => $data->paginate(10)
], 200);
} catch (\Throwable $th) {
//throw $th;
return response()->json([
"status" => "error",
"message" => $th->getMessage(),
], 400);
}
}
public function storeModule(Request $request)
{
$validator = Validator::make($request->all(), [
'id_category' => 'required',
'name' => 'required|string|max:50',
'description' => 'required|string',
]);
if ($validator->fails()) {
return response()->json(['message' => 'Validation failed', 'errors' => $validator->errors()->first()], 400);
}
$data = new Module;
$data->name = $request->name;
$data->description = $request->description;
$data->kategori_id = $request->id_category;
$data->save();
// Berikan respon dengan data yang berhasil dibuat
return response()->json(['message' => 'Data created successfully', 'data' => $data], 201);
}
public function updateModule(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
'id_category' => 'required',
'name' => 'required|string|max:50',
'description' => 'required|string',
]);
if ($validator->fails()) {
return response()->json(['message' => 'Validation failed', 'errors' => $validator->errors()->first()], 400);
}
$data = Module::find($request->id);
if (!$data) {
return response()->json(['message' => 'Data not found'], 404);
}
$data->name = $request->name;
$data->description = $request->description;
$data->kategori_id = $request->id_category;
$data->save();
return response()->json(['message' => 'Data updated successfully', 'data' => $data], 200);
}
public function deleteModule(Request $request)
{
$data = Module::find($request->id);
if (!$data) {
return response()->json(['message' => 'Data not found'], 404);
}
$data->delete();
return response()->json(['message' => 'Data deleted successfully'], 200);
}
public function getMateri(Request $request)
{
try {
//code...
$data = Materi::with(['riwayat_kuis' => function($q){
$q->orderBy('skor', 'desc');
}, 'riwayat_kuis.user'])->where('module_id', $request->id)->orderBy('created_at', 'DESC');
if ($request->has('search')) {
$data->where('name', 'like', '%' . $request->search . '%');
}
return response()->json([
"status" => "success",
"message" => "Data materi berhasil diambil",
"result" => $data->paginate(10)
], 200);
} catch (\Throwable $th) {
//throw $th;
return response()->json([
"status" => "error",
"message" => $th->getMessage(),
], 400);
}
}
public function storeMateri(Request $request)
{
$validator = Validator::make($request->all(), [
'id_module' => 'required',
'name' => 'required|string|max:50',
'category' => 'required',
]);
if ($validator->fails()) {
return response()->json(['message' => 'Validation failed', 'errors' => $validator->errors()->first()], 400);
}
$data = new Materi;
$data->module_id = $request->id_module;
$data->name = $request->name;
$data->kategori = $request->category;
$data->save();
// Berikan respon dengan data yang berhasil dibuat
return response()->json(['message' => 'Data created successfully', 'data' => $data], 201);
}
public function updateMateri(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
'name' => 'required|string|max:50',
'category' => 'required',
]);
if ($validator->fails()) {
return response()->json(['message' => 'Validation failed', 'errors' => $validator->errors()->first()], 400);
}
$data = Materi::find($request->id);
if (!$data) {
return response()->json(['message' => 'Data not found'], 404);
}
$data->name = $request->name;
$data->kategori = $request->category;
$data->save();
return response()->json(['message' => 'Data updated successfully', 'data' => $data], 200);
}
public function deleteMateri(Request $request)
{
$data = Materi::find($request->id);
if (!$data) {
return response()->json(['message' => 'Data not found'], 404);
}
$data->delete();
return response()->json(['message' => 'Data deleted successfully'], 200);
}
public function inputDataMateri(Request $request)
{
if ($request->hasFile('file')) {
$validator = Validator::make($request->all(), [
'id' => 'required',
'file' => 'required|file|max:8000',
]);
} else {
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
}
if ($validator->fails()) {
return response()->json(['message' => 'Validation failed', 'errors' => $validator->errors()->first()], 400);
}
$data = Materi::find($request->id);
$data->materi = $request->materi;
if ($request->hasFile('file')) {
$file = $request->file('file');
$name = time() . '.' . $file->getClientOriginalExtension();
$file->move(public_path('uploads/materi'), $name);
$link = url('uploads/materi/' . $name);
$data->video = $link;
} else {
$data->video = $request->video;
}
$data->save();
// Berikan respon dengan data yang berhasil dibuat
return response()->json(['message' => 'Data created successfully', 'data' => $data], 201);
}
public function likeMateri(Request $request)
{
$data = Materi::find($request->id);
if (!$data) {
return response()->json(['message' => 'Data not found'], 404);
}
$like = Likes::where('materi_id', $request->id)->where('user_id', $request->id_user)->first();
if ($like) {
$like->delete();
return response()->json(['message' => 'Data disliked successfully'], 200);
}
$like = new Likes;
$like->materi_id = $request->id;
$like->user_id = $request->id_user;
$like->save();
return response()->json(['message' => 'Data liked successfully', 'data' => $like], 201);
}
}