284 lines
8.1 KiB
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);
|
|
}
|
|
}
|