diff --git a/app/Http/Controllers/CourseRegistrationController.php b/app/Http/Controllers/CourseRegistrationController.php index fb0ee6f..bd1226b 100644 --- a/app/Http/Controllers/CourseRegistrationController.php +++ b/app/Http/Controllers/CourseRegistrationController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\StoreCourseRegistrationRequest; use App\Http\Requests\UpdateCourseRegistrationRequest; use App\Http\Resources\CourseRegistrationCollection; use App\Http\Resources\CourseRegistrationResource; @@ -16,14 +17,13 @@ public function index(): CourseRegistrationCollection return new CourseRegistrationCollection($this->courseRegistrationService->index()); } - public function store($courseId): CourseRegistrationResource + public function store(StoreCourseRegistrationRequest $request, $courseId): CourseRegistrationResource { - return new CourseRegistrationResource($this->courseRegistrationService->create($courseId)); - + return new CourseRegistrationResource($this->courseRegistrationService->create($request->getCourseRegistration($courseId))); } public function update(UpdateCourseRegistrationRequest $request, $registrationId): CourseRegistrationResource { - return new CourseRegistrationResource($this->courseRegistrationService->update($request->updateStatus(), $registrationId)); + return new CourseRegistrationResource($this->courseRegistrationService->update($request->getCourseRegistration(), $registrationId)); } } diff --git a/app/Http/Requests/StoreCourseRegistrationRequest.php b/app/Http/Requests/StoreCourseRegistrationRequest.php new file mode 100644 index 0000000..4880e5e --- /dev/null +++ b/app/Http/Requests/StoreCourseRegistrationRequest.php @@ -0,0 +1,35 @@ +|string> + */ + public function rules(): array + { + return []; + } + + public function getCourseRegistration(int $courseId): CreateCourseRegistration + { + return new CreateCourseRegistration( + $courseId, + auth()->id() + ); + } +} diff --git a/app/Http/Requests/UpdateCourseRegistrationRequest.php b/app/Http/Requests/UpdateCourseRegistrationRequest.php index 2cf8288..5b77732 100644 --- a/app/Http/Requests/UpdateCourseRegistrationRequest.php +++ b/app/Http/Requests/UpdateCourseRegistrationRequest.php @@ -3,6 +3,8 @@ namespace App\Http\Requests; use App\Enums\RegistrationStatus; +use App\ValueObjects\CreateNewCourse; +use App\ValueObjects\UpdateCourseRegistration; use Illuminate\Foundation\Http\FormRequest; class UpdateCourseRegistrationRequest extends FormRequest @@ -30,9 +32,9 @@ public function rules(): array ], ]; } - - public function updateStatus(): array + public function getCourseRegistration(): UpdateCourseRegistration { - return $this->validated(); + $status = RegistrationStatus::from($this->get('status')); + return new UpdateCourseRegistration($status); } } diff --git a/app/Models/CourseRegistration.php b/app/Models/CourseRegistration.php index 488021f..751fff7 100644 --- a/app/Models/CourseRegistration.php +++ b/app/Models/CourseRegistration.php @@ -3,10 +3,14 @@ namespace App\Models; use App\Enums\RegistrationStatus; +use Database\Factories\CourseRegistrationFactory; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class CourseRegistration extends Model { + /** @use HasFactory */ + use HasFactory; protected $fillable = [ 'course_id', 'user_id', diff --git a/app/Services/CourseRegistrationService.php b/app/Services/CourseRegistrationService.php index 2227a3c..3e83194 100644 --- a/app/Services/CourseRegistrationService.php +++ b/app/Services/CourseRegistrationService.php @@ -2,10 +2,11 @@ namespace App\Services; -use App\Enums\RegistrationStatus; +use App\Models\Course; use App\Models\CourseRegistration; +use App\ValueObjects\CreateCourseRegistration; +use App\ValueObjects\UpdateCourseRegistration; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Auth; class CourseRegistrationService { @@ -14,24 +15,16 @@ public function index(): Collection return CourseRegistration::all(); } - public function create($courseId): CourseRegistration + public function create(CreateCourseRegistration $data): CourseRegistration { - $user = Auth::user(); - $registration = CourseRegistration::create([ - 'course_id' => $courseId, - 'user_id' => $user->id, - 'status' => RegistrationStatus::PENDING->value, - ]); - - return $registration; + Course::findOrFail($data->getCourseId()); // check if course exists + return CourseRegistration::create($data->toArray()); } - public function update(array $data, $registrationId): CourseRegistration + public function update(UpdateCourseRegistration $data, $registrationId): CourseRegistration { $registration = CourseRegistration::findOrFail($registrationId); - $registration->status = $data['status']; - $registration->save(); - + $registration->update($data->toArray()); return $registration; } } diff --git a/app/ValueObjects/CreateCourseRegistration.php b/app/ValueObjects/CreateCourseRegistration.php new file mode 100644 index 0000000..9c64da0 --- /dev/null +++ b/app/ValueObjects/CreateCourseRegistration.php @@ -0,0 +1,27 @@ +courseId; + } + public function getUserId(): int + { + return $this->userId; + } + public function toArray(): array + { + return [ + 'course_id' => $this->getCourseId(), + 'user_id' => $this->getUserId(), + 'status' => RegistrationStatus::PENDING->value, + ]; + } +} diff --git a/app/ValueObjects/UpdateCourseRegistration.php b/app/ValueObjects/UpdateCourseRegistration.php new file mode 100644 index 0000000..1e11d64 --- /dev/null +++ b/app/ValueObjects/UpdateCourseRegistration.php @@ -0,0 +1,20 @@ +status; + } + + public function toArray(): array { + return [ + 'status' => $this->getStatus()->value + ]; + } +} diff --git a/database/factories/CourseRegistrationFactory.php b/database/factories/CourseRegistrationFactory.php new file mode 100644 index 0000000..b03612f --- /dev/null +++ b/database/factories/CourseRegistrationFactory.php @@ -0,0 +1,28 @@ + + */ +class CourseRegistrationFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'course_id' => Course::factory(), + 'user_id' => User::factory(), + 'status' => RegistrationStatus::PENDING->value, + ]; + } +}