ScheduleController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. $schedules = $this->scheduleService->createSingleOrMultiple($validated, $validated['schedules']);
  27. return $this->successResponse(
  28. payload: ScheduleResource::collection($schedules),
  29. message: count($schedules) . " " . __("schedules.schedules_created"),
  30. code: 201,
  31. );
  32. } catch (\Exception $e) {
  33. return $this->errorResponse($e->getMessage(), 422);
  34. }
  35. }
  36. public function show(string $id): JsonResponse
  37. {
  38. $schedule = $this->scheduleService->getById($id);
  39. return $this->successResponse(
  40. new ScheduleResource($schedule),
  41. );
  42. }
  43. public function update(ScheduleRequest $request, string $id): JsonResponse
  44. {
  45. try {
  46. $schedule = $this->scheduleService->update($id, $request->validated());
  47. return $this->successResponse(
  48. payload: new ScheduleResource($schedule),
  49. message: __("messages.updated"),
  50. );
  51. } catch (\Exception $e) {
  52. return $this->errorResponse($e->getMessage(), 422);
  53. }
  54. }
  55. public function destroy(string $id): JsonResponse
  56. {
  57. $this->scheduleService->delete($id);
  58. return $this->successResponse(
  59. message: __("messages.deleted"),
  60. code: 204,
  61. );
  62. }
  63. public function groupedByClient(): JsonResponse
  64. {
  65. $grouped = $this->scheduleService->getSchedulesDefaultGroupedByClient();
  66. return $this->successResponse($grouped);
  67. }
  68. public function finished(): JsonResponse
  69. {
  70. $schedules = $this->scheduleService->getFinished();
  71. return $this->successResponse(
  72. ScheduleResource::collection($schedules),
  73. );
  74. }
  75. public function updateStatus(string $id, ScheduleRequest $request): JsonResponse
  76. {
  77. try {
  78. $validated = $request->validate([
  79. 'status' => 'required|in:pending,accepted,rejected,paid,cancelled,started,finished'
  80. ]);
  81. $schedule = $this->scheduleService->updateStatus($id, $validated['status']);
  82. return $this->successResponse(
  83. payload: new ScheduleResource($schedule),
  84. message: __("messages.updated"),
  85. );
  86. } catch (\Exception $e) {
  87. return $this->errorResponse($e->getMessage(), 422);
  88. }
  89. }
  90. }