task-5 (Lessons and Scores) #5
88
app/Http/Controllers/LessonController.php
Normal file
88
app/Http/Controllers/LessonController.php
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\LessonPostRequest;
|
||||||
|
use App\Models\Lesson;
|
||||||
|
use App\Services\ServiceInterface;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Illuminate\View\View;
|
||||||
|
|
||||||
|
class LessonController extends Controller
|
||||||
|
{
|
||||||
|
public function __construct
|
||||||
|
(
|
||||||
|
protected ServiceInterface $service,
|
||||||
|
){
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(): View
|
||||||
|
{
|
||||||
|
return view('lessons.index', [
|
||||||
|
'lessons' => $this->service->getAll(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create(): View
|
||||||
|
{
|
||||||
|
return view('lessons.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(LessonPostRequest $request): RedirectResponse
|
||||||
|
{
|
||||||
|
return redirect()->route(
|
||||||
|
'lessons.show',
|
||||||
|
$this->service->create($request->validated())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(Lesson $lesson): View
|
||||||
|
{
|
||||||
|
return view('lessons.show', [
|
||||||
|
'lesson' => $lesson,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(Lesson $lesson): View
|
||||||
|
{
|
||||||
|
return view('lessons.edit', [
|
||||||
|
'lesson' => $lesson,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(LessonPostRequest $request, Lesson $lesson): RedirectResponse
|
||||||
|
{
|
||||||
|
return redirect()->route(
|
||||||
|
'lessons.show',
|
||||||
|
$this->service->update($lesson, $request->validated())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(Lesson $lesson): RedirectResponse
|
||||||
|
{
|
||||||
|
$this->service->delete($lesson);
|
||||||
|
|
||||||
|
return redirect()->route('lessons.index');
|
||||||
|
}
|
||||||
|
}
|
35
app/Http/Requests/LessonPostRequest.php
Normal file
35
app/Http/Requests/LessonPostRequest.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use App\Enums\TypeLesson;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class LessonPostRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'type' => ['required', Rule::in(TypeLesson::cases())],
|
||||||
|
'lesson_date' => 'required|date',
|
||||||
|
'grade_id' => 'required|exists:grades,id',
|
||||||
|
'teacher_id' => 'required|exists:teachers,id',
|
||||||
|
'subject_id' => 'required|exists:subjects,id',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,9 @@ class Lesson extends Model
|
|||||||
'name',
|
'name',
|
||||||
'type',
|
'type',
|
||||||
'lesson_date',
|
'lesson_date',
|
||||||
|
'grade_id',
|
||||||
|
'teacher_id',
|
||||||
|
'subject_id',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function scores(): HasMany
|
public function scores(): HasMany
|
||||||
|
@ -5,6 +5,7 @@ namespace App\Providers;
|
|||||||
use App\Http\Controllers\GradeController;
|
use App\Http\Controllers\GradeController;
|
||||||
use App\Http\Controllers\GradeSubjectController;
|
use App\Http\Controllers\GradeSubjectController;
|
||||||
use App\Http\Controllers\GradeTeacherController;
|
use App\Http\Controllers\GradeTeacherController;
|
||||||
|
use App\Http\Controllers\LessonController;
|
||||||
use App\Http\Controllers\StudentController;
|
use App\Http\Controllers\StudentController;
|
||||||
use App\Http\Controllers\SubjectController;
|
use App\Http\Controllers\SubjectController;
|
||||||
use App\Http\Controllers\SubjectTeacherController;
|
use App\Http\Controllers\SubjectTeacherController;
|
||||||
@ -12,6 +13,7 @@ use App\Http\Controllers\TeacherController;
|
|||||||
use App\Services\GradeService;
|
use App\Services\GradeService;
|
||||||
use App\Services\GradeSubjectService;
|
use App\Services\GradeSubjectService;
|
||||||
use App\Services\GradeTeacherService;
|
use App\Services\GradeTeacherService;
|
||||||
|
use App\Services\LessonService;
|
||||||
use App\Services\ServiceInterface;
|
use App\Services\ServiceInterface;
|
||||||
use App\Services\StudentService;
|
use App\Services\StudentService;
|
||||||
use App\Services\SubjectService;
|
use App\Services\SubjectService;
|
||||||
@ -67,6 +69,12 @@ class ModelServiceProvider extends ServiceProvider
|
|||||||
->give(function () {
|
->give(function () {
|
||||||
return new GradeTeacherService();
|
return new GradeTeacherService();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->app->when(LessonController::class)
|
||||||
|
->needs(ServiceInterface::class)
|
||||||
|
->give(function () {
|
||||||
|
return new LessonService();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
33
app/Services/LessonService.php
Normal file
33
app/Services/LessonService.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use App\Models\Lesson;
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class LessonService implements ServiceInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getAll(): Collection
|
||||||
|
{
|
||||||
|
return Lesson::all();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(array $data): Lesson
|
||||||
|
{
|
||||||
|
return Lesson::create($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(Model $model, array $data): Lesson
|
||||||
|
{
|
||||||
|
$model->update($data);
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete($model): void
|
||||||
|
{
|
||||||
|
$model->delete();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user