* * @version 1.0.0 */ class UserController extends Controller implements HasMiddleware { /** * Middleware */ public static function middleware(): array { return [ self::can('users.index', ['index']), self::can('users.destroy', ['destroy']), ]; } /** * Listar */ public function index() { $users = User::whereDoesntHave('roles', function ($query) { $query->where('name', 'developer'); })->orderBy('name'); QuerySupport::queryByKeys($users, ['name', 'username']); return ApiResponse::OK->response([ 'users' => $users->select([ 'id', 'name', 'paternal', 'maternal', 'username', 'module_id', 'deleted_at' ])->paginate(config('app.pagination')) ]); } /** * Almacenar */ public function store(UserStoreRequest $request) { $user = User::create($request->all()); if ($request->has('roles')) { $user->roles()->sync($request->roles); } return ApiResponse::OK->response([ 'message' => 'Usuario actualizado exitosamente', 'user' => $user->load(['module', 'roles']), ]); } /** * Mostrar */ public function show(User $user) { return ApiResponse::OK->response([ 'user' => $user ]); } /** * Actualizar */ public function update(UserUpdateRequest $request, User $user) { $user->update($request->all()); if ($request->has('roles')) { $user->roles()->sync($request->roles); } return ApiResponse::OK->response([ 'message' => 'Usuario actualizado exitosamente', 'user' => $user->load(['module', 'roles']), ]); } /** * Eliminar */ public function destroy(User $user) { $user->delete(); return ApiResponse::OK->response(); } /** * Permisos del usuario */ public function permissions(User $user) { return ApiResponse::OK->response([ 'permissions' => $user->getAllPermissions() ]); } /** * Roles del usuario */ public function roles(User $user) { return ApiResponse::OK->response([ 'roles' => $user ->roles() ->select('id', 'name', 'description') ->get() ]); } /** * Actualizar roles */ public function updateRoles(Request $request, User $user) { if ($request->has('roles')) { $user->roles()->sync($request->roles); } return ApiResponse::OK->response(); } /** * Actualizar contraseña */ public function updatePassword(PasswordUpdateRequest $request, User $user) { $user->update([ 'password' => bcrypt($request->password) ]); return ApiResponse::OK->response(); } /** * Actividades del usuario */ public function activity(UserActivityRequest $request, User $user) { $filters = $request->all(); $model = $user->events() ->with('user:id,name,paternal,maternal,profile_photo_path'); if($filters['search']){ $model->where('event', 'like', '%'.$filters['search'].'%'); } if($filters['start_date']){ $model->where('created_at', '>=', "{$filters['start_date']} 00:00:00"); } if($filters['end_date']){ $model->where('created_at', '<=', "{$filters['end_date']} 23:59:59"); } return ApiResponse::OK->response([ 'models' => $model->orderBy('created_at', 'desc') ->paginate(config('app.pagination')) ]); } }