From 4942b7c1c443e44edbce7becd7d426c3d263afad Mon Sep 17 00:00:00 2001 From: Andrej Hudec Date: Thu, 2 Apr 2026 19:51:09 +0200 Subject: [PATCH 1/4] feat: add locale field to User --- src/Domain/User/AbstractUserManager.php | 1 + src/Model/User/BaseUserDto.php | 17 +++++++++++++++++ tests/data/Fixtures/UserFixtures.php | 3 +++ 3 files changed, 21 insertions(+) diff --git a/src/Domain/User/AbstractUserManager.php b/src/Domain/User/AbstractUserManager.php index f6c1944..791a07d 100644 --- a/src/Domain/User/AbstractUserManager.php +++ b/src/Domain/User/AbstractUserManager.php @@ -26,6 +26,7 @@ public function updateBaseAnzuUser(AnzuUser $user, BaseUserDto $userDto, bool $f { $user ->setEmail($userDto->getEmail()) + ->setLocale($userDto->getLocale()) ; $user->getAvatar() ->setColor($userDto->getAvatar()->getColor()) diff --git a/src/Model/User/BaseUserDto.php b/src/Model/User/BaseUserDto.php index a75028d..276ab5d 100644 --- a/src/Model/User/BaseUserDto.php +++ b/src/Model/User/BaseUserDto.php @@ -36,6 +36,10 @@ class BaseUserDto #[Assert\Valid] #[Serialize] protected Avatar $avatar; + + #[Assert\Locale] + #[Serialize] + protected ?string $locale = null; protected string $resourceName = ''; public function __construct() @@ -55,6 +59,7 @@ public static function createFromUser(AnzuUser $user): static ->setEmail($user->getEmail()) ->setPerson($user->getPerson()) ->setAvatar($user->getAvatar()) + ->setLocale($user->getLocale()) ->setResourceName($user::getResourceName()) ; } @@ -107,6 +112,18 @@ public function setAvatar(Avatar $avatar): static return $this; } + public function getLocale(): ?string + { + return $this->locale; + } + + public function setLocale(?string $locale): static + { + $this->locale = $locale; + + return $this; + } + #[Serialize(serializedName: '_resourceName')] public function getResourceName(): string { diff --git a/tests/data/Fixtures/UserFixtures.php b/tests/data/Fixtures/UserFixtures.php index 19b96fb..8b390c2 100644 --- a/tests/data/Fixtures/UserFixtures.php +++ b/tests/data/Fixtures/UserFixtures.php @@ -41,6 +41,7 @@ private function getData(): Generator $consoleUser = (new User()) ->setEmail('console@anzusystems.sk') ->setId(AnzuApp::getUserIdConsole()) + ->setLocale('sk') ->setCreatedAt(AnzuApp::getAppDate()) ->setModifiedAt(AnzuApp::getAppDate()) ; @@ -54,6 +55,7 @@ private function getData(): Generator yield (new User()) ->setEmail('anonymous@anzusystems.sk') ->setId(AnzuApp::getUserIdAnonymous()) + ->setLocale('sk') ->setCreatedAt(AnzuApp::getAppDate()) ->setModifiedAt(AnzuApp::getAppDate()) ->setCreatedBy($consoleUser) @@ -63,6 +65,7 @@ private function getData(): Generator ->setId(AnzuApp::getUserIdAdmin()) ->setEmail('admin@anzusystems.sk') ->setRoles([User::ROLE_ADMIN]) + ->setLocale('sk') ->setCreatedAt(AnzuApp::getAppDate()) ->setModifiedAt(AnzuApp::getAppDate()) ->setCreatedBy($consoleUser) From 49a409c97c0d68fc68070a8b4123551d80a899c0 Mon Sep 17 00:00:00 2001 From: Andrej Hudec Date: Tue, 7 Apr 2026 10:21:59 +0200 Subject: [PATCH 2/4] Minimum version for anzusystems/contracts is 4.5.0 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 9624282..48eedb8 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "ext-pcntl": "*", "ext-redis": "*", "ext-zend-opcache": "*", - "anzusystems/contracts": "^4.0", + "anzusystems/contracts": "^4.5", "anzusystems/serializer-bundle": "^6.0", "doctrine/dbal": "^4.0", "doctrine/lexer": "^3.0", From 52effa02e1f05797eca71d51fceb84cea4590435 Mon Sep 17 00:00:00 2001 From: Andrej Hudec Date: Tue, 7 Apr 2026 10:46:08 +0200 Subject: [PATCH 3/4] Improve workflow file --- .github/workflows/php.yml | 34 +++++++++++++++++++++++----------- composer.json | 2 +- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 169b8c3..16cb922 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -1,18 +1,34 @@ name: CI for AnzuSystems Common Bundle by Petit Press a.s. (www.sme.sk) on: + push: + branches: + - main pull_request: branches: - main +# Cancels previously running jobs for the same PR if a new commit is pushed +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# Follows the principle of least privilege +permissions: + contents: read + jobs: build: + name: PHP ${{ matrix.php-version }} + runs-on: ubuntu-latest + container: ${{ matrix.docker-image }} + strategy: matrix: include: - - php-version: 8.4 + - php-version: '8.4' docker-image: 'anzusystems/php:5.0.1-php84-cli' - - php-version: 8.5 + - php-version: '8.5' docker-image: 'anzusystems/php:5.0.1-php85-cli' services: @@ -34,25 +50,21 @@ jobs: env: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: admin - - name: PHP ${{ matrix.php-version }} - runs-on: ubuntu-latest - container: ${{ matrix.docker-image }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Validate composer.json - run: composer validate + run: composer validate --strict - name: Cache Composer packages id: composer-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: vendor - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.lock', '**/composer.json') }} restore-keys: | - ${{ runner.os }}-composer- + ${{ runner.os }}-php-${{ matrix.php-version }}-composer- - name: Install dependencies run: composer install --prefer-dist --no-progress --no-ansi --no-interaction --no-scripts diff --git a/composer.json b/composer.json index 48eedb8..5851815 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ "symfony/http-kernel": "^7.0|^8.0", "symfony/lock": "^7.0|^8.0", "symfony/messenger": "^7.0|^8.0", - "symfony/monolog-bundle": ">=3.9", + "symfony/monolog-bundle": "^3.9|^4.0", "symfony/polyfill-uuid": "^1.23", "symfony/runtime": "^7.0|^8.0", "symfony/security-bundle": "^7.0|^8.0", From 22b9ee1d5c21d8017fa85b0561fb6cc226d7582f Mon Sep 17 00:00:00 2001 From: Andrej Hudec Date: Tue, 7 Apr 2026 11:24:24 +0200 Subject: [PATCH 4/4] Use ERROR_FIELD_INVALID message in Locale constraint --- src/Model/User/BaseUserDto.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/User/BaseUserDto.php b/src/Model/User/BaseUserDto.php index 276ab5d..73fb267 100644 --- a/src/Model/User/BaseUserDto.php +++ b/src/Model/User/BaseUserDto.php @@ -37,7 +37,7 @@ class BaseUserDto #[Serialize] protected Avatar $avatar; - #[Assert\Locale] + #[Assert\Locale(message: ValidationException::ERROR_FIELD_INVALID)] #[Serialize] protected ?string $locale = null; protected string $resourceName = '';