Skip to content

Commit aadd261

Browse files
authored
Merge pull request #17 from skni-kod/feat/events
Feat/events
2 parents b25f05f + e4cc27e commit aadd261

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1153
-2
lines changed

app/Enums/EventsEnum.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace App\Enums;
4+
5+
enum EventsEnum: string
6+
{
7+
case PENDING = 'pending';
8+
case ACCEPTED = 'accepted';
9+
case REJECTED = 'rejected';
10+
11+
public static function values(): array
12+
{
13+
return array_column(self::cases(), 'value');
14+
}
15+
}

app/Enums/StatusEnum.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace App\Enums;
4+
5+
enum StatusEnum: string
6+
{
7+
case AVAILABLE = 'available';
8+
case BOOKED = 'booked';
9+
10+
public static function values(): array
11+
{
12+
return array_column(self::cases(), 'value');
13+
}
14+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\AdminEventResource;
6+
use App\Models\Event;
7+
use App\Services\AdminEventService;
8+
use Symfony\Component\HttpFoundation\Response;
9+
10+
class AdminEventController extends Controller
11+
{
12+
public function __construct(protected AdminEventService $eventService) {}
13+
14+
public function getPendingEvents()
15+
{
16+
return AdminEventResource::collection($this->eventService->getPendingEvents());
17+
}
18+
19+
public function acceptEvent(Event $event)
20+
{
21+
$this->eventService->acceptEvent($event);
22+
23+
// return new AdminEventResource($event);
24+
return response()->json(['message' => 'Event accepted'], Response::HTTP_OK);
25+
}
26+
27+
public function rejectEvent(Event $event)
28+
{
29+
$this->eventService->rejectEvent($event);
30+
31+
// return new AdminEventResource($event);
32+
return response()->json(['message' => 'Event rejected'], Response::HTTP_OK);
33+
}
34+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\InstructorAvailabilityCollection;
6+
use App\Services\InstructorAvailabilityService;
7+
use Illuminate\Http\Request;
8+
9+
class DriverAvailabilityController extends Controller
10+
{
11+
public function __construct(protected InstructorAvailabilityService $availabilityService) {}
12+
13+
public function index(Request $request)
14+
{
15+
$driver = $request->user();
16+
$instructorId = $driver->instructor_id;
17+
18+
return new InstructorAvailabilityCollection($this->availabilityService->getInstructorAvailabilities($instructorId));
19+
}
20+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Requests\StoreDriverEventRequest;
6+
use App\Http\Resources\DriverEventResource;
7+
use App\Services\DriverEventService;
8+
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
9+
use Illuminate\Http\Request;
10+
11+
class DriverEventController extends Controller
12+
{
13+
use AuthorizesRequests;
14+
15+
public function __construct(protected DriverEventService $driverEventService) {}
16+
17+
public function index(Request $request)
18+
{
19+
$driver = $request->user();
20+
$events = $driver->events;
21+
22+
return DriverEventResource::collection($events);
23+
}
24+
25+
public function store(StoreDriverEventRequest $request)
26+
{
27+
$driver = $request->user();
28+
$eventData = $request->validated();
29+
30+
return new DriverEventResource($this->driverEventService->createEvent($driver, $eventData));
31+
}
32+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Requests\StoreInstructorAvailabilityRequest;
6+
use App\Http\Resources\InstructorAvailabilityCollection;
7+
use App\Http\Resources\InstructorStoreAvailabilityResource;
8+
use App\Models\InstructorAvailability;
9+
use App\Services\InstructorAvailabilityService;
10+
use Exception;
11+
use Illuminate\Http\Request;
12+
13+
class InstructorAvailabilityController extends Controller
14+
{
15+
public function __construct(protected InstructorAvailabilityService $availabilityService) {}
16+
17+
public function index(Request $request): InstructorAvailabilityCollection
18+
{
19+
$instructorId = $request->user()->id;
20+
$availabilities = InstructorAvailability::where('instructor_id', $instructorId)->get();
21+
22+
return new InstructorAvailabilityCollection($availabilities);
23+
}
24+
25+
/**
26+
* @throws Exception
27+
*/
28+
public function store(StoreInstructorAvailabilityRequest $request): InstructorStoreAvailabilityResource
29+
{
30+
$validated = $request->validated();
31+
32+
return new InstructorStoreAvailabilityResource($this->availabilityService->storeAvailability(
33+
$validated['availability']
34+
));
35+
}
36+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\DriverResource;
6+
use Illuminate\Http\Request;
7+
8+
class InstructorDriverController extends Controller
9+
{
10+
/**
11+
* Display a listing of the instructor's drivers.
12+
*/
13+
public function index(Request $request)
14+
{
15+
$instructor = $request->user();
16+
$drivers = $instructor->instructorStudents()->get();
17+
18+
return DriverResource::collection($drivers);
19+
}
20+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Requests\StoreInstructorEventRequest;
6+
use App\Http\Requests\UpdateInstructorEventRequest;
7+
use App\Http\Resources\InstructorEventResource;
8+
use App\Models\Event;
9+
use App\Services\InstructorEventService;
10+
use Exception;
11+
use Illuminate\Http\Request;
12+
13+
class InstructorEventController extends Controller
14+
{
15+
public function __construct(protected InstructorEventService $eventService) {}
16+
17+
/**
18+
* Display a listing of the resource.
19+
*/
20+
public function index(Request $request)
21+
{
22+
$instructor = $request->user();
23+
$events = $this->eventService->getInstructorEvents($instructor);
24+
25+
return InstructorEventResource::collection($events);
26+
}
27+
28+
/**
29+
* Store a newly created resource in storage.
30+
*/
31+
public function store(StoreInstructorEventRequest $request)
32+
{
33+
$instructor = $request->user();
34+
$eventDetails = $request->getEventDetails();
35+
$driverId = $request->validated('driver_id');
36+
37+
return new InstructorEventResource($this->eventService->createEvent($instructor, $eventDetails, $driverId));
38+
}
39+
40+
/**
41+
* Update the specified resource in storage.
42+
*/
43+
public function update(UpdateInstructorEventRequest $request, Event $event)
44+
{
45+
$eventDetails = $request->getEventDetails();
46+
47+
return new InstructorEventResource($this->eventService->updateEvent($event, $eventDetails));
48+
}
49+
50+
/**
51+
* Remove the specified resource from storage.
52+
*
53+
* @throws Exception
54+
*/
55+
public function destroy(Request $request, Event $event)
56+
{
57+
$this->eventService->deleteEvent($request->user(), $event);
58+
59+
return response()->noContent();
60+
}
61+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use App\Rules\AvailableTimeSlot;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
8+
class StoreDriverEventRequest extends FormRequest
9+
{
10+
public function authorize(): bool
11+
{
12+
return true;
13+
}
14+
15+
public function rules(): array
16+
{
17+
$instructorId = $this->user()->instructor_id;
18+
19+
return [
20+
'start' => ['required', 'date', 'after_or_equal:now', new AvailableTimeSlot($instructorId)],
21+
'end' => 'required|date|after:start',
22+
'title' => 'required|string|max:255',
23+
];
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class StoreInstructorAvailabilityRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*/
12+
public function authorize(): bool
13+
{
14+
return true;
15+
}
16+
17+
public function rules(): array
18+
{
19+
return [
20+
'availability' => 'required|array|min:1', //min 1 time slot
21+
'availability.*.start_time' => 'required|date|after:now',
22+
'availability.*.end_time' => 'required|date|after:availability.*.start_time',
23+
];
24+
}
25+
}

0 commit comments

Comments
 (0)