<?php namespace App\Http\Controllers\Api\V1; use App\Http\Controllers\Api\ApiController; use App\Http\Resources\User\UserResource; use App\Http\Resources\User\UserShowPermissionsResource; use App\Http\Resources\User\UserShowResource; use App\Repositories\User\Interfaces\UserInterface; use App\Responses\ResponseDto; use Illuminate\Http\Request; class UserController extends ApiController { private $userRepository; public function __construct(UserInterface $user) { $this->userRepository = $user; } public function index(Request $request) { $activeUsers = $this->userRepository->index('active',$request); $blockedUsers = $this->userRepository->index('blocked',$request); $totalActiveUsers = $activeUsers->count(); $totalBlockedUsers = $blockedUsers->count(); return new ResponseDto( data: [ 'active' => [ 'count' => $totalActiveUsers, 'users' => UserResource::collection($activeUsers), ], 'blocked' => [ 'count' => $totalBlockedUsers, 'users' => UserResource::collection($blockedUsers), ], ], status: true ); } public function update(Request $request, $userId) { return $this->userRepository->update($request->toArray(), $userId); } public function show($userId) { return new UserShowResource($this->userRepository->show((int)$userId)); } public function store(Request $request) { $image = $request->file('image'); return $this->userRepository->store($request->toArray(), $image); } public function blocked($userId, Request $request) { $type = $request->boolean('type'); return $this->userRepository->blocked($userId, $type); } public function destroy($userId) { return $this->userRepository->destroy($userId); } public function showPermissions($userId, $modelId) { return new UserShowPermissionsResource($this->userRepository->showPermissions($userId, $modelId)); } }