diff --git a/app/Filters/TimetableFilter.php b/app/Filters/TimetableFilter.php index 4688fc6..e834c08 100644 --- a/app/Filters/TimetableFilter.php +++ b/app/Filters/TimetableFilter.php @@ -20,7 +20,7 @@ class TimetableFilter extends QueryFilter protected function subject($value) { - $this->builder = $this->builder->where('type_event', $value); + $this->builder = $this->builder->where('subject_id', $value); } protected function classroom($value) diff --git a/app/Http/Controllers/TimetableController.php b/app/Http/Controllers/TimetableController.php index 322c0f8..dcae219 100644 --- a/app/Http/Controllers/TimetableController.php +++ b/app/Http/Controllers/TimetableController.php @@ -5,10 +5,9 @@ namespace App\Http\Controllers; use App\Filters\TimetableFilter; use App\Http\Requests\TimetableRequest; use App\Models\SchoolClass; -use App\Models\Subject; -use App\Models\Teacher; use App\Models\Timetable; use Carbon\Carbon; +use Illuminate\Database\QueryException; use Illuminate\Http\Request; class TimetableController extends Controller @@ -22,17 +21,17 @@ class TimetableController extends Controller ]); $builder = Timetable::all()->sortBy('timeStart'); $timetables = (new TimetableFilter($builder, $request))->apply()->values(); - $answer = []; + $arrayTimetables = []; for ($i = 0; $i < 6; $i++) { $date = Carbon::parse($request->input('date')) ->addDays($i) ->format('Y-m-d'); - array_push($answer, [$date => $timetables->where('date', $date)->values()]); + array_push($arrayTimetables, [$date => $timetables->where('date', $date)->values()]); } - return response()->json($answer, 200); + return response()->json($arrayTimetables, 200); } - //Получение расписания + //Получение урока public function show(Timetable $timetable) { return response()->json($timetable, 200); @@ -42,10 +41,11 @@ class TimetableController extends Controller public function store(TimetableRequest $request) { foreach($request->input('timetables') as $timetable) { - SchoolClass::findOrFail($timetable['class_id']); - Teacher::findOrFail($timetable['teacher_id']); - Subject::findOrFail($timetable['subject_id']); - Timetable::create($timetable); + try { + Timetable::create($timetable); + }catch (QueryException $e) { + return response()->json(['message' => 'Not found class, teacher or subject'], 400); + } } return response()->json(['message' => 'Timetable was created'], 201); @@ -62,10 +62,11 @@ class TimetableController extends Controller 'time_start' => 'required|date_format:H:i', 'time_end' => 'required|date_format:H:i|after:time_start', ]); - SchoolClass::findOrFail($request->input('class_id')); - Teacher::findOrFail($request->input('teacher_id')); - Subject::findOrFail($request->input('subject_id')); - $timetable->update($request->all()); + try { + $timetable->update($request->all()); + }catch (QueryException $e) { + return response()->json(['message' => 'Not found class, teacher or subject'], 400); + } return response()->json(['message' => 'Timetable was updated'], 200); } @@ -75,4 +76,5 @@ class TimetableController extends Controller $timetable->delete(); return response()->json('', 204); } + } diff --git a/app/Http/Requests/TimetableRequest.php b/app/Http/Requests/TimetableRequest.php index 51481c8..8cd1c71 100644 --- a/app/Http/Requests/TimetableRequest.php +++ b/app/Http/Requests/TimetableRequest.php @@ -19,15 +19,7 @@ class TimetableRequest extends ApiFormRequest 'timetables.*.subject_id' => 'required|integer|gt:0', 'timetables.*.date' => 'required|date_format:Y/m/d|', 'timetables.*.time_start' => 'required|date_format:H:i', - //'timetables.*.time_end' => 'required|date_format:H:i|after:time_start', - /*'week' => 'required|array', - 'week.*.day' => 'required|array', - 'week.*.day.*.class_id' => 'required|integer|gt:0', - 'week.*.day.*.teacher_id' => 'required|integer|gt:0', - 'week.*.day.*.subject_id' => 'required|integer|gt:0', - 'week.*.day.*.date' => 'required|date_format:Y/m/d|', - 'week.*.day.*.time_start' => 'required|date_format:H:i', - 'week.*.day.*.time_end' => 'required|date_format:H:i|after:time_start',*/ + 'timetables.*.time_end' => 'required|date_format:H:i', ]; } } diff --git a/app/Models/AcademicPlan.php b/app/Models/AcademicPlan.php new file mode 100644 index 0000000..694a318 --- /dev/null +++ b/app/Models/AcademicPlan.php @@ -0,0 +1,15 @@ +hasMany(Student::class); } + + public function subjects() + { + return $this->belongsToMany(Subject::class, 'academic_plans')->withPivot('hours_per_week', 'hours_per_year'); + } + } diff --git a/app/Models/Subject.php b/app/Models/Subject.php index 3adfcaf..6572e8e 100644 --- a/app/Models/Subject.php +++ b/app/Models/Subject.php @@ -17,4 +17,10 @@ class Subject extends Model { return $this->hasMany(BankTask::class); } + + public function schoolClasses() + { + return $this->belongsToMany(SchoolClass::class, 'academic_plans')->withPivot('hours_per_week', 'hours_per_year'); + } + } diff --git a/database/migrations/2020_12_08_082614_create_academic_plans_table.php b/database/migrations/2020_12_08_082614_create_academic_plans_table.php new file mode 100644 index 0000000..424681b --- /dev/null +++ b/database/migrations/2020_12_08_082614_create_academic_plans_table.php @@ -0,0 +1,43 @@ +unsignedInteger('subject_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('hours_per_week'); + $table->unsignedInteger('hours_per_year'); + $table->timestamps(); + + $table->foreign('subject_id') + ->references('id')->on('subjects') + ->onDelete('cascade'); + $table->foreign('class_id') + ->references('id')->on('school_classes') + ->onDelete('cascade'); + + $table->primary(['subject_id', 'class_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('academic_plans'); + } +}