diff --git a/app/composer.lock b/app/composer.lock index 284f420..fcddb95 100644 --- a/app/composer.lock +++ b/app/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "brick/math", - "version": "0.12.1", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { @@ -26,7 +26,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -56,7 +56,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" + "source": "https://github.com/brick/math/tree/0.12.3" }, "funding": [ { @@ -64,7 +64,7 @@ "type": "github" } ], - "time": "2023-11-29T23:19:16+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "cakephp/chronos", @@ -127,20 +127,20 @@ }, { "name": "cakephp/core", - "version": "5.1.4", + "version": "5.2.1", "source": { "type": "git", "url": "https://github.com/cakephp/core.git", - "reference": "fdd2ab323284cc8475decaeaad4a3398aa90ff91" + "reference": "ba182a1410f1b06e8d1ab4d874b6f9797fbee165" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/core/zipball/fdd2ab323284cc8475decaeaad4a3398aa90ff91", - "reference": "fdd2ab323284cc8475decaeaad4a3398aa90ff91", + "url": "https://api.github.com/repos/cakephp/core/zipball/ba182a1410f1b06e8d1ab4d874b6f9797fbee165", + "reference": "ba182a1410f1b06e8d1ab4d874b6f9797fbee165", "shasum": "" }, "require": { - "cakephp/utility": "^5.1", + "cakephp/utility": "5.2.*@dev", "league/container": "^4.2", "php": ">=8.1", "psr/container": "^1.1 || ^2.0" @@ -154,6 +154,11 @@ "league/container": "To use Container and ServiceProvider classes" }, "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.2.x-dev" + } + }, "autoload": { "files": [ "functions.php" @@ -185,38 +190,43 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/core" }, - "time": "2024-11-30T18:47:29+00:00" + "time": "2025-04-02T12:02:03+00:00" }, { "name": "cakephp/database", - "version": "5.1.4", + "version": "5.2.1", "source": { "type": "git", "url": "https://github.com/cakephp/database.git", - "reference": "3a872d4ef14424679d30d2045eaca2643c967d64" + "reference": "f356a3fc78ff1c746d78786806f67ef22505cd76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/database/zipball/3a872d4ef14424679d30d2045eaca2643c967d64", - "reference": "3a872d4ef14424679d30d2045eaca2643c967d64", + "url": "https://api.github.com/repos/cakephp/database/zipball/f356a3fc78ff1c746d78786806f67ef22505cd76", + "reference": "f356a3fc78ff1c746d78786806f67ef22505cd76", "shasum": "" }, "require": { "cakephp/chronos": "^3.1", - "cakephp/core": "^5.1", - "cakephp/datasource": "^5.1", + "cakephp/core": "5.2.*@dev", + "cakephp/datasource": "5.2.*@dev", "php": ">=8.1", "psr/log": "^3.0" }, "require-dev": { - "cakephp/i18n": "^5.1", - "cakephp/log": "^5.1" + "cakephp/i18n": "5.2.*@dev", + "cakephp/log": "5.2.*@dev" }, "suggest": { "cakephp/i18n": "If you are using locale-aware datetime formats.", "cakephp/log": "If you want to use query logging without providing a logger yourself." }, "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.2.x-dev" + } + }, "autoload": { "psr-4": { "Cake\\Database\\": "." @@ -247,31 +257,31 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/database" }, - "time": "2024-12-12T13:08:46+00:00" + "time": "2025-04-05T04:18:59+00:00" }, { "name": "cakephp/datasource", - "version": "5.1.4", + "version": "5.2.1", "source": { "type": "git", "url": "https://github.com/cakephp/datasource.git", - "reference": "34b9617febd47649011e8914a4dbb21194a78504" + "reference": "2b4f33fcc8c5d13261b851e8299c9fa85ff11b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/datasource/zipball/34b9617febd47649011e8914a4dbb21194a78504", - "reference": "34b9617febd47649011e8914a4dbb21194a78504", + "url": "https://api.github.com/repos/cakephp/datasource/zipball/2b4f33fcc8c5d13261b851e8299c9fa85ff11b6e", + "reference": "2b4f33fcc8c5d13261b851e8299c9fa85ff11b6e", "shasum": "" }, "require": { - "cakephp/core": "^5.1", + "cakephp/core": "5.2.*@dev", "php": ">=8.1", "psr/simple-cache": "^2.0 || ^3.0" }, "require-dev": { - "cakephp/cache": "^5.1", - "cakephp/collection": "^5.1", - "cakephp/utility": "^5.1" + "cakephp/cache": "5.2.*@dev", + "cakephp/collection": "5.2.*@dev", + "cakephp/utility": "5.2.*@dev" }, "suggest": { "cakephp/cache": "If you decide to use Query caching.", @@ -279,6 +289,11 @@ "cakephp/utility": "If you decide to use EntityTrait." }, "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.2.x-dev" + } + }, "autoload": { "psr-4": { "Cake\\Datasource\\": "." @@ -309,24 +324,24 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/datasource" }, - "time": "2024-12-12T02:27:02+00:00" + "time": "2025-04-05T02:12:27+00:00" }, { "name": "cakephp/utility", - "version": "5.1.4", + "version": "5.2.1", "source": { "type": "git", "url": "https://github.com/cakephp/utility.git", - "reference": "943342ca3c0fc3cccb9f789340ff7eb5eceb1839" + "reference": "8b97361c71d30a9f1df2c8e98469d20af78d6ed6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/utility/zipball/943342ca3c0fc3cccb9f789340ff7eb5eceb1839", - "reference": "943342ca3c0fc3cccb9f789340ff7eb5eceb1839", + "url": "https://api.github.com/repos/cakephp/utility/zipball/8b97361c71d30a9f1df2c8e98469d20af78d6ed6", + "reference": "8b97361c71d30a9f1df2c8e98469d20af78d6ed6", "shasum": "" }, "require": { - "cakephp/core": "^5.1", + "cakephp/core": "5.2.*@dev", "php": ">=8.1" }, "suggest": { @@ -334,6 +349,11 @@ "lib-ICU": "To use Text::transliterate() or Text::slug()" }, "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.2.x-dev" + } + }, "autoload": { "files": [ "bootstrap.php" @@ -368,7 +388,7 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/utility" }, - "time": "2024-11-30T18:47:29+00:00" + "time": "2025-04-05T02:12:27+00:00" }, { "name": "dflydev/dot-access-data", @@ -665,32 +685,32 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.7", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -722,7 +742,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-11-14T18:34:49+00:00" + "time": "2025-03-19T13:51:03+00:00" }, { "name": "league/config", @@ -1078,16 +1098,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -1165,7 +1185,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -1177,7 +1197,7 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "nette/schema", @@ -1243,16 +1263,16 @@ }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "ce708655043c7050eb050df361c5e313cf708309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", "shasum": "" }, "require": { @@ -1323,9 +1343,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.0.6" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2025-03-30T21:06:30+00:00" }, { "name": "nikic/fast-route", @@ -1429,16 +1449,16 @@ }, { "name": "php-di/invoker", - "version": "2.3.4", + "version": "2.3.6", "source": { "type": "git", "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86" + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/33234b32dafa8eb69202f950a1fc92055ed76a86", - "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576", + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576", "shasum": "" }, "require": { @@ -1472,7 +1492,7 @@ ], "support": { "issues": "https://github.com/PHP-DI/Invoker/issues", - "source": "https://github.com/PHP-DI/Invoker/tree/2.3.4" + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6" }, "funding": [ { @@ -1480,24 +1500,24 @@ "type": "github" } ], - "time": "2023-09-08T09:24:21+00:00" + "time": "2025-01-17T12:49:27+00:00" }, { "name": "php-di/php-di", - "version": "7.0.7", + "version": "7.0.9", "source": { "type": "git", "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1" + "reference": "d8480267f5cf239650debba704f3ecd15b638cde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", - "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d8480267f5cf239650debba704f3ecd15b638cde", + "reference": "d8480267f5cf239650debba704f3ecd15b638cde", "shasum": "" }, "require": { - "laravel/serializable-closure": "^1.0", + "laravel/serializable-closure": "^1.0 || ^2.0", "php": ">=8.0", "php-di/invoker": "^2.0", "psr/container": "^1.1 || ^2.0" @@ -1509,8 +1529,8 @@ "friendsofphp/php-cs-fixer": "^3", "friendsofphp/proxy-manager-lts": "^1", "mnapoli/phpunit-easymock": "^1.3", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.6" + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^5|^6" }, "suggest": { "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" @@ -1541,7 +1561,7 @@ ], "support": { "issues": "https://github.com/PHP-DI/PHP-DI/issues", - "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.7" + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.9" }, "funding": [ { @@ -1553,7 +1573,7 @@ "type": "tidelift" } ], - "time": "2024-07-21T15:55:45+00:00" + "time": "2025-02-28T12:46:35+00:00" }, { "name": "phpoption/phpoption", @@ -2099,16 +2119,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -2116,25 +2136,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -2172,19 +2189,9 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", @@ -3224,16 +3231,16 @@ }, { "name": "symfony/config", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "bcd3c4adf0144dee5011bb35454728c38adec055" + "reference": "7716594aaae91d9141be080240172a92ecca4d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bcd3c4adf0144dee5011bb35454728c38adec055", - "reference": "bcd3c4adf0144dee5011bb35454728c38adec055", + "url": "https://api.github.com/repos/symfony/config/zipball/7716594aaae91d9141be080240172a92ecca4d44", + "reference": "7716594aaae91d9141be080240172a92ecca4d44", "shasum": "" }, "require": { @@ -3279,7 +3286,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.2.0" + "source": "https://github.com/symfony/config/tree/v7.2.3" }, "funding": [ { @@ -3295,20 +3302,20 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:36:24+00:00" + "time": "2025-01-22T12:07:01+00:00" }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "e51498ea18570c062e7df29d05a7003585b19b88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", + "reference": "e51498ea18570c062e7df29d05a7003585b19b88", "shasum": "" }, "require": { @@ -3372,7 +3379,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v7.2.5" }, "funding": [ { @@ -3388,7 +3395,7 @@ "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2025-03-12T08:11:12+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4169,24 +4176,23 @@ }, { "name": "twig/twig", - "version": "v3.18.0", + "version": "v3.20.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50" + "reference": "3468920399451a384bef53cf7996965f7cd40183" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", - "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", + "reference": "3468920399451a384bef53cf7996965f7cd40183", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php81": "^1.29" + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -4233,7 +4239,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.18.0" + "source": "https://github.com/twigphp/Twig/tree/v3.20.0" }, "funding": [ { @@ -4245,7 +4251,7 @@ "type": "tidelift" } ], - "time": "2024-12-29T10:51:50+00:00" + "time": "2025-02-13T08:34:43+00:00" }, { "name": "vlucas/phpdotenv", @@ -4450,16 +4456,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -4498,7 +4504,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -4506,7 +4512,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nikic/php-parser", @@ -4986,16 +4992,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { @@ -5027,29 +5033,29 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2024-10-13T11:29:49+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.8", + "version": "11.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.3.1", + "nikic/php-parser": "^5.4.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", @@ -5061,7 +5067,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.5.0" + "phpunit/phpunit": "^11.5.2" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -5099,7 +5105,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" }, "funding": [ { @@ -5107,7 +5113,7 @@ "type": "github" } ], - "time": "2024-12-11T12:34:27+00:00" + "time": "2025-02-25T13:26:39+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5356,16 +5362,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.3", + "version": "11.5.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "30e319e578a7b5da3543073e30002bf82042f701" + "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701", - "reference": "30e319e578a7b5da3543073e30002bf82042f701", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", + "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", "shasum": "" }, "require": { @@ -5375,24 +5381,24 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.8", + "phpunit/php-code-coverage": "^11.0.9", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.2", - "sebastian/comparator": "^6.3.0", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", "sebastian/exporter": "^6.3.0", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.0", + "sebastian/type": "^5.1.2", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -5437,7 +5443,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.15" }, "funding": [ { @@ -5453,7 +5459,7 @@ "type": "tidelift" } ], - "time": "2025-01-13T09:36:00+00:00" + "time": "2025-03-23T16:02:11+00:00" }, { "name": "sebastian/cli-parser", @@ -5514,16 +5520,16 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { @@ -5559,7 +5565,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { @@ -5567,7 +5573,7 @@ "type": "github" } ], - "time": "2024-12-12T09:59:06+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5627,16 +5633,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.0", + "version": "6.3.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", "shasum": "" }, "require": { @@ -5655,7 +5661,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.2-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -5695,7 +5701,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" }, "funding": [ { @@ -5703,7 +5709,7 @@ "type": "github" } ], - "time": "2025-01-06T10:28:19+00:00" + "time": "2025-03-07T06:57:01+00:00" }, { "name": "sebastian/complexity", @@ -6272,16 +6278,16 @@ }, { "name": "sebastian/type", - "version": "5.1.0", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", "shasum": "" }, "require": { @@ -6317,7 +6323,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" }, "funding": [ { @@ -6325,7 +6331,7 @@ "type": "github" } ], - "time": "2024-09-17T13:12:04+00:00" + "time": "2025-03-18T13:35:50+00:00" }, { "name": "sebastian/version", diff --git a/app/src/Domain/Entity.php b/app/src/Domain/Entity.php index 8cf7f7a..7b9809c 100644 --- a/app/src/Domain/Entity.php +++ b/app/src/Domain/Entity.php @@ -2,64 +2,23 @@ namespace Slovocast\Domain; -use DateTime; -use DateTimeImmutable; - /** * The Entity Trait is standard record based methods and properties that will * turn any object in a domain into an Entity, by providing it with an ID * property, setter and getter methods. - * - * If you don't want to be able to set an ID on an object in the Domain, then - * simply override the setter to do nothing. */ trait Entity { - protected ?int $id; - protected ?DateTimeImmutable $createdAt; - protected ?DateTime $updatedAt; + protected mixed $id; - /** - * Functionally if there is no ID, this is a new Entity that had not been - * persisted to a datasource. - * - * @return bool - */ - public function isNew(): bool - { - return (bool) $this->id; - } - - public function setId(int $id): static + public function setId(mixed $id): static { $this->id = $id; return $this; } - public function getId(): int + public function getId(): mixed { return $this->id; } - - public function setCreatedAt(DateTimeImmutable $createdAt): static - { - $this->createdAt = $createdAt; - return $this; - } - - public function getCreatedAt(): DateTimeImmutable - { - return $this->createdAt; - } - - public function setUpdatedAt(DateTime $updatedAt): static - { - $this->updatedAt = $updatedAt; - return $this; - } - - public function getUpdatedAt(): DateTime - { - return $this->updatedAt; - } } diff --git a/app/src/Domain/Entity/Episode/File.php b/app/src/Domain/Entity/Episode/File.php index 0046048..bc5822d 100644 --- a/app/src/Domain/Entity/Episode/File.php +++ b/app/src/Domain/Entity/Episode/File.php @@ -3,12 +3,15 @@ namespace Slovocast\Domain\Entity\Episode; use Slovocast\Domain\Entity as EntityTrait; +use Slovocast\Domain\Record as RecordTrait; + /** * Represents the data about the specific file that is used for the episode. */ class File { use EntityTrait; + use RecordTrait; /** * We should also be able to buffer the raw binary data of the buffer to diff --git a/app/src/Domain/Entity/User.php b/app/src/Domain/Entity/User.php index b3866af..cc59df4 100644 --- a/app/src/Domain/Entity/User.php +++ b/app/src/Domain/Entity/User.php @@ -5,10 +5,12 @@ namespace Slovocast\Domain\Entity; use DateTimeImmutable; use DateTime; use Slovocast\Domain\Entity; +use Slovocast\Domain\Record; class User { use Entity; + use Record; public function __construct( private string $email, diff --git a/app/src/Domain/Record.php b/app/src/Domain/Record.php new file mode 100644 index 0000000..a83b722 --- /dev/null +++ b/app/src/Domain/Record.php @@ -0,0 +1,43 @@ +createdAt = $createdAt; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function setUpdatedAt(DateTime $updatedAt): void + { + $this->updatedAt = $updatedAt; + } + + public function getUpdatedAt(): DateTime + { + return $this->updatedAt; + } + + public function markUpdated(): void + { + $this->updatedAt = new DateTime(); + } + + public function markCreated(): void + { + $this->createdAt = new DateTimeImmutable(); + $this->updatedAt = new DateTime(); + } +} diff --git a/app/src/Domain/Repository/Episode/EpisodeFileRepositoryInterface.php b/app/src/Domain/Repository/Episode/EpisodeFileRepositoryInterface.php index f573023..b0b3f46 100644 --- a/app/src/Domain/Repository/Episode/EpisodeFileRepositoryInterface.php +++ b/app/src/Domain/Repository/Episode/EpisodeFileRepositoryInterface.php @@ -8,7 +8,8 @@ use Slovocast\Domain\Entity\Episode\File; /** * The Episode File repository should consist of getting and setting the data * about the file stored in the database. The implementation of this class - * should concern itself with the data _about_ the file, not the file itself. + * should concern itself with the metadata _about_ the file, not the file + * itself. */ interface EpisodeFileRepositoryInterface { diff --git a/app/src/Domain/Repository/Episode/EpisodeFileRepsitory.php b/app/src/Domain/Repository/Episode/EpisodeFileRepsitory.php new file mode 100644 index 0000000..d84ec7f --- /dev/null +++ b/app/src/Domain/Repository/Episode/EpisodeFileRepsitory.php @@ -0,0 +1,51 @@ +db->query($query, [ ':id' => $id ]); + + if (!is_array($results) || empty($results)) { + throw new EntityNotFoundException("Unable to file File Metadata"); + } + + $row = array_shift($results); + return File::fromArray($row); + } + + public function getFromEpisode(Episode $episode): File + { + + } + + public function create(File $file): File + { + + } + + public function update(File $file): bool + { + + } + + /** + * @TODO Determine how to soft and fully delete the File data. + */ + public function delete(File $file): bool + { + return true; + } +} diff --git a/app/src/Domain/Repository/User/UserRepository.php b/app/src/Domain/Repository/User/UserRepository.php index 6d3e560..dc35440 100644 --- a/app/src/Domain/Repository/User/UserRepository.php +++ b/app/src/Domain/Repository/User/UserRepository.php @@ -11,18 +11,6 @@ use Slovocast\Infrastructure\Api\Database\DatabaseHandlerInterface; class UserRepository implements UserRepositoryInterface { - const QUERY_CREATE = "INSERT INTO users (email, password, name) - VALUES (:email, :password, :name)"; - - const QUERY_UPDATE = "UPDATE users - SET email = :email, - name = :name, - password = :password - WHERE id = :id"; - - const QUERY_SELECT_BY_ID = ""; - const QUERY_SELECT_BY_EMAIL = ""; - public function __construct( private DatabaseHandlerInterface $db, private UserAuthorizationInterface $userAuth @@ -35,14 +23,7 @@ class UserRepository implements UserRepositoryInterface */ protected function userFromQueryResults(array $results): User { - return User::fromArray([ - 'id' => $results['id'], - 'email' => $results['email'], - 'password' => $results['password'], - 'name' => $results['name'], - 'createdAt' => $results['created_at'], - 'updatedAt' => $results['updated_at'] - ]); + return User::fromArray($results); } /** @@ -58,7 +39,8 @@ class UserRepository implements UserRepositoryInterface throw new EntityNotFoundException("Unable to find User"); } - return $this->userFromQueryResults(array_shift($results)); + $row = array_shift($results); + return User::fromArray($row); } /** @@ -76,12 +58,16 @@ class UserRepository implements UserRepositoryInterface throw new EntityNotFoundException("Unable to find User"); } - return $this->userFromQueryResults(array_shift($results)); + $row = array_shift($results); + return User::fromArray($row); } public function create(User $user): bool { - $results = $this->db->execute(self::QUERY_CREATE, [ + $createQuery = "INSERT INTO users (email, password, name) + VALUES (:email, :password, :name)"; + + $results = $this->db->execute($createQuery, [ ':email' => $user->getEmail(), ':password' => $this->userAuth->hash($user->getPassword()), ':name' => $user->getName(), @@ -99,7 +85,13 @@ class UserRepository implements UserRepositoryInterface public function update(User $user): bool { - $results = $this->db->execute(self::QUERY_UPDATE, [ + $updateQuery = "UPDATE users + SET email = :email, + name = :name, + password = :password + WHERE id = :id"; + + $results = $this->db->execute($updateQuery, [ ':email' => $user->getEmail(), ':name' => $user->getName(), ':password' => $this->userAuth->hash($user->getPassword()), diff --git a/app/tests/Domain/Repository/UserRepositoryTest.php b/app/tests/Domain/Repository/UserRepositoryTest.php index f197f19..16117b9 100644 --- a/app/tests/Domain/Repository/UserRepositoryTest.php +++ b/app/tests/Domain/Repository/UserRepositoryTest.php @@ -79,6 +79,7 @@ class UserRepositoryTest extends TestCase $user = $userRepository->get(1); $this->assertEquals("Dave Test", $user->getName()); + // Now go get a User that doesn't exist $this->expectException(EntityNotFoundException::class); $userRepository->get(2); }