feat(scanner): add scanner category validation logic and related tests
This commit is contained in:
@@ -48,9 +48,10 @@ class StaffService
|
||||
/** @param array<string, mixed> $data */
|
||||
public function create(Tenant $tenant, array $data): User
|
||||
{
|
||||
$this->assertCategoriesBelongToTenant($tenant, $data['category_ids']);
|
||||
$categoryIds = $this->categoryIdsFor($tenant, $data);
|
||||
$this->assertCategoriesBelongToTenant($tenant, $categoryIds);
|
||||
|
||||
return DB::transaction(function () use ($tenant, $data): User {
|
||||
return DB::transaction(function () use ($tenant, $data, $categoryIds): User {
|
||||
$staff = User::query()->create([
|
||||
...Arr::only($data, ['nombre_apellido', 'dni', 'email']),
|
||||
'email' => mb_strtolower(trim((string) $data['email'])),
|
||||
@@ -58,7 +59,7 @@ class StaffService
|
||||
'rol_codigo' => RoleCode::Scanner->value,
|
||||
'tenant_codigo' => $tenant->codigo,
|
||||
]);
|
||||
$staff->scanCategories()->sync($data['category_ids']);
|
||||
$staff->scanCategories()->sync($categoryIds);
|
||||
|
||||
return $staff->load('role', 'scanCategories');
|
||||
});
|
||||
@@ -68,13 +69,14 @@ class StaffService
|
||||
public function update(Tenant $tenant, int $staffId, array $data): User
|
||||
{
|
||||
$staff = $this->find($tenant, $staffId);
|
||||
$this->assertCategoriesBelongToTenant($tenant, $data['category_ids']);
|
||||
$categoryIds = $this->categoryIdsFor($tenant, $data);
|
||||
$this->assertCategoriesBelongToTenant($tenant, $categoryIds);
|
||||
|
||||
return DB::transaction(function () use ($staff, $data): User {
|
||||
return DB::transaction(function () use ($staff, $data, $categoryIds): User {
|
||||
$attributes = Arr::only($data, ['nombre_apellido', 'dni', 'email']);
|
||||
$attributes['email'] = mb_strtolower(trim((string) $data['email']));
|
||||
$staff->update($attributes);
|
||||
$staff->scanCategories()->sync($data['category_ids']);
|
||||
$staff->scanCategories()->sync($categoryIds);
|
||||
|
||||
return $staff->load('role', 'scanCategories');
|
||||
});
|
||||
@@ -97,6 +99,19 @@ class StaffService
|
||||
->where('rol_codigo', RoleCode::Scanner->value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $data
|
||||
* @return array<int, int>
|
||||
*/
|
||||
private function categoryIdsFor(Tenant $tenant, array $data): array
|
||||
{
|
||||
if (! $tenant->requiresScannerCategoryValidation()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return $data['category_ids'];
|
||||
}
|
||||
|
||||
/** @param array<int, int> $categoryIds */
|
||||
private function assertCategoriesBelongToTenant(Tenant $tenant, array $categoryIds): void
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user