From 9f6833aa818da466c1d272965abf8be5b87ef56e Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Fri, 5 Jun 2026 12:46:00 +0200 Subject: [PATCH] fix: :bug: set validation of unique i18n fields --- .../Requests/Back/Sites/StoreSiteRequest.php | 2 +- app/Models/Brand.php | 31 ++++++++++++++++ app/Models/Site.php | 35 +++++++++++++------ 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/app/Http/Requests/Back/Sites/StoreSiteRequest.php b/app/Http/Requests/Back/Sites/StoreSiteRequest.php index d05f182..c225d84 100644 --- a/app/Http/Requests/Back/Sites/StoreSiteRequest.php +++ b/app/Http/Requests/Back/Sites/StoreSiteRequest.php @@ -30,7 +30,7 @@ class StoreSiteRequest extends FormRequest protected function prepareForValidation(): void { $this->merge([ - 'project_manager_id' => is_array($this->project_manager_id) + 'project_manager_id' => is_array($this->project_manager_id) && count($this->project_manager_id) ? intval($this->project_manager_id[0]) : $this->project_manager_id, 'gitlab_project_id' => is_array($this->gitlab_project_id) diff --git a/app/Models/Brand.php b/app/Models/Brand.php index 20a793a..161d846 100644 --- a/app/Models/Brand.php +++ b/app/Models/Brand.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Uwil\LaravelActivityLogs\Traits\HasActivityLog; use Uwil\LaravelBackend\Traits\Models\HasCache; use Uwil\LaravelBackend\Traits\Models\HasModelNaming; +use Uwil\LaravelI18n\Helpers\TranslationHelper; use Uwil\LaravelI18n\Traits\Models\HasTranslations; /** @@ -46,6 +47,24 @@ class Brand extends Model 'name', ]; + /** + * Perform any actions required after the model boots. + * + * @return void + */ + #[\Override] + protected static function booted(): void + { + static::creating(function (self $model): void { + self::manageFields($model); + }); + static::updating(function (self $model): void { + self::manageFields($model); + }); + } + + // * METHODS. + /** * Get relations to include in the cache. * @@ -56,7 +75,19 @@ class Brand extends Model return ['sites']; } + /** + * Manage model fields. + * + * @param self $model + * @return void + */ + private static function manageFields(self $model): void + { + TranslationHelper::assertTranslationFieldIsUnique($model, $model->name, 'name'); + } + // * RELATIONS. + /** * Get sites associated to the brand. * diff --git a/app/Models/Site.php b/app/Models/Site.php index 1fec88e..c2fc238 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -9,6 +9,7 @@ use Uwil\LaravelActivityLogs\Traits\HasActivityLog; use Uwil\LaravelBackend\Traits\Models\HasCache; use Uwil\LaravelBackend\Traits\Models\HasModelNaming; use Uwil\LaravelCommon\Helpers\ToolboxHelper; +use Uwil\LaravelI18n\Helpers\TranslationHelper; use Uwil\LaravelI18n\Traits\Models\HasTranslations; /** @@ -62,17 +63,31 @@ class Site extends Model #[\Override] protected static function booted(): void { - $assertUrls = function (self $model): void { - if ($model->url_re7) { - ToolboxHelper::assertNoInternalUrls('url_re7', $model->url_re7); - } - if ($model->url_prod) { - ToolboxHelper::assertNoInternalUrls('url_prod', $model->url_prod); - } - }; + static::creating(function (self $model): void { + self::manageFields($model); + }); + static::updating(function (self $model): void { + self::manageFields($model); + }); + } - static::creating($assertUrls); - static::updating($assertUrls); + // * METHODS. + + /** + * Manage model fields. + * + * @param self $model + * @return void + */ + private static function manageFields(self $model): void + { + TranslationHelper::assertTranslationFieldIsUnique($model, $model->name, 'name'); + if ($model->url_re7) { + ToolboxHelper::assertNoInternalUrls('url_re7', $model->url_re7); + } + if ($model->url_prod) { + ToolboxHelper::assertNoInternalUrls('url_prod', $model->url_prod); + } } /**