Skip to content

Commit 854a7a5

Browse files
committed
refactor: split registration functionality between StudentCourseRegistration and AdminCourseRegistration
feat: add StudentCourseRegistrationController and its functionalities
1 parent d6a98eb commit 854a7a5

20 files changed

+291
-93
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
4+
namespace App\Http\Controllers\CourseRegistration;
5+
6+
use App\Http\Controllers\Controller;
7+
use App\Http\Requests\CourseRegistration\StoreCourseRegistrationRequest;
8+
use App\Http\Requests\CourseRegistration\UpdateCourseRegistrationRequest;
9+
use App\Http\Resources\CourseRegistration\CourseRegistrationCollection;
10+
use App\Http\Resources\CourseRegistration\CourseRegistrationResource;
11+
use App\Models\Course;
12+
use App\Models\CourseRegistration;
13+
use App\Services\CourseRegistrationService;
14+
15+
class AdminCourseRegistrationController extends Controller
16+
{
17+
public function __construct(protected CourseRegistrationService $courseRegistrationService)
18+
{
19+
}
20+
// public function index(): CourseRegistrationCollection
21+
// {
22+
// return new CourseRegistrationCollection($this->courseRegistrationService->index());
23+
// }
24+
//
25+
// public function store(StoreCourseRegistrationRequest $request, Course $course): CourseRegistrationResource
26+
// {
27+
// return new CourseRegistrationResource($this->courseRegistrationService->create($request->getCourseRegistration($course)));
28+
// }
29+
//
30+
// public function update(UpdateCourseRegistrationRequest $request, CourseRegistration $courseRegistration): CourseRegistrationResource
31+
// {
32+
// return new CourseRegistrationResource($this->courseRegistrationService->update($request->getCourseRegistration(), $courseRegistration));
33+
// }
34+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\CourseRegistration;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\CourseRegistration\StoreStudentCourseRegistrationRequest;
7+
use App\Http\Resources\CourseRegistration\StudentCourseRegistrationResource;
8+
use App\Models\Course;
9+
use App\Services\StudentCourseRegistrationService;
10+
11+
class StudentCourseRegistrationController extends Controller
12+
{
13+
public function __construct(protected StudentCourseRegistrationService $studentCourseRegistrationService) {}
14+
15+
public function store(StoreStudentCourseRegistrationRequest $request, Course $course): StudentCourseRegistrationResource
16+
{
17+
return new StudentCourseRegistrationResource($this->studentCourseRegistrationService->store($request->getStudentCourseRegistration($course)));
18+
}
19+
}

app/Http/Controllers/CourseRegistrationController.php

Lines changed: 0 additions & 31 deletions
This file was deleted.

app/Http/Requests/StoreCourseRegistrationRequest.php renamed to app/Http/Requests/CourseRegistration/StoreCourseRegistrationRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Requests;
3+
namespace App\Http\Requests\CourseRegistration;
44

55
use App\Models\Course;
66
use App\ValueObjects\CreateCourseRegistration;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace App\Http\Requests\CourseRegistration;
4+
5+
use App\Models\Course;
6+
use App\ValueObjects\StoreStudentCourseRegistration;
7+
use Illuminate\Foundation\Http\FormRequest;
8+
9+
class StoreStudentCourseRegistrationRequest extends FormRequest
10+
{
11+
/**
12+
* Determine if the user is authorized to make this request.
13+
*/
14+
public function authorize(): bool
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
23+
*/
24+
public function rules(): array
25+
{
26+
return [
27+
'name' => [
28+
'required',
29+
'string',
30+
'min:2',
31+
'max:30',
32+
'regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
33+
],
34+
'last_name' => [
35+
'required',
36+
'string',
37+
'min:2',
38+
'max:30',
39+
'regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
40+
],
41+
'email' => [
42+
'required',
43+
'email',
44+
],
45+
'phone' => [
46+
'required',
47+
'regex:/^\+?\d{9,15}$/',
48+
],
49+
];
50+
}
51+
52+
public function getStudentCourseRegistration(Course $course): StoreStudentCourseRegistration
53+
{
54+
return new StoreStudentCourseRegistration(
55+
$course->id,
56+
$this->get('name'),
57+
$this->get('last_name'),
58+
$this->get('email'),
59+
$this->get('phone'),
60+
);
61+
}
62+
}

app/Http/Requests/UpdateCourseRegistrationRequest.php renamed to app/Http/Requests/CourseRegistration/UpdateCourseRegistrationRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Requests;
3+
namespace App\Http\Requests\CourseRegistration;
44

55
use App\Enums\RegistrationStatus;
66
use App\ValueObjects\UpdateCourseRegistration;

app/Http/Resources/CourseRegistrationCollection.php renamed to app/Http/Resources/CourseRegistration/CourseRegistrationCollection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Resources;
3+
namespace App\Http\Resources\CourseRegistration;
44

55
use Illuminate\Http\Request;
66
use Illuminate\Http\Resources\Json\ResourceCollection;

app/Http/Resources/CourseRegistrationResource.php renamed to app/Http/Resources/CourseRegistration/CourseRegistrationResource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Resources;
3+
namespace App\Http\Resources\CourseRegistration;
44

55
use Illuminate\Http\Request;
66
use Illuminate\Http\Resources\Json\JsonResource;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace App\Http\Resources\CourseRegistration;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\JsonResource;
7+
8+
class StudentCourseRegistrationResource extends JsonResource
9+
{
10+
/**
11+
* Transform the resource into an array.
12+
*
13+
* @return array<string, mixed>
14+
*/
15+
public function toArray(Request $request): array
16+
{
17+
return [
18+
'id' => $this->id,
19+
'course_id' => $this->course_id,
20+
'name' => $this->name,
21+
'last_name' => $this->last_name,
22+
'email' => $this->email,
23+
'phone' => $this->phone,
24+
'status' => $this->status,
25+
'created_at' => $this->created_at?->toDateTimeString(),
26+
'updated_at' => $this->updated_at?->toDateTimeString(),
27+
];
28+
}
29+
}

app/Models/Course.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Database\Eloquent\Factories\HasFactory;
88
use Illuminate\Database\Eloquent\Model;
99
use Illuminate\Database\Eloquent\Relations\BelongsTo;
10+
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
1011
use Illuminate\Database\Eloquent\Relations\HasMany;
1112

1213
/**
@@ -43,7 +44,11 @@ public function category(): BelongsTo
4344
return $this->belongsTo(Category::class);
4445
}
4546

46-
public function courseRegistrations(): HasMany
47+
public function users(): BelongsToMany
48+
{
49+
return $this->belongsToMany(User::class, 'course_user');
50+
}
51+
public function registrations(): hasMany
4752
{
4853
return $this->hasMany(CourseRegistration::class);
4954
}

0 commit comments

Comments
 (0)