From 5b0ba96adf41a725979483da9727e9c840b46886 Mon Sep 17 00:00:00 2001 From: nikden13 Date: Tue, 8 Dec 2020 16:45:27 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Filters/TimetableFilter.php | 2 +- app/Http/Controllers/TimetableController.php | 30 +++++++------ app/Http/Requests/TimetableRequest.php | 10 +---- app/Models/AcademicPlan.php | 15 +++++++ app/Models/SchoolClass.php | 6 +++ app/Models/Subject.php | 6 +++ ..._08_082614_create_academic_plans_table.php | 43 +++++++++++++++++++ 7 files changed, 88 insertions(+), 24 deletions(-) create mode 100644 app/Models/AcademicPlan.php create mode 100644 database/migrations/2020_12_08_082614_create_academic_plans_table.php 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'); + } +}