Skip to content

Commit 569f07f

Browse files
committed
feat: create CourseRegistrationTable, model and controller
1 parent 7afb7ff commit 569f07f

File tree

8 files changed

+148
-0
lines changed

8 files changed

+148
-0
lines changed

app/Enums/RegistrationStatus.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace App\Enums;
4+
5+
enum RegistrationStatus: string
6+
{
7+
case Pending = 'pending';
8+
case Accepted = 'accepted';
9+
case Rejected = 'rejected';
10+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\CourseRegistrationResource;
6+
use App\Models\User;
7+
use App\Services\CourseRegistrationService;
8+
use Illuminate\Http\Request;
9+
10+
class CourseRegistrationController extends Controller
11+
{
12+
public function __construct(protected CourseRegistrationService $courseRegistrationService){}
13+
14+
public function index()
15+
{
16+
17+
}
18+
19+
public function store(Request $request, $courseId, User $user): CourseRegistrationResource
20+
{
21+
return new CourseRegistrationResource($this->courseRegistrationService->create($courseId, $user));
22+
23+
}
24+
25+
public function update(Request $request, $registrationId)
26+
{
27+
28+
}
29+
30+
}
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\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\JsonResource;
7+
8+
class CourseRegistrationResource 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 parent::toArray($request);
18+
}
19+
}

app/Models/Course.php

Lines changed: 6 additions & 0 deletions
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\HasMany;
1011

1112
/**
1213
* @property int $id
@@ -41,4 +42,9 @@ public function category(): BelongsTo
4142
{
4243
return $this->belongsTo(Category::class);
4344
}
45+
46+
public function courseRegistrations(): HasMany
47+
{
48+
return $this->hasMany(CourseRegistration::class);
49+
}
4450
}

app/Models/CourseRegistration.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use App\Enums\RegistrationStatus;
6+
use Illuminate\Database\Eloquent\Model;
7+
8+
class CourseRegistration extends Model
9+
{
10+
protected $fillable = [
11+
'course_id',
12+
'user_id',
13+
'status',
14+
];
15+
16+
protected $casts = [
17+
'status' => RegistrationStatus::class,
18+
];
19+
20+
public function user(){
21+
return $this->belongsTo(User::class);
22+
}
23+
24+
public function course(){
25+
return $this->belongsTo(Course::class);
26+
}
27+
}

app/Models/User.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// use Illuminate\Contracts\Auth\MustVerifyEmail;
66
use Database\Factories\UserFactory;
77
use Illuminate\Database\Eloquent\Factories\HasFactory;
8+
use Illuminate\Database\Eloquent\Relations\HasMany;
89
use Illuminate\Database\Eloquent\Relations\HasOne;
910
use Illuminate\Foundation\Auth\User as Authenticatable;
1011
use Illuminate\Notifications\Notifiable;
@@ -61,4 +62,9 @@ public function creditCard(): HasOne
6162
{
6263
return $this->hasOne(CreditCard::class);
6364
}
65+
66+
public function courseRegistrations(): HasMany
67+
{
68+
return $this->hasMany(CourseRegistration::class);
69+
}
6470
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace App\Services;
4+
5+
use App\Enums\RegistrationStatus;
6+
use App\Models\CourseRegistration;
7+
use App\Models\User;
8+
9+
class CourseRegistrationService
10+
{
11+
public function store($courseId, User $user): CourseRegistration
12+
{
13+
$registration = CourseRegistration::create([
14+
'course_id' => $courseId,
15+
'user_id' => $user->id(),
16+
'status' => RegistrationStatus::Pending,
17+
]);
18+
return $registration;
19+
}
20+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
Schema::create('course_registrations', function (Blueprint $table) {
15+
$table->id();
16+
$table->foreignId('course_id')->constrained();
17+
$table->foreignId('user_id')->constrained();
18+
$table->string('status', 10);
19+
$table->timestamps();
20+
});
21+
}
22+
23+
/**
24+
* Reverse the migrations.
25+
*/
26+
public function down(): void
27+
{
28+
Schema::dropIfExists('course_registrations');
29+
}
30+
};

0 commit comments

Comments
 (0)