seperating request validation from controller

pull/19/head
asifmuztaba1 4 years ago
parent 21e119134a
commit fc2c92a6a7

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Http\Requests\RoleRequest;
use App\Models\Role;
use Illuminate\Http\Request;
@ -21,18 +22,13 @@ class RoleController extends Controller {
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$data = $request->validate([
'name' => 'required',
'slug' => 'required',
]);
$existing = Role::where('slug', $data['slug'])->first();
public function store(RoleRequest $request) {
$existing = Role::where('slug', $request->slug)->first();
if (! $existing) {
$role = Role::create([
'name' => $data['name'],
'slug' => $data['slug'],
'name' => $request->name,
'slug' => $request->slug,
]);
return $role;
@ -45,7 +41,7 @@ class RoleController extends Controller {
* Display the specified resource.
*
* @param \App\Models\Role $role
* @return \App\Models\Role $role
* @return \Illuminate\Http\Response
*/
public function show(Role $role) {
return $role;
@ -56,7 +52,7 @@ class RoleController extends Controller {
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Role $role
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|Role
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Role $role = null) {
if (! $role) {

@ -2,9 +2,12 @@
namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
use App\Models\Role;
use App\Models\User;
use App\Models\UserRole;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash;
use Laravel\Sanctum\Exceptions\MissingAbilityException;
@ -12,38 +15,35 @@ class UserController extends Controller {
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function index() {
//
return User::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @param UserRequest $request
* @return Response
*/
public function store(Request $request) {
$creds = $request->validate([
'email' => 'required|email',
'password' => 'required',
'name' => 'nullable|string',
]);
$user = User::where('email', $creds['email'])->first();
public function store(UserRequest $request) {
$user = User::where('email', $request->email)->first();
if ($user) {
return response(['error' => 1, 'message' => 'user already exists'], 409);
}
$user = User::create([
'email' => $creds['email'],
'password' => Hash::make($creds['password']),
'name' => $creds['name'],
'email' => $request->email,
'password' => Hash::make($request->password),
'name' => $request->name,
]);
$defaultRoleSlug = config('hydra.default_user_role_slug', 'user');
$user->roles()->attach(Role::where('slug', $defaultRoleSlug)->first());
UserRole::create([
'user_id' => $user->id,
'role_id' => config('hydra.default_user_role_id', 2),
]);
return $user;
}
@ -51,16 +51,11 @@ class UserController extends Controller {
/**
* Authenticate an user and dispatch token.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @param UserRequest $request
* @return Response
*/
public function login(Request $request) {
$creds = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $creds['email'])->first();
public function login(UserRequest $request) {
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
return response(['error' => 1, 'message' => 'invalid credentials'], 401);
}
@ -79,8 +74,8 @@ class UserController extends Controller {
/**
* Display the specified resource.
*
* @param \App\Models\User $user
* @return \App\Models\User $user
* @param User $user
* @return User
*/
public function show(User $user) {
return $user;
@ -89,13 +84,11 @@ class UserController extends Controller {
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @param Request $request
* @param User $user
* @return User
*
* @throws MissingAbilityException
*/
public function update(Request $request, User $user) {
public function update(UserRequest $request, User $user) {
$user->name = $request->name ?? $user->name;
$user->email = $request->email ?? $user->email;
$user->password = $request->password ? Hash::make($request->password) : $user->password;
@ -118,8 +111,8 @@ class UserController extends Controller {
/**
* Remove the specified resource from storage.
*
* @param \App\Models\User $user
* @return \Illuminate\Http\Response
* @param User $user
* @return Response
*/
public function destroy(User $user) {
$adminRole = Role::where('slug', 'admin')->first();
@ -138,12 +131,6 @@ class UserController extends Controller {
return response(['error' => 0, 'message' => 'user deleted']);
}
/**
* Return Auth user
*
* @param Request $request
* @return mixed
*/
public function me(Request $request) {
return $request->user();
}

@ -2,16 +2,16 @@
namespace App\Http\Controllers;
use App\Http\Requests\UserRoleRequest;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
class UserRoleController extends Controller {
/**
* Display a listing of the resource.
*
* @param \App\Models\User $user
* @return \App\Models\User $user
* @return \Illuminate\Http\Response
*/
public function index(User $user) {
return $user->load('roles');
@ -22,14 +22,11 @@ class UserRoleController extends Controller {
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @return \App\Models\User $user
* @return \Illuminate\Http\Response
*/
public function store(Request $request, User $user) {
$data = $request->validate([
'role_id' => 'required|integer',
]);
$role = Role::find($data['role_id']);
if (! $user->roles()->find($data['role_id'])) {
public function store(UserRoleRequest $request, User $user) {
$role = Role::find($request->role_id);
if (! $user->roles()->find($request->role_id)) {
$user->roles()->attach($role);
}
@ -41,7 +38,7 @@ class UserRoleController extends Controller {
*
* @param \App\Models\User $user
* @param \App\Models\Role $role
* @return \App\Models\User $user
* @return \Illuminate\Http\Response
*/
public function destroy(User $user, Role $role) {
$user->roles()->detach($role);

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RoleRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
return auth('sanctum')->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
if ($this->isMethod('PUT')) {
return [];
}
return [
'name' => 'required',
'slug' => 'required',
];
}
}

@ -0,0 +1,45 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
if ($this->isMethod('PUT')) {
var_dump($this->isMethod('PUT'));
return auth('sanctum')->check();
}
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
if ($this->isMethod('PUT')) {
return [];
}
if ($this->path() == 'api/login') {
return [
'email' => 'required|email',
'password' => 'required',
];
}
return [
'email' => 'required|email',
'password' => 'required',
'name' => 'nullable|string',
];
}
}

@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRoleRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
return auth('sanctum')->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
return [
'role_id' => 'required|integer',
];
}
}
Loading…
Cancel
Save