fix bug api role
WMS API/ERP-API/pipeline/head This commit looks good Details

This commit is contained in:
Husnu Setiawan 2025-02-11 16:58:19 +07:00
parent 4da22a3fcd
commit 4ce31cd7ae
13 changed files with 62 additions and 67 deletions

View File

@ -6,14 +6,14 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Requests\Auth\Role\StoreRequest; use App\Http\Requests\Auth\Role\StoreRequest;
use App\Http\Resources\Auth\Role\ListResource as RowResource; use App\Http\Resources\Auth\Role\ListResource as RowResource;
use App\Repositories\Auth\UserRepository; use App\Repositories\Auth\RoleRepository;
class StoreController extends Controller class StoreController extends Controller
{ {
/** /**
* Handle the incoming request. * Handle the incoming request.
*/ */
public function __invoke(StoreRequest $request, UserRepository $repository) public function __invoke(StoreRequest $request, RoleRepository $repository)
{ {
$params = $request->validated(); $params = $request->validated();
$data = $repository->create($params); $data = $repository->create($params);

View File

@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Requests\Auth\Role\UpdateRequest; use App\Http\Requests\Auth\Role\UpdateRequest;
use App\Http\Resources\Auth\Role\ListResource as RowResource; use App\Http\Resources\Auth\Role\ListResource as RowResource;
use App\Repositories\Auth\UserRepository; use App\Repositories\Auth\RoleRepository;
use App\Models\Role; use App\Models\Role;
class UpdateController extends Controller class UpdateController extends Controller
@ -14,10 +14,10 @@ class UpdateController extends Controller
/** /**
* Handle the incoming request. * Handle the incoming request.
*/ */
public function __invoke(UpdateRequest $request, Role $user, UserRepository $repository) public function __invoke(UpdateRequest $request, Role $role, RoleRepository $repository)
{ {
$params = $request->validated(); $params = $request->validated();
$data = $repository->update($user, $params); $data = $repository->update($role, $params);
return RowResource::make($data); return RowResource::make($data);
} }
} }

View File

@ -11,7 +11,7 @@ class StoreRequest extends FormRequest
*/ */
public function authorize(): bool public function authorize(): bool
{ {
return auth()->user()->checkPermission("auth.user:create"); return auth()->user()->checkPermission("auth.role:create");
} }
/** /**
@ -23,9 +23,8 @@ class StoreRequest extends FormRequest
{ {
return [ return [
'name' => 'required|string', 'name' => 'required|string',
'email' => 'required|string', 'permissions' => 'nullable|array',
'role_ids' => 'nullable|array', 'permissions.*' => 'nullable|integer'
'role_ids.*' => 'nullable|integer'
]; ];
} }
} }

View File

@ -23,9 +23,8 @@ class UpdateRequest extends FormRequest
{ {
return [ return [
'name' => 'required|string', 'name' => 'required|string',
'email' => 'required|string', 'permissions' => 'nullable|array',
'role_ids' => 'nullable|array', 'permissions.*' => 'nullable|integer'
'role_ids.*' => 'nullable|integer'
]; ];
} }
} }

View File

@ -24,8 +24,8 @@ class StoreRequest extends FormRequest
return [ return [
'name' => 'required|string', 'name' => 'required|string',
'email' => 'required|string', 'email' => 'required|string',
'role_ids' => 'nullable|array', 'roles' => 'nullable|array',
'role_ids.*' => 'nullable|integer' 'roles.*' => 'nullable|integer'
]; ];
} }
} }

View File

@ -24,8 +24,8 @@ class UpdateRequest extends FormRequest
return [ return [
'name' => 'required|string', 'name' => 'required|string',
'email' => 'required|string', 'email' => 'required|string',
'role_ids' => 'nullable|array', 'roles' => 'nullable|array',
'role_ids.*' => 'nullable|integer' 'roles.*' => 'nullable|integer'
]; ];
} }
} }

View File

@ -8,6 +8,14 @@ use Illuminate\Database\Eloquent\Model;
class Role extends Model class Role extends Model
{ {
use HasFactory; use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
];
public function permissions(){ public function permissions(){
return $this->belongsToMany(Permission::class,"role_permission"); return $this->belongsToMany(Permission::class,"role_permission");

View File

@ -29,8 +29,8 @@ class RoleRepository
$params["password"] = "-"; $params["password"] = "-";
$model = Role::create($params); $model = Role::create($params);
if (@$params["role_ids"]){ if (@$params["permissions"]){
$model->roles()->sync($params["role_ids"]); $model->permissions()->sync($params["permissions"]);
} }
return $model; return $model;
} }
@ -38,8 +38,8 @@ class RoleRepository
public function update($model, $params){ public function update($model, $params){
$model->update($params); $model->update($params);
if (@$params["role_ids"]){ if (@$params["permissions"]){
$model->roles()->sync($params["role_ids"]); $model->permissions()->sync($params["permissions"]);
} }
return $model; return $model;
} }

View File

@ -29,8 +29,8 @@ class UserRepository
$params["password"] = "-"; $params["password"] = "-";
$user = User::create($params); $user = User::create($params);
if (@$params["role_ids"]){ if (@$params["roles"]){
$user->roles()->sync($params["role_ids"]); $user->roles()->sync($params["roles"]);
} }
return $user; return $user;
} }
@ -38,8 +38,8 @@ class UserRepository
public function update($user, $params){ public function update($user, $params){
$user->update($params); $user->update($params);
if (@$params["role_ids"]){ if (@$params["roles"]){
$user->roles()->sync($params["role_ids"]); $user->roles()->sync($params["roles"]);
} }
return $user; return $user;
} }

View File

@ -7,9 +7,9 @@ use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase; use Tests\TestCase;
use App\Models\Role; use App\Models\Role;
use App\Models\User;
use App\Models\Permission; use App\Models\Permission;
use App\Models\User;
use Laravel\Sanctum\Sanctum; use Laravel\Sanctum\Sanctum;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
@ -23,24 +23,23 @@ class StoreTest extends TestCase
*/ */
public function test_success(): void public function test_success(): void
{ {
$permission = Permission::where("code","auth.user:create")->first(); $permission = Permission::where("code","auth.role:create")->first();
$role = Role::factory()->create(); $role = Role::factory()->create();
$role->permissions()->attach($permission->id); $role->permissions()->attach($permission->id);
$user = User::factory()->create(); $user = User::factory()->create();
$user->roles()->attach($role->id); $user->roles()->attach($role->id);
Sanctum::actingAs($user); Sanctum::actingAs($user);
$response = $this->post('/auth/user/',[ $response = $this->post('/auth/role/',[
"name" => "new user", "name" => "new role"
"email" => "user@gmail.com"
]); ]);
$response->assertStatus(201); $response->assertStatus(201);
$response->assertJson([ $response->assertJson([
"data" => [ "data" => [
"name" => "new user", "name" => "new role"
"email" => "user@gmail.com"
] ]
]); ]);
} }
@ -51,9 +50,10 @@ class StoreTest extends TestCase
*/ */
public function test_with_roles_success(): void public function test_with_roles_success(): void
{ {
$permission = Permission::where("code","auth.user:create")->first(); $permission = Permission::where("code","auth.role:create")->first();
$role = Role::factory()->create(); $role = Role::factory()->create();
$role->permissions()->attach($permission->id); $role->permissions()->attach($permission->id);
$user = User::factory()->create(); $user = User::factory()->create();
$user->roles()->attach($role->id); $user->roles()->attach($role->id);
@ -62,23 +62,18 @@ class StoreTest extends TestCase
Sanctum::actingAs($user); Sanctum::actingAs($user);
$response = $this->post('/auth/user/',[ $response = $this->post('/auth/role/',[
"name" => "new user", "name" => "new role",
"email" => "user@gmail.com", "permissions" => [$permission->id]
"role_ids" => [$role->id, $role2->id]
]); ]);
$response->assertStatus(201); $response->assertStatus(201);
$response->assertJson([ $response->assertJson([
"data" => [ "data" => [
"name" => "new user", "name" => "new role",
"email" => "user@gmail.com", "permissions" => [
"roles" => [
[ [
"id" => $role->id "id" => $permission->id
],
[
"id" => $role2->id
], ],
] ]
] ]

View File

@ -23,7 +23,7 @@ class UpdateTest extends TestCase
*/ */
public function test_success(): void public function test_success(): void
{ {
$permission = Permission::where("code","auth.user:update")->first(); $permission = Permission::where("code","auth.role:update")->first();
$role = Role::factory()->create(); $role = Role::factory()->create();
$role->permissions()->attach($permission->id); $role->permissions()->attach($permission->id);
$user = User::factory()->create(); $user = User::factory()->create();
@ -31,18 +31,16 @@ class UpdateTest extends TestCase
Sanctum::actingAs($user); Sanctum::actingAs($user);
$data = User::factory()->create(); $data = Role::factory()->create();
$response = $this->post('/auth/user/'.$data->id,[ $response = $this->post('/auth/role/'.$data->id,[
"name" => "update user", "name" => "update role",
"email" => "user_update@gmail.com"
]); ]);
$response->assertStatus(200); $response->assertStatus(200);
$response->assertJson([ $response->assertJson([
"data" => [ "data" => [
"name" => "update user", "name" => "update role",
"email" => "user_update@gmail.com"
] ]
]); ]);
} }
@ -53,37 +51,33 @@ class UpdateTest extends TestCase
*/ */
public function test_with_roles_success(): void public function test_with_roles_success(): void
{ {
$permission = Permission::where("code","auth.user:update")->first(); $permission = Permission::where("code","auth.role:update")->first();
$role = Role::factory()->create(); $role = Role::factory()->create();
$role->permissions()->attach($permission->id); $role->permissions()->attach($permission->id);
$user = User::factory()->create(); $user = User::factory()->create();
$user->roles()->attach($role->id); $user->roles()->attach($role->id);
Sanctum::actingAs($user); Sanctum::actingAs($user);
$data = User::factory()->create(); $data = Role::factory()->create();
$role2 = Role::factory()->create(); $role2 = Role::factory()->create();
$response = $this->post('/auth/user/'.$data->id,[ $response = $this->post('/auth/role/'.$data->id,[
"name" => "update user", "name" => "update role",
"email" => "user_update@gmail.com", "permissions" => [
"role_ids" => [ $permission->id
$role->id, $role2->id
] ]
]); ]);
$response->assertStatus(200); $response->assertStatus(200);
$response->assertJson([ $response->assertJson([
"data" => [ "data" => [
"name" => "update user", "name" => "update role",
"email" => "user_update@gmail.com", "permissions" => [
"roles" => [
[ [
"id" => $role->id "id" => $permission->id
], ]
[
"id" => $role2->id
],
] ]
] ]
]); ]);

View File

@ -65,7 +65,7 @@ class StoreTest extends TestCase
$response = $this->post('/auth/user/',[ $response = $this->post('/auth/user/',[
"name" => "new user", "name" => "new user",
"email" => "user@gmail.com", "email" => "user@gmail.com",
"role_ids" => [$role->id, $role2->id] "roles" => [$role->id, $role2->id]
]); ]);
$response->assertStatus(201); $response->assertStatus(201);

View File

@ -67,7 +67,7 @@ class UpdateTest extends TestCase
$response = $this->post('/auth/user/'.$data->id,[ $response = $this->post('/auth/user/'.$data->id,[
"name" => "update user", "name" => "update user",
"email" => "user_update@gmail.com", "email" => "user_update@gmail.com",
"role_ids" => [ "roles" => [
$role->id, $role2->id $role->id, $role2->id
] ]
]); ]);