ScheduleController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\ScheduleRequest;
  4. use App\Http\Resources\ScheduleResource;
  5. use App\Services\ScheduleCartService;
  6. use App\Services\ScheduleService;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. class ScheduleController extends Controller
  10. {
  11. protected $scheduleService;
  12. public function __construct(ScheduleService $scheduleService)
  13. {
  14. $this->scheduleService = $scheduleService;
  15. }
  16. public function index(): JsonResponse
  17. {
  18. $schedules = $this->scheduleService->getAll();
  19. return $this->successResponse(
  20. ScheduleResource::collection($schedules),
  21. );
  22. }
  23. public function store(ScheduleRequest $request): JsonResponse
  24. {
  25. try {
  26. $validated = $request->validated();
  27. $schedules = $this->scheduleService->createSingleOrMultiple($validated, $validated['schedules']);
  28. return $this->successResponse(
  29. payload: ScheduleResource::collection($schedules),
  30. message: count($schedules).' '.__('schedules.schedules_created'),
  31. code: 201,
  32. );
  33. } catch (\Exception $e) {
  34. return $this->errorResponse($e->getMessage(), 422);
  35. }
  36. }
  37. public function show(string $id): JsonResponse
  38. {
  39. $schedule = $this->scheduleService->getById($id);
  40. return $this->successResponse(
  41. new ScheduleResource($schedule),
  42. );
  43. }
  44. public function update(ScheduleRequest $request, string $id): JsonResponse
  45. {
  46. try {
  47. $schedule = $this->scheduleService->update($id, $request->validated());
  48. return $this->successResponse(
  49. payload: new ScheduleResource($schedule),
  50. message: __('messages.updated'),
  51. );
  52. } catch (\Exception $e) {
  53. return $this->errorResponse($e->getMessage(), 422);
  54. }
  55. }
  56. public function destroy(string $id): JsonResponse
  57. {
  58. $this->scheduleService->delete($id);
  59. return $this->successResponse(
  60. message: __('messages.deleted'),
  61. code: 204,
  62. );
  63. }
  64. //
  65. public function finished(): JsonResponse
  66. {
  67. $schedules = $this->scheduleService->getFinished();
  68. return $this->successResponse(
  69. ScheduleResource::collection($schedules),
  70. );
  71. }
  72. public function groupedByClient(): JsonResponse
  73. {
  74. $grouped = $this->scheduleService->getSchedulesDefaultGroupedByClient();
  75. return $this->successResponse($grouped);
  76. }
  77. public function updateStatus(string $id, ScheduleRequest $request): JsonResponse
  78. {
  79. try {
  80. $validated = $request->validate([
  81. 'status' => 'required|in:pending,accepted,rejected,paid,cancelled,started,finished',
  82. ]);
  83. $schedule = $this->scheduleService->updateStatus($id, $validated['status']);
  84. return $this->successResponse(
  85. payload: new ScheduleResource($schedule),
  86. message: __('messages.updated'),
  87. );
  88. } catch (\Exception $e) {
  89. return $this->errorResponse($e->getMessage(), 422);
  90. }
  91. }
  92. //
  93. public function cancelWithReason(string $id, Request $request): JsonResponse
  94. {
  95. try {
  96. $validated = $request->validate([
  97. 'cancel_text' => 'required|string|min:5|max:1000',
  98. ]);
  99. $schedule = $this->scheduleService->cancelWithReason((int) $id, $validated['cancel_text']);
  100. return $this->successResponse(
  101. payload: new ScheduleResource($schedule),
  102. message: __('messages.updated'),
  103. );
  104. } catch (\Exception $e) {
  105. return $this->errorResponse($e->getMessage(), 422);
  106. }
  107. }
  108. public function clientProviderBlocks(Request $request): JsonResponse
  109. {
  110. $validated = $request->validate([
  111. 'client_id' => 'required|integer|exists:clients,id',
  112. 'provider_id' => 'required|integer|exists:providers,id',
  113. ]);
  114. $blocks = $this->scheduleService->getClientProviderBlocks(
  115. (int) $validated['client_id'],
  116. (int) $validated['provider_id'],
  117. );
  118. return $this->successResponse(payload: $blocks);
  119. }
  120. public function storeCart(ScheduleRequest $request, ScheduleCartService $cartService): JsonResponse
  121. {
  122. try {
  123. $schedules = $cartService->create($request->validated());
  124. return $this->successResponse(
  125. payload: ScheduleResource::collection($schedules),
  126. message: count($schedules).' '.__('schedules.schedules_created'),
  127. code: 201,
  128. );
  129. } catch (\Exception $e) {
  130. return $this->errorResponse($e->getMessage(), 422);
  131. }
  132. }
  133. }