feat & fix: update api kategori,materi,submateri

This commit is contained in:
vionar3 2025-05-18 17:18:44 +07:00
parent c4879d6256
commit ec4d21af1d
9 changed files with 111 additions and 60 deletions

View File

@ -12,11 +12,36 @@ class SubMateriControler extends Controller
public function getSubMateriByKategori($id_kategori)
{
try {
$subMateri = SubMateri::where('id_kategori', $id_kategori)->get();
if ($subMateri->isEmpty()) {
// Retrieve the category along with the related sub-materi
$kategori = SubMateri::with('kategori')
->where('id_kategori', $id_kategori)
->get();
// Check if any sub-materi was found
if ($kategori->isEmpty()) {
return ResponseFormatter::error(null, 'Sub materi tidak ditemukan', 404);
}
return ResponseFormatter::success($subMateri, 'Sub materi berdasarkan kategori berhasil diambil');
// Return the response with the data
return ResponseFormatter::success([
'id' => $kategori[0]->kategori->id, // Category ID
'id_materi' => $kategori[0]->kategori->id_materi, // Materi ID
'nama_kategori' => $kategori[0]->kategori->nama_kategori, // Category name
'created_at' => $kategori[0]->kategori->created_at, // Category created at
'updated_at' => $kategori[0]->kategori->updated_at, // Category updated at
'sub_materi' => $kategori->map(function ($subMateri) {
return [
'id' => $subMateri->id,
'id_kategori' => $subMateri->id_kategori,
'title' => $subMateri->title,
'subtitle' => $subMateri->subtitle,
'video_url' => $subMateri->video_url,
'intro' => $subMateri->intro,
'created_at' => $subMateri->created_at,
'updated_at' => $subMateri->updated_at,
];
})
], 'Sub materi berdasarkan kategori berhasil diambil');
} catch (\Exception $e) {
return ResponseFormatter::error(null, 'Terjadi kesalahan saat mengambil data sub materi', 500);
}

View File

@ -56,15 +56,15 @@ public function login(Request $request)
{
try {
$request->validate([
'no_telp_wali' => 'required|string',
'email' => 'required|string',
'password' => 'required'
]);
$user = User::where('no_telp_wali', $request->no_telp_wali)->first();
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return ResponseFormatter::error([
'message' => 'Nomor telepon atau password salah'
'message' => 'email atau password salah'
], 'Authentication Failed', 401);
}
@ -74,6 +74,9 @@ public function login(Request $request)
'access_token' => $tokenResult,
'token_type' => 'Bearer',
// 'user' => $user
'user' => [
'peran' => $user->peran // Pastikan 'status' ada di sini
]
], 'Authenticated');
} catch (Exception $error) {
return ResponseFormatter::error([

View File

@ -20,8 +20,8 @@ class Kategori extends Model
// Relasi dengan sub materi
public function subMateri()
{
return $this->hasMany(SubMateri::class);
}
{
return $this->hasMany(SubMateri::class, 'id_kategori');
}
}

View File

@ -16,6 +16,7 @@ class Materi extends Model
protected $fillable = [
'title',
'subtitle',
'description',
];
// Relasi dengan kategori

View File

@ -26,4 +26,8 @@ public function latihan()
{
return $this->hasMany(Latihan::class);
}
public function kategori()
{
return $this->belongsTo(Kategori::class, 'id_kategori');
}
}

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('materi', function (Blueprint $table) {
$table->string('description');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('materi', function (Blueprint $table) {
$table->string('description');
});
}
};

View File

@ -14,38 +14,42 @@ class LatihanTableSeeder extends Seeder
public function run(): void
{
Latihan::create([
'id_submateri' => 1, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'بَسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ',
'latin_text' => 'Bismillah',
'materi_description' => 'Latihan pengucapan huruf',
'correct_audio' => 'audio1.mp3',
'recorder_audio' => 'user1',
]);
'id_submateri' => 1, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'بَسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ',
'latin_text' => 'Bismillah',
'materi_description' => 'Latihan pengucapan huruf',
'correct_audio' => 'audio1.mp3',
'recorder_audio' => 'user1',
]);
Latihan::create([
'id_submateri' => 2, // Mengacu pada sub materi "Tenggorokan"
'potongan_ayat' => 'اَلْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ',
'latin_text' => 'Alhamdulillah',
'materi_description' => 'Latihan pengucapan huruf',
'correct_audio' => 'audio2.mp3',
'recorder_audio' => 'user2',
]);
Latihan::create([
'id_submateri' => 3, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'بَسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ',
'latin_text' => 'Bismillah',
'materi_description' => 'Latihan pengucapan huruf',
'correct_audio' => 'audio1.mp3',
'recorder_audio' => 'user1',
]);
// Data kedua
Latihan::create([
'id_submateri' => 1, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ',
'latin_text' => 'Alhamdulillah Rabbil Alamin',
'materi_description' => 'Latihan pengucapan huruf dengan panjang',
'correct_audio' => 'audio2.mp3',
'recorder_audio' => 'user2',
]);
Latihan::create([
'id_submateri' => 4, // Mengacu pada sub materi "Tenggorokan"
'potongan_ayat' => 'اَلْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ',
'latin_text' => 'Alhamdulillah',
'materi_description' => 'Latihan pengucapan huruf',
'correct_audio' => 'audio2.mp3',
'recorder_audio' => 'user2',
]);
// Data ketiga
Latihan::create([
'id_submateri' => 1, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'الرَّحْمَنِ الرَّحِيمِ',
'latin_text' => 'Ar-Rahman Ar-Rahim',
'materi_description' => 'Latihan pengucapan huruf dengan tajwid',
'correct_audio' => 'audio3.mp3',
'recorder_audio' => 'user3',
]);
// Data keempat
Latihan::create([
'id_submateri' => 1, // Mengacu pada sub materi "Makhrijul Huruf"
'potongan_ayat' => 'مَالِكِ يَوْمِ الدِّينِ',
'latin_text' => 'Maliki Yawmiddin',
'materi_description' => 'Latihan pengucapan huruf yang benar',
'correct_audio' => 'audio4.mp3',
'recorder_audio' => 'user4',
]);
}
}

