Skip to content

Feat/course registrations #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 32 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
569f07f
feat: create CourseRegistrationTable, model and controller
frooooooo7 Jan 10, 2025
a030d78
PHP Linting (Pint)
frooooooo7 Jan 10, 2025
659e02a
feat: implement index and update methods for course registrations
frooooooo7 Jan 13, 2025
9c88018
PHP Linting (Pint)
frooooooo7 Jan 13, 2025
f46dc80
refactor: moved data handling logic from service to value objects
frooooooo7 Jan 14, 2025
4067669
PHP Linting (Pint)
frooooooo7 Jan 14, 2025
176d6f3
refactor: use enum values in migration
frooooooo7 Jan 16, 2025
612cef1
refactor:
frooooooo7 Jan 17, 2025
edd6280
feat: add seeder for CourseRegistrations
frooooooo7 Jan 17, 2025
9db9200
PHP Linting (Pint)
frooooooo7 Jan 17, 2025
85c81ec
refactor: CourseRegistration - enum, migration, requests and routes
frooooooo7 Jan 19, 2025
d6a98eb
PHP Linting (Pint)
frooooooo7 Jan 19, 2025
854a7a5
refactor: split registration functionality between StudentCourseRegis…
frooooooo7 Feb 4, 2025
da405e6
PHP Linting (Pint)
frooooooo7 Feb 4, 2025
f24f15c
refactor:
frooooooo7 Feb 9, 2025
0cef8d7
PHP Linting (Pint)
frooooooo7 Feb 9, 2025
9ad52d8
fix: store properly registartions to course_user
frooooooo7 Feb 12, 2025
2ae1f7a
PHP Linting (Pint)
frooooooo7 Feb 12, 2025
9de3774
Merge branch 'dev' into feat/course-registrations
frooooooo7 Feb 22, 2025
24c38e5
feat: add endpoint to retrieve list of students
frooooooo7 Feb 22, 2025
56442b3
PHP Linting (Pint)
frooooooo7 Feb 22, 2025
10e4824
feat: add functionality to accept and decline course registrations
frooooooo7 Feb 23, 2025
32984f1
PHP Linting (Pint)
frooooooo7 Feb 23, 2025
358b107
feat: implement search by name and last name for drivers
frooooooo7 Mar 2, 2025
cfe340d
refactor: requested changes
frooooooo7 Mar 2, 2025
5d4ebe1
PHP Linting (Pint)
frooooooo7 Mar 2, 2025
2797e18
refactor: use QueryBuilder instead of AdminStudentService in students…
frooooooo7 Mar 26, 2025
797d814
PHP Linting (Pint)
frooooooo7 Mar 26, 2025
b358b50
refactor: improve phone number validation and database storage
frooooooo7 Apr 1, 2025
b5da09c
PHP Linting (Pint)
frooooooo7 Apr 1, 2025
b354e67
refactor: change the returned value of phone number in UserResource
frooooooo7 Apr 23, 2025
97eadb2
PHP Linting (Pint)
frooooooo7 Apr 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/Http/Controllers/Admin/AdminStudentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
use App\Http\Controllers\Controller;
use App\Http\Resources\UserCollection;
use App\Services\Admin\AdminStudentService;
use Illuminate\Http\Request;

