service->authUser(); return $this->successResponse(payload: new UserResource($user)); } public function index(): JsonResponse { $items = $this->service->getAll(); return $this->successResponse( payload: UserResource::collection($items), ); } public function store(UserRequest $request): JsonResponse { $item = $this->service->create($request->validated()); return $this->successResponse( payload: new UserResource($item), message: __("messages.created"), code: 201, ); } public function show(int $id): JsonResponse { $item = $this->service->findById($id); return $this->successResponse(payload: new UserResource($item)); } public function update(UserRequest $request, int $id): JsonResponse { $item = $this->service->update($id, $request->validated()); return $this->successResponse( payload: new UserResource($item), message: __("messages.updated"), ); } public function destroy(int $id): JsonResponse { $this->service->delete($id); return $this->successResponse( message: __("messages.deleted"), code: 204, ); } public function indexPaginated(Request $request): JsonResponse { $filters = $request->only(['type', 'status', 'search']); $perPage = min((int) $request->get('per_page', 10), 100); $paginator = $this->service->getAllPaginated($filters, $perPage); return $this->successResponse(payload: [ 'data' => UserResource::collection($paginator->items()), 'total' => $paginator->total(), 'from' => $paginator->firstItem() ?? 0, 'to' => $paginator->lastItem() ?? 0, ]); } public function getUserTypes(): JsonResponse { $user_types = $this->service->getUserTypes(); return $this->successResponse( payload: new UserTypeResource($user_types), ); } public function uploadAvatar(Request $request): JsonResponse { $request->validate(['photo' => 'required|image|max:5120']); $user = Auth::user(); $this->mediaService->uploadUserAvatar($request->file('photo'), $user); return $this->successResponse( payload: new UserResource($user->fresh()), message: __("messages.updated"), ); } public function deleteAvatar(): JsonResponse { $user = Auth::user(); $this->mediaService->deleteUserAvatar($user); return $this->successResponse( payload: new UserResource($user->fresh()), message: __("messages.updated"), ); } }