Выполнение DRY на практике

165
24 ноября 2018, 14:30

Всем привет. Пишу на laravel. Есть 2 метода в контроллере UserController:

/*
*@param EditUserRequest $request
*@return view
*Изменяет данные и роль пользователя.
*/
public function edit(EditUserRequest $request)
{
        $user = User::find($request->user_id);
        $user->name = $request->name;
        $user->surname = $request->surname;
        $user->phone = $request->phone;
        $user->email = $request->email;
        if($request->role_id == 3) {
            $user->manager_id = $request->manager_id;
        } else {
            $user->manager_id = null;
        }
        $user->save();
        $user->syncRoles([$request->role_id]);
        return redirect()->route('users.index')->with('success', 'Пользователь изменен.');
}
/*
*@param ConrirmUserRequest $request    
*@return view
*Подтверждает пользователя и назначает ему роль, которую отправил админ
*/
public function confirm(ConfirmUserRequest $request)
{
        $user = User::find($request->user_id);
        if (!$user->notActivated()) {
            return redirect()->back()->with('error', 'Пользователь уже подтвержден');
        }
        $user->is_activated = 1;
        if($request->role_id == 3) {
            $user->manager_id = $request->manager_id;
        } else {
            $user->manager_id = null;
        }
        $user->save();
        $user->assignRole($request->role_id);
        return redirect()->route('users.index')->with('success', 'Пользователь подтвержден.');
 }

В обоих методах есть код, который повторяется. К примеру, проверка пользователя, равняется ли id его роли 3:

if($request->role_id == 3) {
            $user->manager_id = $request->manager_id;
        } else {
            $user->manager_id = null;
        }

А также место, где проверяется, подтвержден ли данный пользователь на данный момент:

if (!$user->notActivated()) {
            return redirect()->back()->with('error', 'Пользователь уже подтвержден');
        }

Понимаю, что на этом полностью нарушаю DRY и зону ответственности контроллера. Поэтому хочу узнать у более опытных людей, куда выносить данные методы? К примеру, метод проверки role == 3 не может быть вынесен в данном случае в модель, поскольку данные зависят от $request, а не от модели.

READ ALSO
Как отправить oAuth данные клиента server и получить информацию из google analytics?

Как отправить oAuth данные клиента server и получить информацию из google analytics?

Нужно использовать Google analytics api , возникла необходимость сохранить данные пользователя , и предоставить доступ к данным другому пользователю,

148