ScheduleController.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\ScheduleRequest;
  4. use App\Http\Resources\ScheduleResource;
  5. use App\Services\ScheduleService;
  6. use Illuminate\Http\JsonResponse;
  7. class ScheduleController extends Controller
  8. {
  9. protected $scheduleService;
  10. public function __construct(ScheduleService $scheduleService)
  11. {
  12. $this->scheduleService = $scheduleService;
  13. }
  14. public function index(): JsonResponse
  15. {
  16. $schedules = $this->scheduleService->getAll();
  17. return $this->successResponse(
  18. ScheduleResource::collection($schedules),
  19. );
  20. }
  21. public function store(ScheduleRequest $request): JsonResponse
  22. {
  23. try {
  24. $validated = $request->validated();
  25. if (isset($validated['schedules']) && is_array($validated['schedules']) && count($validated['schedules']) > 0) {
  26. $baseData = [
  27. 'client_id' => $validated['client_id'],
  28. 'provider_id' => $validated['provider_id'],
  29. 'address_id' => $validated['address_id'],
  30. 'schedule_type' => $validated['schedule_type'] ?? 'default',
  31. 'status' => $validated['status'] ?? 'pending',
  32. ];
  33. $schedules = $this->scheduleService->createMultiple($baseData, $validated['schedules']);
  34. return $this->successResponse(
  35. payload: ScheduleResource::collection($schedules),
  36. message: count($schedules) . " " . __("schedules.schedules_created"),
  37. code: 201,
  38. );
  39. }
  40. $schedule = $this->scheduleService->create($validated);
  41. return $this->successResponse(
  42. payload: new ScheduleResource($schedule),
  43. message: __("messages.created"),
  44. code: 201,
  45. );
  46. } catch (\Exception $e) {
  47. return $this->errorResponse($e->getMessage(), 422);
  48. }
  49. }
  50. public function show(string $id): JsonResponse
  51. {
  52. $schedule = $this->scheduleService->getById($id);
  53. return $this->successResponse(
  54. new ScheduleResource($schedule),
  55. );
  56. }
  57. public function update(ScheduleRequest $request, string $id): JsonResponse
  58. {
  59. try {
  60. $schedule = $this->scheduleService->update($id, $request->validated());
  61. return $this->successResponse(
  62. payload: new ScheduleResource($schedule),
  63. message: __("messages.updated"),
  64. );
  65. } catch (\Exception $e) {
  66. return $this->errorResponse($e->getMessage(), 422);
  67. }
  68. }
  69. public function destroy(string $id): JsonResponse
  70. {
  71. $this->scheduleService->delete($id);
  72. return $this->successResponse(
  73. message: __("messages.deleted"),
  74. code: 204,
  75. );
  76. }
  77. }