user()->id_santri; $santri = Santri::with('kelasPrimary.kelas')->where('id_santri', $idSantri)->first(); if (!$santri) { return response()->json([ 'success' => false, 'message' => 'Data santri tidak ditemukan', ], 404); } $idKelasSantri = $santri->kelasPrimary?->id_kelas; $query = Berita::where('status', 'published') ->where(function($q) use ($idKelasSantri) { $q->where('target_berita', 'semua'); if ($idKelasSantri) { $q->orWhere(function($subQ) use ($idKelasSantri) { $subQ->where('target_berita', 'kelas_tertentu') ->whereJsonContains('target_kelas', $idKelasSantri); }); } }) ->select(['id', 'id_berita', 'judul', 'konten', 'penulis', 'gambar', 'target_berita', 'created_at']) ->orderBy('created_at', 'desc'); $berita = $query->paginate(10); $data = $berita->map(function($item) { return [ 'id' => $item->id, 'id_berita' => $item->id_berita, 'judul' => $item->judul, 'konten' => $item->konten, 'penulis' => $item->penulis, 'gambar_url' => $item->gambar ? url('storage/' . $item->gambar) : null, 'target_berita' => $item->target_berita, 'tanggal' => $item->created_at->format('d M Y'), 'tanggal_lengkap' => $item->created_at->format('d F Y, H:i'), ]; }); return response()->json([ 'success' => true, 'data' => $data, 'pagination' => [ 'current_page' => $berita->currentPage(), 'last_page' => $berita->lastPage(), 'total' => $berita->total(), ] ], 200); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Gagal mengambil berita: ' . $e->getMessage(), ], 500); } } /** * Get detail berita */ public function show(Request $request, $idBerita) { try { $idSantri = $request->user()->id_santri; $berita = Berita::where('id_berita', $idBerita) ->where('status', 'published') ->first(); if (!$berita) { return response()->json([ 'success' => false, 'message' => 'Berita tidak ditemukan', ], 404); } // Cek akses $bolehAkses = false; if ($berita->target_berita === 'semua') { $bolehAkses = true; } elseif ($berita->target_berita === 'kelas_tertentu') { $santri = Santri::with('kelasPrimary')->where('id_santri', $idSantri)->first(); $idKelasSantri = $santri?->kelasPrimary?->id_kelas; $bolehAkses = $idKelasSantri && in_array($idKelasSantri, $berita->target_kelas ?? []); } if (!$bolehAkses) { return response()->json([ 'success' => false, 'message' => 'Anda tidak memiliki akses ke berita ini', ], 403); } return response()->json([ 'success' => true, 'data' => [ 'id_berita' => $berita->id_berita, 'judul' => $berita->judul, 'konten' => $berita->konten, 'penulis' => $berita->penulis, 'gambar_url' => $berita->gambar ? url('storage/' . $berita->gambar) : null, 'target_berita' => $berita->target_berita, 'tanggal' => $berita->created_at->format('d M Y'), 'tanggal_lengkap' => $berita->created_at->format('d F Y, H:i'), ] ], 200); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Gagal mengambil detail berita: ' . $e->getMessage(), ], 500); } } }