View File

@ -14,35 +14,20 @@ class SubMateriTableSeeder extends Seeder
public function run(): void
{
SubMateri::create([
'id_kategori' => 1, // Mengacu pada kategori "Rongga Mulut"
'title' => 'Mad',
'subtitle' => 'rongga mulut',
'id_kategori' => 2, // Mengacu pada kategori "Rongga Mulut"
'title' => 'ain & ha',
'subtitle' => 'tengah tenggorokan',
'video_url' => 'https://youtu.be/qF_HuLMI-B4?si=IJWIzHu-vQXBaKgD',
'intro' => 'Pengenalan rongga mulut',
]);
SubMateri::create([
'id_kategori' => 2, // Mengacu pada kategori "Tenggorokan"
'title' => 'Hamzah',
'subtitle' => 'Pangkal Tenggorokan',
'title' => 'ghain & ha',
'subtitle' => 'ujung tenggorokan',
'video_url' => 'https://youtu.be/qF_HuLMI-B4?si=IJWIzHu-vQXBaKgD',
'intro' => 'Penjelasan tentang pangkaltenggorokan',
]);
SubMateri::create([
'id_kategori' => 3, // Mengacu pada kategori "Rongga Mulut"
'title' => 'Hamz vs Jahr',
'subtitle' => 'Keluar nafas vs tidak keluar nafas',
'video_url' => 'https://youtu.be/qF_HuLMI-B4?si=IJWIzHu-vQXBaKgD',
'intro' => 'Pengenalan sifat hams dan jahr',
]);
SubMateri::create([
'id_kategori' => 4, // Mengacu pada kategori "Tenggorokan"
'title' => 'Qalqalah',
'subtitle' => 'Suara memantul',
'video_url' => 'https://youtu.be/qF_HuLMI-B4?si=IJWIzHu-vQXBaKgD',
'intro' => 'Penjelasan tentang qalqalah',
]);
}
}

View File

@ -30,5 +30,6 @@
Route::get('/materi', [MateriControler::class, 'getMateri']);
Route::get('/kategori/{id_materi}', [KategoryController::class, 'getKategoriByMateri']);
// Route::get('/sub_materi', [SubMateriControler::class, 'getAllSubMateri']);
Route::get('/sub_materi/{id_kategori}', [SubMateriControler::class, 'getSubMateriByKategori']);
Route::get('/latihan/{id_submateri}', [LatihanControler::class, 'getLatihanBySubMateri']);