Skip to content

Commit

Permalink
fix: store properly registartions to course_user
Browse files Browse the repository at this point in the history
  • Loading branch information
frooooooo7 committed Feb 12, 2025
1 parent 0cef8d7 commit 9ad52d8
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use App\Http\Resources\CourseRegistration\CourseRegistrationResource;
use App\Models\CourseRegistration;
use App\Services\CourseRegistrationService;
use Illuminate\Http\JsonResponse;

class AdminCourseRegistrationController extends Controller
{
Expand All @@ -19,9 +20,10 @@ public function index(): CourseRegistrationCollection
return new CourseRegistrationCollection($this->courseRegistrationService->index());
}

public function store(StoreCourseRegistrationRequest $request): CourseRegistrationResource
public function store(StoreCourseRegistrationRequest $request): JsonResponse
{
return new CourseRegistrationResource($this->courseRegistrationService->store($request->getRegistration()));
$this->courseRegistrationService->store($request->getRegistration());
return response()->json(['message' => 'Użytkownik został zapisany na kurs!'], 201);
}
//
// public function update(UpdateCourseRegistrationRequest $request, CourseRegistration $courseRegistration): CourseRegistrationResource
Expand Down
2 changes: 1 addition & 1 deletion app/Models/Course.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function category(): BelongsTo

public function users(): BelongsToMany
{
return $this->belongsToMany(User::class, 'course_user');
return $this->belongsToMany(User::class, 'course_user')->withTimestamps();
}

public function registrations(): hasMany
Expand Down
6 changes: 5 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ public function creditCard(): HasOne

public function courses(): BelongsToMany
{
return $this->belongsToMany(Course::class, 'course_user');
return $this->belongsToMany(Course::class, 'course_user')->withTimestamps();
}
public function isRegisteredToCourse($courseId): bool
{
return $this->courses()->where('course_id', $courseId)->exists();
}
}
15 changes: 8 additions & 7 deletions app/Services/CourseRegistrationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Services;

use App\Models\CourseRegistration;
use App\Models\User;
use App\ValueObjects\CreateCourseRegistration;
use Illuminate\Support\Collection;

Expand All @@ -13,17 +14,17 @@ public function index(): Collection
return CourseRegistration::all();
}

public function store(CreateCourseRegistration $data): CourseRegistration
public function store(CreateCourseRegistration $data): void
{
$existing = CourseRegistration::where([
'user_id' => $data->user_id,
'course_id' => $data->course_id,
])->first();
$user = User::find($data->getUserId());
$courseId = $data->getCourseId();

if ($existing) {
if ($user->isRegisteredToCourse($courseId)) {
throw new \Exception('Użytkownik jest już zapisany na ten kurs.');
}

return CourseRegistration::create($data->toArray());
$user->courses()->attach($courseId);
}


}
6 changes: 3 additions & 3 deletions app/ValueObjects/CreateCourseRegistration.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@

final readonly class CreateCourseRegistration implements Arrayable
{
public function __construct(private int $courseId, private int $userId) {}
public function __construct(private int $course_id, private int $user_id) {}

public function getCourseId(): int
{
return $this->courseId;
return $this->course_id;
}

public function getUserId(): int
{
return $this->userId;
return $this->user_id;
}

public function toArray(): array
Expand Down

0 comments on commit 9ad52d8

Please sign in to comment.