From fff623144a0ce45a4cedbecf57a823086fb313e0 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 5 Aug 2025 09:23:54 +0200 Subject: [PATCH] fix: :bug: standardize ID extraction using modelKeys() instead of pluck('id') --- app/Console/Commands/UserCreate.php | 4 ---- app/Http/Controllers/Bo/ClaimController.php | 4 +++- .../Bo/ClaimMailTemplateController.php | 2 +- app/Http/Controllers/Bo/QuestionController.php | 2 +- app/Http/Controllers/Bo/StatsController.php | 2 +- app/Models/Answer.php | 18 ++++++++++-------- app/Models/Brand.php | 2 +- app/Models/Question.php | 16 +++++++++------- app/Policies/ClaimMailTemplatePolicy.php | 2 +- app/Policies/ClaimPolicy.php | 2 +- database/factories/ClaimFactory.php | 8 +++++--- .../factories/ClaimMailTemplateFactory.php | 2 +- database/factories/ClaimMessageFactory.php | 6 ++++-- database/factories/ClaimSubjectFactory.php | 2 +- database/factories/SingleOptinFactory.php | 2 +- database/seeders/CustomerSeeder.php | 2 +- database/seeders/SingleOptinSeeder.php | 2 +- database/seeders/UserSeeder.php | 2 +- 18 files changed, 43 insertions(+), 37 deletions(-) diff --git a/app/Console/Commands/UserCreate.php b/app/Console/Commands/UserCreate.php index bafeb10..d656d86 100644 --- a/app/Console/Commands/UserCreate.php +++ b/app/Console/Commands/UserCreate.php @@ -175,7 +175,6 @@ class UserCreate extends Command [ Str::ucFirst(RoleEnum::conceptor->label()), Str::ucFirst(RoleEnum::admin->label()), - Str::ucFirst(RoleEnum::visitor->label()), Str::ucFirst(RoleEnum::marketing->label()) ], Str::ucFirst(RoleEnum::marketing->label()), @@ -186,9 +185,6 @@ class UserCreate extends Command if ($tmp === Str::ucFirst(RoleEnum::admin->label())) { $tmp = RoleEnum::admin; } - if ($tmp === Str::ucFirst(RoleEnum::visitor->label())) { - $tmp = RoleEnum::visitor; - } if ($tmp === Str::ucFirst(RoleEnum::marketing->label())) { $tmp = RoleEnum::marketing; } diff --git a/app/Http/Controllers/Bo/ClaimController.php b/app/Http/Controllers/Bo/ClaimController.php index 880202a..b405b9b 100644 --- a/app/Http/Controllers/Bo/ClaimController.php +++ b/app/Http/Controllers/Bo/ClaimController.php @@ -52,7 +52,7 @@ class ClaimController extends Controller fn($q) => $q->whereHas('brand', fn($q) => $q->where('id', $request->brand)) )->when( $userModel->role->equals(RoleEnum::marketing), - fn($q) => $q->whereHas('brand', fn($q) => $q->whereIn('id', $userModel->brands->pluck('id'))) + fn($q) => $q->whereHas('brand', fn($q) => $q->whereIn('id', $userModel->brands->modelKeys())) ); /** @var string $search Search field */ @@ -62,12 +62,14 @@ class ClaimController extends Controller $claimModels, $search, null, + 'reference', 'first_name', 'last_name', 'email', ); } $searchFields = \implode(', ', [ + trans('validation.custom.reference'), trans('validation.attributes.first_name'), trans('validation.attributes.last_name'), trans('validation.attributes.email'), diff --git a/app/Http/Controllers/Bo/ClaimMailTemplateController.php b/app/Http/Controllers/Bo/ClaimMailTemplateController.php index 4d800bf..6dc0571 100644 --- a/app/Http/Controllers/Bo/ClaimMailTemplateController.php +++ b/app/Http/Controllers/Bo/ClaimMailTemplateController.php @@ -40,7 +40,7 @@ class ClaimMailTemplateController extends Controller fn($q) => $q->whereHas('brand', fn($q) => $q->where('id', $request->brand)) )->when( $userModel->role->equals(RoleEnum::marketing), - fn($q) => $q->whereHas('brand', fn($q) => $q->whereIn('id', $userModel->brands->pluck('id'))) + fn($q) => $q->whereHas('brand', fn($q) => $q->whereIn('id', $userModel->brands->modelKeys())) ); if ($request->search) { diff --git a/app/Http/Controllers/Bo/QuestionController.php b/app/Http/Controllers/Bo/QuestionController.php index 3ed8a48..184ccc6 100644 --- a/app/Http/Controllers/Bo/QuestionController.php +++ b/app/Http/Controllers/Bo/QuestionController.php @@ -212,7 +212,7 @@ class QuestionController extends Controller ->selectRaw('count(*) as total, answer_id') ->from('model_answer') ->where('model_type', '=', Customer::class) - ->whereIn('answer_id', $question->answers->pluck('id')) + ->whereIn('answer_id', $question->answers->modelKeys()) ->groupBy('answer_id') ->get() ->keyBy('answer_id'); diff --git a/app/Http/Controllers/Bo/StatsController.php b/app/Http/Controllers/Bo/StatsController.php index 4b35f52..b7b7afc 100644 --- a/app/Http/Controllers/Bo/StatsController.php +++ b/app/Http/Controllers/Bo/StatsController.php @@ -160,7 +160,7 @@ class StatsController extends Controller $answersByDays = ModelAnswer::query() ->whereDate('created_at', '>=', $start) ->whereDate('created_at', '<=', $end) - ->whereIn('answer_id', $answers->pluck('id')) + ->whereIn('answer_id', $answers->modelKeys()) ->get()->map(function ($custAnswer) { return [ 'answer_id' => $custAnswer->answer_id, diff --git a/app/Models/Answer.php b/app/Models/Answer.php index 8dbb7a4..ff9fc2c 100644 --- a/app/Models/Answer.php +++ b/app/Models/Answer.php @@ -36,14 +36,14 @@ class Answer extends Model */ protected static function booted(): void { - static::created(function () { - self::resetCache(); + static::created(function (self $model) { + self::resetCache($model); }); - static::updated(function () { - self::resetCache(); + static::updated(function (self $model) { + self::resetCache($model); }); - static::deleted(function () { - self::resetCache(); + static::deleted(function (self $model) { + self::resetCache($model); }); } @@ -65,11 +65,13 @@ class Answer extends Model /** * Reset all cache elements related to this model. * + * @param self $model * @return void */ - private static function resetCache(): void + private static function resetCache(self $model): void { - Cache::forget('answers'); + $questionModelKey = $model->question->getKey(); + Cache::forget("question-{$questionModelKey}-answers"); self::getAnswers(); } diff --git a/app/Models/Brand.php b/app/Models/Brand.php index 5530f0c..4c1931e 100644 --- a/app/Models/Brand.php +++ b/app/Models/Brand.php @@ -120,7 +120,7 @@ class Brand extends Model $brandModels = self::getBrands(); if ($userModel->role->equals(RoleEnum::marketing)) { - $brandIds = $userModel->brands->pluck('id')->all(); + $brandIds = $userModel->brands->modelKeys(); $brandModels = $brandModels->filter(function ($brand) use ($brandIds) { return in_array($brand->getKey(), $brandIds); diff --git a/app/Models/Question.php b/app/Models/Question.php index 14f0744..da76349 100644 --- a/app/Models/Question.php +++ b/app/Models/Question.php @@ -51,14 +51,14 @@ class Question extends Model */ protected static function booted(): void { - static::created(function () { - self::resetCache(); + static::created(function (self $model) { + self::resetCache($model->getKey()); }); - static::updated(function () { - self::resetCache(); + static::updated(function (self $model) { + self::resetCache($model->getKey()); }); - static::deleted(function () { - self::resetCache(); + static::deleted(function (self $model) { + self::resetCache($model->getKey()); }); } @@ -80,11 +80,13 @@ class Question extends Model /** * Reset all cache elements related to this model. * + * @param integer $modelKey * @return void */ - private static function resetCache(): void + private static function resetCache(int $modelKey): void { Cache::forget('questions'); + Cache::forget("question-{$modelKey}-answers"); self::getQuestions(); } diff --git a/app/Policies/ClaimMailTemplatePolicy.php b/app/Policies/ClaimMailTemplatePolicy.php index e1bb49a..a9240b6 100644 --- a/app/Policies/ClaimMailTemplatePolicy.php +++ b/app/Policies/ClaimMailTemplatePolicy.php @@ -99,7 +99,7 @@ class ClaimMailTemplatePolicy */ private function checkOnlyMinAdminOrInUserBrands(User $authUser, ClaimMailTemplate $claim_mail_template): bool { - $userBrandModelKeys = $authUser->brands->pluck('id')->toArray(); + $userBrandModelKeys = $authUser->brands->modelKeys(); $claimMailTemplateModelKey = $claim_mail_template->brand->getKey(); return UserStaticRules::atLeastRole($authUser, RoleEnum::admin) || ( UserStaticRules::atLeastRole($authUser, RoleEnum::marketing) diff --git a/app/Policies/ClaimPolicy.php b/app/Policies/ClaimPolicy.php index fbfb015..0d4c23a 100644 --- a/app/Policies/ClaimPolicy.php +++ b/app/Policies/ClaimPolicy.php @@ -60,7 +60,7 @@ class ClaimPolicy */ public function updateBrand(User $authUser): bool { - return UserStaticRules::atLeastRole($authUser, RoleEnum::conceptor); + return UserStaticRules::atLeastRole($authUser, RoleEnum::admin); } /** diff --git a/database/factories/ClaimFactory.php b/database/factories/ClaimFactory.php index 66944b0..edcc7a4 100644 --- a/database/factories/ClaimFactory.php +++ b/database/factories/ClaimFactory.php @@ -38,9 +38,11 @@ class ClaimFactory extends Factory 'response_type' => ClaimResponseType::none, 'type' => collect(ClaimType::toArray())->random()->value, 'status' => collect(ClaimStatus::toArray())->random()->value, - 'brand_id' => $this->faker->randomElement(Brand::pluck('id')), - 'subject_id' => $this->faker->randomElement(ClaimSubject::pluck('id')), - 'customer_id' => $this->faker->boolean(50) ? $this->faker->randomElement(Customer::pluck('id')) : null, + 'brand_id' => $this->faker->randomElement(Brand::query()->get()->modelKeys()), + 'subject_id' => $this->faker->randomElement(ClaimSubject::query()->get()->modelKeys()), + 'customer_id' => $this->faker->boolean(50) + ? $this->faker->randomElement(Customer::query()->get()->modelKeys()) + : null, ]; } } diff --git a/database/factories/ClaimMailTemplateFactory.php b/database/factories/ClaimMailTemplateFactory.php index 131a395..75bae61 100644 --- a/database/factories/ClaimMailTemplateFactory.php +++ b/database/factories/ClaimMailTemplateFactory.php @@ -25,7 +25,7 @@ class ClaimMailTemplateFactory extends Factory return [ 'label' => $this->faker->word(), 'content' => $this->faker->sentence(10), - 'brand_id' => $this->faker->randomElement(Brand::pluck('id')), + 'brand_id' => $this->faker->randomElement(Brand::query()->get()->modelKeys()), ]; } } diff --git a/database/factories/ClaimMessageFactory.php b/database/factories/ClaimMessageFactory.php index f6fd58c..24cd759 100644 --- a/database/factories/ClaimMessageFactory.php +++ b/database/factories/ClaimMessageFactory.php @@ -27,8 +27,10 @@ class ClaimMessageFactory extends Factory return [ 'content' => $this->faker->sentence(10), 'type' => collect(ClaimMessageType::toArray())->random()->value, - 'claim_id' => $this->faker->randomElement(Claim::pluck('id')), - 'user_id' => $this->faker->boolean(50) ? $this->faker->randomElement(User::pluck('id')) : null, + 'claim_id' => $this->faker->randomElement(Claim::query()->get()->modelKeys()), + 'user_id' => $this->faker->boolean(50) + ? $this->faker->randomElement(User::query()->get()->modelKeys()) + : null, ]; } } diff --git a/database/factories/ClaimSubjectFactory.php b/database/factories/ClaimSubjectFactory.php index 5282a82..b978293 100644 --- a/database/factories/ClaimSubjectFactory.php +++ b/database/factories/ClaimSubjectFactory.php @@ -24,7 +24,7 @@ class ClaimSubjectFactory extends Factory { return [ 'label' => $this->faker->word(), - 'brand_id' => $this->faker->randomElement(Brand::pluck('id')), + 'brand_id' => $this->faker->randomElement(Brand::query()->get()->modelKeys()), ]; } } diff --git a/database/factories/SingleOptinFactory.php b/database/factories/SingleOptinFactory.php index 308b78e..fb07c61 100644 --- a/database/factories/SingleOptinFactory.php +++ b/database/factories/SingleOptinFactory.php @@ -26,7 +26,7 @@ class SingleOptinFactory extends Factory return [ 'hashcode' => Str::uuid(), 'email' => $this->faker->email(), - 'brand_id' => $this->faker->randomElement(Brand::pluck('id')), + 'brand_id' => $this->faker->randomElement(Brand::query()->get()->modelKeys()), ]; } } diff --git a/database/seeders/CustomerSeeder.php b/database/seeders/CustomerSeeder.php index 5183dfd..0ff0910 100644 --- a/database/seeders/CustomerSeeder.php +++ b/database/seeders/CustomerSeeder.php @@ -41,7 +41,7 @@ class CustomerSeeder extends Seeder } ); } - $answerModels = Answer::inRandomOrder()->take(rand(1, 3))->pluck('id'); + $answerModels = Answer::inRandomOrder()->take(rand(1, 3))->get()->modelKeys(); $customer->answers()->attach($answerModels); }); } diff --git a/database/seeders/SingleOptinSeeder.php b/database/seeders/SingleOptinSeeder.php index 3a79bdd..4e62316 100644 --- a/database/seeders/SingleOptinSeeder.php +++ b/database/seeders/SingleOptinSeeder.php @@ -16,7 +16,7 @@ class SingleOptinSeeder extends Seeder public function run(): void { SingleOptin::factory(20)->create()->each(function (SingleOptin $singleOptin) { - $answerModels = Answer::inRandomOrder()->take(rand(1, 3))->pluck('id'); + $answerModels = Answer::inRandomOrder()->take(rand(1, 3))->get()->modelKeys(); $singleOptin->answers()->attach($answerModels); }); } diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 8019b31..076dc89 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -16,7 +16,7 @@ class UserSeeder extends Seeder public function run(): void { User::factory(20)->create()->each(function ($user) { - $brands = Brand::inRandomOrder()->take(rand(1, 3))->pluck('id'); + $brands = Brand::inRandomOrder()->take(rand(1, 3))->get()->modelKeys(); $user->brands()->attach($brands); }); }