ScheduleController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. use Illuminate\Support\Facades\Request;
  8. class ScheduleController extends Controller
  9. {
  10. protected $scheduleService;
  11. public function __construct(ScheduleService $scheduleService)
  12. {
  13. $this->scheduleService = $scheduleService;
  14. }
  15. public function index(): JsonResponse
  16. {
  17. $schedules = $this->scheduleService->getAll();
  18. return $this->successResponse(
  19. ScheduleResource::collection($schedules),
  20. );
  21. }
  22. public function store(ScheduleRequest $request): JsonResponse
  23. {
  24. try {
  25. $validated = $request->validated();
  26. if (isset($validated['schedules']) && is_array($validated['schedules']) && count($validated['schedules']) > 0) {
  27. $baseData = [
  28. 'client_id' => $validated['client_id'],
  29. 'provider_id' => $validated['provider_id'],
  30. 'address_id' => $validated['address_id'],
  31. 'schedule_type' => $validated['schedule_type'] ?? 'default',
  32. 'status' => $validated['status'] ?? 'pending',
  33. ];
  34. $schedules = $this->scheduleService->createMultiple($baseData, $validated['schedules']);
  35. return $this->successResponse(
  36. payload: ScheduleResource::collection($schedules),
  37. message: count($schedules) . " " . __("schedules.schedules_created"),
  38. code: 201,
  39. );
  40. }
  41. $schedule = $this->scheduleService->create($validated);
  42. return $this->successResponse(
  43. payload: new ScheduleResource($schedule),
  44. message: __("messages.created"),
  45. code: 201,
  46. );
  47. } catch (\Exception $e) {
  48. return $this->errorResponse($e->getMessage(), 422);
  49. }
  50. }
  51. public function show(string $id): JsonResponse
  52. {
  53. $schedule = $this->scheduleService->getById($id);
  54. return $this->successResponse(
  55. new ScheduleResource($schedule),
  56. );
  57. }
  58. public function update(ScheduleRequest $request, string $id): JsonResponse
  59. {
  60. try {
  61. $schedule = $this->scheduleService->update($id, $request->validated());
  62. return $this->successResponse(
  63. payload: new ScheduleResource($schedule),
  64. message: __("messages.updated"),
  65. );
  66. } catch (\Exception $e) {
  67. return $this->errorResponse($e->getMessage(), 422);
  68. }
  69. }
  70. public function destroy(string $id): JsonResponse
  71. {
  72. $this->scheduleService->delete($id);
  73. return $this->successResponse(
  74. message: __("messages.deleted"),
  75. code: 204,
  76. );
  77. }
  78. public function groupedByClient(): JsonResponse
  79. {
  80. $grouped = $this->scheduleService->getGroupedByClient();
  81. return $this->successResponse($grouped);
  82. }
  83. public function updateStatus(string $id, ScheduleRequest $request): JsonResponse
  84. {
  85. try {
  86. $validated = $request->validate([
  87. 'status' => 'required|in:pending,accepted,rejected,paid,cancelled,started,finished'
  88. ]);
  89. $schedule = $this->scheduleService->updateStatus($id, $validated['status']);
  90. return $this->successResponse(
  91. payload: new ScheduleResource($schedule),
  92. message: __("messages.updated"),
  93. );
  94. } catch (\Exception $e) {
  95. return $this->errorResponse($e->getMessage(), 422);
  96. }
  97. }
  98. }