EVOLUTION-NINJA
Edit File: ClassSubjectController.php
<?php namespace App\Http\Controllers; use App\Models\ClassSubject; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\DB; class ClassSubjectController extends Controller { /** * GET /api/class-subjects * List records; optional filter by class_id */ public function class_subjects_list(Request $request) { $query = ClassSubject::query(); if ($request->filled('class_id')) { $query->where('class_id', $request->integer('class_id')); } // Pagination optional return response()->json($query->orderBy('class_id')->paginate(20)); } /** * GET /api/class-subjects/{class_id} * Show single class's subjects JSON */ public function class_subjects_single(int $class_id) { $row = ClassSubject::where('class_id', $class_id)->first(); if (!$row) { return response()->json(['message' => 'No subject set found for this class.'], 404); } return response()->json($row); } /** * POST /api/class-subjects * Create/Upsert one record per class_id */ public function class_subjects_insert(Request $request) { $data = $request->validate([ 'class_id' => ['required', 'integer', 'exists:classes,id'], 'subjects' => ['required', 'array', 'min:1'], 'subjects.*.subject' => ['required', 'string', 'max:150'], 'subjects.*.marks' => ['required', 'integer', 'min:1', 'max:1000'], 'subjects.*.teacher' => [ 'required', 'string', 'max:200', Rule::exists('employees', 'name') ], ]); // Build arrays $subjects = collect($data['subjects']); $names = $subjects->pluck('subject')->values()->all(); $teachers = $subjects->pluck('teacher')->values()->all(); $marks = $subjects->pluck('marks')->values()->all(); // Upsert per class_id $record = DB::transaction(function () use ($data, $names, $teachers, $marks) { return ClassSubject::updateOrCreate( ['class_id' => $data['class_id']], [ 'subject_names' => $names, 'subject_teachers' => $teachers, 'marks' => $marks, ] ); }); return response()->json([ 'message' => 'Subjects saved for the class.', 'data' => $record, ], 201); } /** * PUT /api/class-subjects/{class_id} * Replace ALL subjects for the class */ public function class_subjects_update(Request $request, int $class_id) { $data = $request->validate([ 'subjects' => ['required', 'array', 'min:1'], 'subjects.*.subject' => ['required', 'string', 'max:150'], 'subjects.*.marks' => ['required', 'integer', 'min:1', 'max:1000'], 'subjects.*.teacher' => [ 'required', 'string', 'max:200', Rule::exists('employees', 'name') ], ]); $row = ClassSubject::where('class_id', $class_id)->first(); if (!$row) { return response()->json(['message' => 'No subject set found for this class.'], 404); } $subjects = collect($data['subjects']); $row->subject_names = $subjects->pluck('subject')->values()->all(); $row->subject_teachers = $subjects->pluck('teacher')->values()->all(); $row->marks = $subjects->pluck('marks')->values()->all(); $row->save(); return response()->json([ 'message' => 'Subjects updated.', 'data' => $row, ]); } /** * DELETE /api/class-subjects/{class_id} * Remove the record for a class */ public function class_subjects_delete(int $class_id) { $row = ClassSubject::where('class_id', $class_id)->first(); if (!$row) { return response()->json(['message' => 'No subject set found for this class.'], 404); } $row->delete(); return response()->json(['message' => 'Subjects deleted for the class.']); } }