class AdminStudentController extends Controller
{
public function __construct(private readonly AdminStudentService $adminStudentService) {}

public function index(): UserCollection
public function index(Request $request): UserCollection
{
return new UserCollection($this->adminStudentService->index());
return new UserCollection($this->adminStudentService->index($request)->paginate(self::PER_PAGE));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
use App\Http\Controllers\Controller;
use App\Http\Requests\CourseRegistration\StoreCourseRegistrationRequest;
use App\Http\Resources\CourseRegistration\CourseRegistrationCollection;
use App\Http\Resources\CourseRegistration\CourseRegistrationResource;
use App\Http\Resources\CourseUserResource;
use App\Models\CourseRegistration;
use App\Services\CourseRegistrationService;
use Illuminate\Http\JsonResponse;
Expand All @@ -19,24 +21,18 @@ public function index(): CourseRegistrationCollection
return new CourseRegistrationCollection($this->courseRegistrationService->index());
}

public function store(StoreCourseRegistrationRequest $request): JsonResponse
public function store(StoreCourseRegistrationRequest $request): CourseUserResource
{
$this->courseRegistrationService->store($request->getRegistration());

return response()->json(['message' => 'Użytkownik został zapisany na kurs!'], Response::HTTP_CREATED);
return new CourseUserResource($this->courseRegistrationService->store($request->getRegistration()));
}

public function accept(CourseRegistration $courseRegistration): JsonResponse
public function accept(CourseRegistration $courseRegistration): CourseRegistrationResource
{
$this->courseRegistrationService->accept($courseRegistration);

return response()->json(['message' => 'Zgloszenie zostalo zaakceptowane i kursant zostal utworzony!'], Response::HTTP_OK);
return new CourseRegistrationResource($this->courseRegistrationService->accept($courseRegistration));
}

public function decline(CourseRegistration $courseRegistration): JsonResponse
public function decline(CourseRegistration $courseRegistration): CourseRegistrationResource
{
$this->courseRegistrationService->decline($courseRegistration);

return response()->json(['message' => 'Zgloszenie zostalo odrzucone!'], Response::HTTP_OK);
return new CourseRegistrationResource($this->courseRegistrationService->decline($courseRegistration));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@

use App\Http\Controllers\Controller;
use App\Http\Requests\CourseRegistration\GuestCourseRegistrationRequest;
use App\Http\Resources\CourseRegistration\GuestCourseRegistrationResource;
use App\Http\Resources\CourseRegistration\CourseRegistrationResource;
use App\Models\Course;
use App\Services\GuestCourseRegistrationService;

class GuestCourseRegistrationController extends Controller
{
public function __construct(protected GuestCourseRegistrationService $guestCourseRegistrationService) {}

public function store(GuestCourseRegistrationRequest $request, Course $course): GuestCourseRegistrationResource
public function store(GuestCourseRegistrationRequest $request, Course $course): CourseRegistrationResource
{
return new GuestCourseRegistrationResource($this->guestCourseRegistrationService->store($request->getGuestCourseRegistration($course)));
return new CourseRegistrationResource($this->guestCourseRegistrationService->store($request->getGuestCourseRegistration($course)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,10 @@ public function authorize(): bool
public function rules(): array
{
return [
'name' => [
'required',
'string',
'min:2',
'max:30',
'regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
],
'last_name' => [
'required',
'string',
'min:2',
'max:30',
'regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
],
'email' => [
'required',
'email',
],
'phone' => [
'required',
'regex:/^\+?\d{9,15}$/',
],
'name' => 'required|string|min:2|max:30|regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
'last_name' => 'required|string|min:2|max:30|regex:/^[a-zA-ZÀ-ž\s\'-]+$/',
'email' => 'required|email|unique:users,email',
'phone' => 'required|regex:/^\+?\d{9,15}$/',
];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class GuestCourseRegistrationResource extends JsonResource
class CourseRegistrationResource extends JsonResource
{
/**
* Transform the resource into an array.
Expand Down
19 changes: 19 additions & 0 deletions app/Http/Resources/CourseUserResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class CourseUserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return parent::toArray($request);
}
}
17 changes: 14 additions & 3 deletions app/Services/Admin/AdminStudentService.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,23 @@
namespace App\Services\Admin;

use App\Models\User;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

class AdminStudentService
{
public function index(): Collection
public function index(Request $request): Builder
{
return User::role('driver')->get();

$user = User::role('driver');

if ($request->has('search')) {
$search = strtolower($request->input('search'));
$user->where(function ($q) use ($search) {
$q->whereRaw('LOWER(name) LIKE ?', ["%{$search}%"])
->orWhereRaw('LOWER(last_name) LIKE ?', ["%{$search}%"]);
});
}
return $user;
}
}
12 changes: 7 additions & 5 deletions app/Services/CourseRegistrationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public function index(): Collection
return CourseRegistration::all();
}

public function store(CreateCourseRegistration $data): void
public function store(CreateCourseRegistration $data): CourseRegistration
{
$user = User::find($data->getUserId());
$courseId = $data->getCourseId();
Expand All @@ -27,9 +27,10 @@ public function store(CreateCourseRegistration $data): void
}

$user->courses()->attach($courseId);
return CourseRegistration::where('user_id', $user->id)->where('course_id', $courseId)->first();
}

public function accept(CourseRegistration $courseRegistration): User
public function accept(CourseRegistration $courseRegistration): CourseRegistration
{
$user = User::create([
'name' => $courseRegistration->name,
Expand All @@ -40,16 +41,17 @@ public function accept(CourseRegistration $courseRegistration): User
]);

$user->assignRole('driver');
$courseRegistration->update(['status' => RegistrationStatus::ACCEPTED->value]);
$courseRegistration->update(['status' => RegistrationStatus::ACCEPTED->value, 'user_id' => $user->id,]);

// do wyslania maila z haslem
//Mail::to($user->email)->send(new RegistrationApproved($user, $password));

return $user;
return $courseRegistration;
}

public function decline(CourseRegistration $courseRegistration): void
public function decline(CourseRegistration $courseRegistration): CourseRegistration
{
$courseRegistration->update(['status' => RegistrationStatus::REJECTED->value]);
return $courseRegistration;
}
}
1 change: 1 addition & 0 deletions routes/api/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use App\Http\Controllers\Admin\AdminStudentController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\CourseController;
use App\Http\Controllers\CourseRegistration\AdminCourseRegistrationController;
use App\Http\Controllers\CourseRegistration\GuestCourseRegistrationController;
use App\Http\Controllers\CreditCardController;
use App\Http\Controllers\GoogleAuthController;
Expand Down