ScheduleController.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 updateStatus(string $id, ScheduleRequest $request): JsonResponse
  69. {
  70. try {
  71. $validated = $request->validate([
  72. 'status' => 'required|in:pending,accepted,rejected,paid,cancelled,started,finished'
  73. ]);
  74. $schedule = $this->scheduleService->updateStatus($id, $validated['status']);
  75. return $this->successResponse(
  76. payload: new ScheduleResource($schedule),
  77. message: __("messages.updated"),
  78. );
  79. } catch (\Exception $e) {
  80. return $this->errorResponse($e->getMessage(), 422);
  81. }
  82. }
  83. }