From 70c31eef8fcf4de7115dc62809f3271a8bfafd9c Mon Sep 17 00:00:00 2001 From: Boy132 Date: Sun, 23 Jun 2024 16:33:18 +0200 Subject: [PATCH] Refactor UserTransformers (#423) * remove AccountTransformer and update UserTransformer (client api) to match UserTransformer (application api) * rename "toVueObject" * fix tests * forgot to rename this * backwards compat * fix tests --- .../Api/Client/AccountController.php | 4 +-- .../Auth/AbstractLoginController.php | 2 +- app/Models/User.php | 4 +-- .../Api/Application/UserTransformer.php | 3 +- .../Api/Client/AccountTransformer.php | 32 ------------------- .../Api/Client/UserTransformer.php | 20 ++++++++---- resources/views/templates/wrapper.blade.php | 2 +- .../Application/Users/UserControllerTest.php | 6 ++-- .../Api/Client/AccountControllerTest.php | 11 +++++-- 9 files changed, 33 insertions(+), 51 deletions(-) delete mode 100644 app/Transformers/Api/Client/AccountTransformer.php diff --git a/app/Http/Controllers/Api/Client/AccountController.php b/app/Http/Controllers/Api/Client/AccountController.php index 49f64bed6..6a0862d6b 100644 --- a/app/Http/Controllers/Api/Client/AccountController.php +++ b/app/Http/Controllers/Api/Client/AccountController.php @@ -8,9 +8,9 @@ use Illuminate\Auth\AuthManager; use Illuminate\Http\JsonResponse; use App\Facades\Activity; use App\Services\Users\UserUpdateService; -use App\Transformers\Api\Client\AccountTransformer; use App\Http\Requests\Api\Client\Account\UpdateEmailRequest; use App\Http\Requests\Api\Client\Account\UpdatePasswordRequest; +use App\Transformers\Api\Client\UserTransformer; class AccountController extends ClientApiController { @@ -25,7 +25,7 @@ class AccountController extends ClientApiController public function index(Request $request): array { return $this->fractal->item($request->user()) - ->transformWith($this->getTransformer(AccountTransformer::class)) + ->transformWith($this->getTransformer(UserTransformer::class)) ->toArray(); } diff --git a/app/Http/Controllers/Auth/AbstractLoginController.php b/app/Http/Controllers/Auth/AbstractLoginController.php index 6a25cf013..e5b50d0ad 100644 --- a/app/Http/Controllers/Auth/AbstractLoginController.php +++ b/app/Http/Controllers/Auth/AbstractLoginController.php @@ -83,7 +83,7 @@ abstract class AbstractLoginController extends Controller 'data' => [ 'complete' => true, 'intended' => $this->redirectPath(), - 'user' => $user->toVueObject(), + 'user' => $user->toReactObject(), ], ]); } diff --git a/app/Models/User.php b/app/Models/User.php index b49d2f677..c3acfbb46 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -215,9 +215,9 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac } /** - * Return the user model in a format that can be passed over to Vue templates. + * Return the user model in a format that can be passed over to React templates. */ - public function toVueObject(): array + public function toReactObject(): array { return collect($this->toArray())->except(['id', 'external_id'])->toArray(); } diff --git a/app/Transformers/Api/Application/UserTransformer.php b/app/Transformers/Api/Application/UserTransformer.php index ae0712c9a..ddec17e82 100644 --- a/app/Transformers/Api/Application/UserTransformer.php +++ b/app/Transformers/Api/Application/UserTransformer.php @@ -37,7 +37,8 @@ class UserTransformer extends BaseTransformer 'last_name' => $user->name_last, 'language' => $user->language, 'root_admin' => (bool) $user->root_admin, - '2fa' => (bool) $user->use_totp, + '2fa_enabled' => (bool) $user->use_totp, + '2fa' => (bool) $user->use_totp, // deprecated, use "2fa_enabled" 'created_at' => $this->formatTimestamp($user->created_at), 'updated_at' => $this->formatTimestamp($user->updated_at), ]; diff --git a/app/Transformers/Api/Client/AccountTransformer.php b/app/Transformers/Api/Client/AccountTransformer.php deleted file mode 100644 index 87689a674..000000000 --- a/app/Transformers/Api/Client/AccountTransformer.php +++ /dev/null @@ -1,32 +0,0 @@ - $model->id, - 'admin' => $model->root_admin, - 'username' => $model->username, - 'email' => $model->email, - 'first_name' => $model->name_first, - 'last_name' => $model->name_last, - 'language' => $model->language, - ]; - } -} diff --git a/app/Transformers/Api/Client/UserTransformer.php b/app/Transformers/Api/Client/UserTransformer.php index c16d7f692..6b42ae507 100644 --- a/app/Transformers/Api/Client/UserTransformer.php +++ b/app/Transformers/Api/Client/UserTransformer.php @@ -19,15 +19,21 @@ class UserTransformer extends BaseClientTransformer * Transforms a User model into a representation that can be shown to regular * users of the API. */ - public function transform(User $model): array + public function transform(User $user): array { return [ - 'uuid' => $model->uuid, - 'username' => $model->username, - 'email' => $model->email, - 'image' => 'https://gravatar.com/avatar/' . md5(Str::lower($model->email)), - '2fa_enabled' => $model->use_totp, - 'created_at' => $model->created_at->toAtomString(), + 'uuid' => $user->uuid, + 'username' => $user->username, + 'email' => $user->email, + 'first_name' => $user->name_first, + 'last_name' => $user->name_last, + 'language' => $user->language, + 'image' => 'https://gravatar.com/avatar/' . md5(Str::lower($user->email)), // deprecated + 'admin' => (bool) $user->root_admin, // deprecated, use "root_admin" + 'root_admin' => (bool) $user->root_admin, + '2fa_enabled' => (bool) $user->use_totp, + 'created_at' => $this->formatTimestamp($user->created_at), + 'updated_at' => $this->formatTimestamp($user->updated_at), ]; } } diff --git a/resources/views/templates/wrapper.blade.php b/resources/views/templates/wrapper.blade.php index 8e52dc80c..aba562c47 100644 --- a/resources/views/templates/wrapper.blade.php +++ b/resources/views/templates/wrapper.blade.php @@ -17,7 +17,7 @@ @section('user-data') @if(!is_null(Auth::user())) @endif @if(!empty($siteConfiguration)) diff --git a/tests/Integration/Api/Application/Users/UserControllerTest.php b/tests/Integration/Api/Application/Users/UserControllerTest.php index 56887fc3d..b52c1c2c6 100644 --- a/tests/Integration/Api/Application/Users/UserControllerTest.php +++ b/tests/Integration/Api/Application/Users/UserControllerTest.php @@ -24,8 +24,8 @@ class UserControllerTest extends ApplicationApiIntegrationTestCase $response->assertJsonStructure([ 'object', 'data' => [ - ['object', 'attributes' => ['id', 'external_id', 'uuid', 'username', 'email', 'first_name', 'last_name', 'language', 'root_admin', '2fa', 'created_at', 'updated_at']], - ['object', 'attributes' => ['id', 'external_id', 'uuid', 'username', 'email', 'first_name', 'last_name', 'language', 'root_admin', '2fa', 'created_at', 'updated_at']], + ['object', 'attributes' => ['id', 'external_id', 'uuid', 'username', 'email', 'first_name', 'last_name', 'language', 'root_admin', '2fa_enabled', '2fa', 'created_at', 'updated_at']], + ['object', 'attributes' => ['id', 'external_id', 'uuid', 'username', 'email', 'first_name', 'last_name', 'language', 'root_admin', '2fa_enabled', '2fa', 'created_at', 'updated_at']], ], 'meta' => ['pagination' => ['total', 'count', 'per_page', 'current_page', 'total_pages']], ]); @@ -56,6 +56,7 @@ class UserControllerTest extends ApplicationApiIntegrationTestCase 'last_name' => $this->getApiUser()->name_last, 'language' => $this->getApiUser()->language, 'root_admin' => $this->getApiUser()->root_admin, + '2fa_enabled' => (bool) $this->getApiUser()->totp_enabled, '2fa' => (bool) $this->getApiUser()->totp_enabled, 'created_at' => $this->formatTimestamp($this->getApiUser()->created_at), 'updated_at' => $this->formatTimestamp($this->getApiUser()->updated_at), @@ -73,6 +74,7 @@ class UserControllerTest extends ApplicationApiIntegrationTestCase 'last_name' => $user->name_last, 'language' => $user->language, 'root_admin' => (bool) $user->root_admin, + '2fa_enabled' => (bool) $user->totp_enabled, '2fa' => (bool) $user->totp_enabled, 'created_at' => $this->formatTimestamp($user->created_at), 'updated_at' => $this->formatTimestamp($user->updated_at), diff --git a/tests/Integration/Api/Client/AccountControllerTest.php b/tests/Integration/Api/Client/AccountControllerTest.php index aaca0da0b..ccca6818d 100644 --- a/tests/Integration/Api/Client/AccountControllerTest.php +++ b/tests/Integration/Api/Client/AccountControllerTest.php @@ -22,13 +22,18 @@ class AccountControllerTest extends ClientApiIntegrationTestCase $response->assertOk()->assertJson([ 'object' => 'user', 'attributes' => [ - 'id' => $user->id, - 'admin' => false, + 'uuid' => $user->uuid, 'username' => $user->username, 'email' => $user->email, 'first_name' => $user->name_first, 'last_name' => $user->name_last, - 'language' => $user->language, + 'language' => 'en', + 'image' => 'https://gravatar.com/avatar/' . md5(Str::lower($user->email)), + 'admin' => false, + 'root_admin' => false, + '2fa_enabled' => false, + 'created_at' => $this->formatTimestamp($user->created_at), + 'updated_at' => $this->formatTimestamp($user->updated_at), ], ]); }