From d94f79ef2c72cb48ae5310521082a5b1278c9aca Mon Sep 17 00:00:00 2001 From: kimchanhyung98 Date: Tue, 21 May 2024 14:58:49 +0900 Subject: [PATCH] Update v0.0.2 (#84) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump ramsey/composer-install from 2 to 3 (#39) Bumps [ramsey/composer-install](https://github.com/ramsey/composer-install) from 2 to 3. - [Release notes](https://github.com/ramsey/composer-install/releases) - [Commits](https://github.com/ramsey/composer-install/compare/v2...v3) --- updated-dependencies: - dependency-name: ramsey/composer-install dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump phpunit/phpunit from 10.5.7 to 10.5.11 (#37) Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.7 to 10.5.11. - [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.11/ChangeLog-10.5.md) - [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.7...10.5.11) --- updated-dependencies: - dependency-name: phpunit/phpunit dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump laravel/pint from 1.13.8 to 1.14.0 (#36) Bumps [laravel/pint](https://github.com/laravel/pint) from 1.13.8 to 1.14.0. - [Release notes](https://github.com/laravel/pint/releases) - [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md) - [Commits](https://github.com/laravel/pint/compare/v1.13.8...v1.14.0) --- updated-dependencies: - dependency-name: laravel/pint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump einaregilsson/beanstalk-deploy from 14 to 22 (#30) Bumps [einaregilsson/beanstalk-deploy](https://github.com/einaregilsson/beanstalk-deploy) from 14 to 22. - [Release notes](https://github.com/einaregilsson/beanstalk-deploy/releases) - [Commits](https://github.com/einaregilsson/beanstalk-deploy/compare/v14...v22) --- updated-dependencies: - dependency-name: einaregilsson/beanstalk-deploy dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump actions/checkout from 3 to 4 (#16) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump aws-actions/configure-aws-credentials from 1 to 4 (#15) Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 1 to 4. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v1...v4) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump aws-actions/amazon-ecr-login from 1 to 2 (#14) Bumps [aws-actions/amazon-ecr-login](https://github.com/aws-actions/amazon-ecr-login) from 1 to 2. - [Release notes](https://github.com/aws-actions/amazon-ecr-login/releases) - [Changelog](https://github.com/aws-actions/amazon-ecr-login/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/amazon-ecr-login/compare/v1...v2) --- updated-dependencies: - dependency-name: aws-actions/amazon-ecr-login dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Update README.md * Update README.md * 로그인 관련 기능 수정 (#43) * Update .env.example * Update Account resource's namespace * Update user name, not unique * Update run-tests.yml * Fix code format * Fix routes, post controller * 팩토리&시드 추가 (#48) * Fix styling * Update Post model * Create API Healthcheck * Update UserFactory * Update UserSeeder * Fix UserSeeders * Fix typo * Create PostFactory * Create PostSeeder * 게시판 오류 수정 (#49) * Update IndexResource collection * Update ShowResource * Update Post Model * Bump psalm/plugin-laravel from 2.8.0 to 2.10.1 Bumps [psalm/plugin-laravel](https://github.com/psalm/psalm-plugin-laravel) from 2.8.0 to 2.10.1. - [Release notes](https://github.com/psalm/psalm-plugin-laravel/releases) - [Commits](https://github.com/psalm/psalm-plugin-laravel/compare/v2.8.0...v2.10.1) --- updated-dependencies: - dependency-name: psalm/plugin-laravel dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump mockery/mockery from 1.6.7 to 1.6.9 Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.7 to 1.6.9. - [Release notes](https://github.com/mockery/mockery/releases) - [Changelog](https://github.com/mockery/mockery/blob/1.6.x/CHANGELOG.md) - [Commits](https://github.com/mockery/mockery/compare/1.6.7...1.6.9) --- updated-dependencies: - dependency-name: mockery/mockery dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update run-tests.yml * Bump league/flysystem-aws-s3-v3 from 3.24.0 to 3.25.1 Bumps [league/flysystem-aws-s3-v3](https://github.com/thephpleague/flysystem-aws-s3-v3) from 3.24.0 to 3.25.1. - [Commits](https://github.com/thephpleague/flysystem-aws-s3-v3/compare/3.24.0...3.25.1) --- updated-dependencies: - dependency-name: league/flysystem-aws-s3-v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump mockery/mockery from 1.6.9 to 1.6.11 Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.9 to 1.6.11. - [Release notes](https://github.com/mockery/mockery/releases) - [Changelog](https://github.com/mockery/mockery/blob/1.6.x/CHANGELOG.md) - [Commits](https://github.com/mockery/mockery/compare/1.6.9...1.6.11) --- updated-dependencies: - dependency-name: mockery/mockery dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * 게시판 수정 사항 (#56) * Update Resources, created_at * Create Post edit * Create PostPolicy * Fix PostEditResource * Create lang (localization) * Update post response message * Create ko language * Fix post edit routes * Update Post factory, user * Publish laravel-errors * Create custom error * Update redirectTo * Fix post model, fillable * Fix styling --------- Co-authored-by: kimchanhyung98 * Bump laravel/pint from 1.14.0 to 1.15.0 Bumps [laravel/pint](https://github.com/laravel/pint) from 1.14.0 to 1.15.0. - [Release notes](https://github.com/laravel/pint/releases) - [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md) - [Commits](https://github.com/laravel/pint/compare/v1.14.0...v1.15.0) --- updated-dependencies: - dependency-name: laravel/pint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump league/flysystem-aws-s3-v3 from 3.25.1 to 3.26.0 Bumps [league/flysystem-aws-s3-v3](https://github.com/thephpleague/flysystem-aws-s3-v3) from 3.25.1 to 3.26.0. - [Commits](https://github.com/thephpleague/flysystem-aws-s3-v3/compare/3.25.1...3.26.0) --- updated-dependencies: - dependency-name: league/flysystem-aws-s3-v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump psalm/plugin-laravel from 2.10.1 to 2.11.0 Bumps [psalm/plugin-laravel](https://github.com/psalm/psalm-plugin-laravel) from 2.10.1 to 2.11.0. - [Release notes](https://github.com/psalm/psalm-plugin-laravel/releases) - [Commits](https://github.com/psalm/psalm-plugin-laravel/compare/v2.10.1...v2.11.0) --- updated-dependencies: - dependency-name: psalm/plugin-laravel dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump laravel/framework from 10.48.3 to 10.48.4 Bumps [laravel/framework](https://github.com/laravel/framework) from 10.48.3 to 10.48.4. - [Release notes](https://github.com/laravel/framework/releases) - [Changelog](https://github.com/laravel/framework/blob/11.x/CHANGELOG.md) - [Commits](https://github.com/laravel/framework/compare/v10.48.3...v10.48.4) --- updated-dependencies: - dependency-name: laravel/framework dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump laravel/sail from 1.28.1 to 1.29.1 Bumps [laravel/sail](https://github.com/laravel/sail) from 1.28.1 to 1.29.1. - [Release notes](https://github.com/laravel/sail/releases) - [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md) - [Commits](https://github.com/laravel/sail/compare/v1.28.1...v1.29.1) --- updated-dependencies: - dependency-name: laravel/sail dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump phpunit/phpunit from 10.5.11 to 10.5.16 Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.11 to 10.5.16. - [Release notes](https://github.com/sebastianbergmann/phpunit/releases) - [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.16/ChangeLog-10.5.md) - [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.11...10.5.16) --- updated-dependencies: - dependency-name: phpunit/phpunit dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * 게시글 검색 기능 추가 (#65) * Bump zircote/swagger-php from 4.8.4 to 4.8.5 (#46) Bumps [zircote/swagger-php](https://github.com/zircote/swagger-php) from 4.8.4 to 4.8.5. - [Release notes](https://github.com/zircote/swagger-php/releases) - [Changelog](https://github.com/zircote/swagger-php/blob/master/Changelog.md) - [Commits](https://github.com/zircote/swagger-php/compare/4.8.4...4.8.5) --- updated-dependencies: - dependency-name: zircote/swagger-php dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump laravel/sail from 1.28.1 to 1.28.2 (#47) Bumps [laravel/sail](https://github.com/laravel/sail) from 1.28.1 to 1.28.2. - [Release notes](https://github.com/laravel/sail/releases) - [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md) - [Commits](https://github.com/laravel/sail/compare/v1.28.1...v1.28.2) --- updated-dependencies: - dependency-name: laravel/sail dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump phpunit/phpunit from 10.5.11 to 10.5.12 (#44) Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.11 to 10.5.12. - [Release notes](https://github.com/sebastianbergmann/phpunit/releases) - [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.12/ChangeLog-10.5.md) - [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.11...10.5.12) --- updated-dependencies: - dependency-name: phpunit/phpunit dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump laravel/framework from 10.46.0 to 10.47.0 (#45) Bumps [laravel/framework](https://github.com/laravel/framework) from 10.46.0 to 10.47.0. - [Release notes](https://github.com/laravel/framework/releases) - [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md) - [Commits](https://github.com/laravel/framework/compare/v10.46.0...v10.47.0) --- updated-dependencies: - dependency-name: laravel/framework dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Add laravel/scout package * Update .env.example * Update post seeding * Add algolia/algoliasearch-client-php package * Create Post searchable * Update post type * Update post index(search) * Fix apple login, jwtConfig construct - Lcobucci\JWT\Configuration is not instantiable - Run 'php artisan route:list' * Add dedoc/scramble package --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump zircote/swagger-php from 4.8.4 to 4.8.7 (#61) Bumps [zircote/swagger-php](https://github.com/zircote/swagger-php) from 4.8.4 to 4.8.7. - [Release notes](https://github.com/zircote/swagger-php/releases) - [Changelog](https://github.com/zircote/swagger-php/blob/master/Changelog.md) - [Commits](https://github.com/zircote/swagger-php/compare/4.8.4...4.8.7) --- updated-dependencies: - dependency-name: zircote/swagger-php dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Bump dependabot/fetch-metadata from 1.6.0 to 2.0.0 (#53) Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 1.6.0 to 2.0.0. - [Release notes](https://github.com/dependabot/fetch-metadata/releases) - [Commits](https://github.com/dependabot/fetch-metadata/compare/v1.6.0...v2.0.0) --- updated-dependencies: - dependency-name: dependabot/fetch-metadata dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 * Fix package update interval * 게시글 예외 처리 (#66) * Update PostController, exception * Update PostController, transaction * Create Post FormRequest * Fix PostSeeder * Update Post ShowResource, is_edit Check if edits are possible * Update UserFactory, email_verified_at null * Update MessageResource --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: kimchanhyung98 --- .env.example | 31 +- .github/dependabot.yml | 4 +- .github/workflows/dependabot-auto-merge.yml | 2 +- .github/workflows/run-tests.yml | 4 +- README.md | 6 + .../Controllers/Account/AppleController.php | 12 +- app/Http/Controllers/ErrorController.php | 13 + .../Controllers/HealthCheckController.php | 5 +- app/Http/Controllers/PostController.php | 113 +- app/Http/Middleware/Authenticate.php | 2 +- app/Http/Requests/Post/IndexRequest.php | 21 + app/Http/Requests/Post/StoreRequest.php | 23 + app/Http/Requests/Post/UpdateRequest.php | 23 + app/Http/Resources/Account/UserResource.php | 1 + app/Http/Resources/MessageResource.php | 19 + .../{MessageResource.php => EditResource.php} | 7 +- app/Http/Resources/Post/IndexResource.php | 3 +- app/Http/Resources/Post/ShowResource.php | 7 +- app/Models/{Board => }/Post.php | 20 +- app/Policies/PostPolicy.php | 54 + app/Providers/AuthServiceProvider.php | 6 +- app/Providers/RouteServiceProvider.php | 2 +- composer.json | 3 + composer.lock | 1840 +++++------------ config/scout.php | 202 ++ config/scramble.php | 78 + database/factories/PostFactory.php | 24 + database/factories/User/UserAppleFactory.php | 26 + database/factories/User/UserKakaoFactory.php | 30 + database/factories/UserFactory.php | 42 +- ..._12_01_000000_create_user_kakaos_table.php | 2 +- .../2023_12_02_000000_create_posts_table.php | 2 +- database/seeders/DatabaseSeeder.php | 9 +- database/seeders/PostSeeder.php | 14 + database/seeders/UserSeeder.php | 18 + lang/en/auth.php | 20 + lang/en/pagination.php | 19 + lang/en/passwords.php | 22 + lang/en/validation.php | 191 ++ lang/ko/auth.php | 20 + lang/ko/pagination.php | 19 + lang/ko/passwords.php | 22 + lang/ko/post.php | 11 + resources/views/errors/401.blade.php | 5 + resources/views/errors/402.blade.php | 5 + resources/views/errors/403.blade.php | 5 + resources/views/errors/404.blade.php | 5 + resources/views/errors/419.blade.php | 5 + resources/views/errors/429.blade.php | 5 + resources/views/errors/500.blade.php | 5 + resources/views/errors/503.blade.php | 5 + resources/views/errors/layout.blade.php | 53 + resources/views/errors/minimal.blade.php | 34 + routes/api.php | 6 +- routes/web.php | 6 +- 55 files changed, 1748 insertions(+), 1383 deletions(-) create mode 100644 app/Http/Controllers/ErrorController.php create mode 100644 app/Http/Requests/Post/IndexRequest.php create mode 100644 app/Http/Requests/Post/StoreRequest.php create mode 100644 app/Http/Requests/Post/UpdateRequest.php create mode 100644 app/Http/Resources/MessageResource.php rename app/Http/Resources/Post/{MessageResource.php => EditResource.php} (56%) rename app/Models/{Board => }/Post.php (61%) create mode 100644 app/Policies/PostPolicy.php create mode 100644 config/scout.php create mode 100644 config/scramble.php create mode 100644 database/factories/PostFactory.php create mode 100644 database/factories/User/UserAppleFactory.php create mode 100644 database/factories/User/UserKakaoFactory.php create mode 100644 database/seeders/PostSeeder.php create mode 100644 database/seeders/UserSeeder.php create mode 100644 lang/en/auth.php create mode 100644 lang/en/pagination.php create mode 100644 lang/en/passwords.php create mode 100644 lang/en/validation.php create mode 100644 lang/ko/auth.php create mode 100644 lang/ko/pagination.php create mode 100644 lang/ko/passwords.php create mode 100644 lang/ko/post.php create mode 100644 resources/views/errors/401.blade.php create mode 100644 resources/views/errors/402.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/errors/419.blade.php create mode 100644 resources/views/errors/429.blade.php create mode 100644 resources/views/errors/500.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/errors/minimal.blade.php diff --git a/.env.example b/.env.example index 32ef4d6..a33bcc3 100644 --- a/.env.example +++ b/.env.example @@ -21,16 +21,6 @@ DB_DATABASE=laravel DB_USERNAME=sail DB_PASSWORD=password -# Mail -MAIL_MAILER=smtp -MAIL_HOST=mailpit -MAIL_PORT=1025 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS="hello@example.com" -MAIL_FROM_NAME="${APP_NAME}" - # Cache CACHE_DRIVER=file QUEUE_CONNECTION=sync @@ -45,6 +35,16 @@ MEMCACHED_HOST=127.0.0.1 SESSION_DRIVER=file SESSION_LIFETIME=120 +# Mail +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + # Broadcast BROADCAST_DRIVER=log #BROADCAST_DRIVER=pusher @@ -74,6 +74,14 @@ SAIL_XDEBUG_CONFIG="client_host=" WWWUSER="www-data" WWWGROUP=1000 +# Laravel Scout +SCOUT_DRIVER=algolia +SCOUT_PREFIX= +SCOUT_QUEUE=false +SCOUT_IDENTIFY=false +#ALGOLIA_APP_ID= +#ALGOLIA_SECRET= + # Laravel Vite VITE_APP_NAME="${APP_NAME}" VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" @@ -83,6 +91,9 @@ VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" # Apple Login +APPLE_TEAM_ID= +APPLE_KEY_ID= +# bundle id (com.company.app) APPLE_CLIENT_ID= APPLE_CLIENT_SECRET= APPLE_REDIRECT_URI= diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3f6bcb1..04be47d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,13 +6,13 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "weekly" + interval: "monthly" labels: - "dependencies" - package-ecosystem: "composer" directory: "/" schedule: - interval: "weekly" + interval: "monthly" labels: - "dependencies" diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index f511b6d..1c46d29 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Dependabot metadata id: metadata - uses: dependabot/fetch-metadata@v1.6.0 + uses: dependabot/fetch-metadata@v2.0.0 with: github-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 5dd08ae..d2ce6e1 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -17,8 +17,8 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest, windows-latest] - php: [8.3] - laravel: [10.*, 11.*] + php: [8.3] # [8.2, 8.3] + laravel: [10.*] # [10.*, 11.*] stability: [prefer-lowest, prefer-stable] include: - laravel: 10.* diff --git a/README.md b/README.md index 9e45159..7192350 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,10 @@ brew install php@8.3 composer composer install sail up # or ./vendor/bin/sail up sail artisan migrate --seed +sail artisan scout:import "App\Models\Post" ``` + +## OpenAPI + +Scramble - Laravel OpenAPI(Swagger) Generator 를 사용하여 API 문서를 확인할 수 있습니다. +- localhost/docs/api diff --git a/app/Http/Controllers/Account/AppleController.php b/app/Http/Controllers/Account/AppleController.php index 9db9c1e..0f254ff 100644 --- a/app/Http/Controllers/Account/AppleController.php +++ b/app/Http/Controllers/Account/AppleController.php @@ -17,12 +17,6 @@ class AppleController extends Controller { public const string PROVIDER = 'apple'; - private function __construct( - public Configuration $jwtConfig - ) { - // construct - } - /** * SocialLogin (Apple) * @@ -73,16 +67,18 @@ public function __invoke(Request $request) */ private function getToken($redirectUri): void { + $jwtConfig = app(Configuration::class); + config()->set('services.apple.redirect', $redirectUri); $now = CarbonImmutable::now(); - $token = $this->jwtConfig->builder() + $token = $jwtConfig->builder() ->issuedBy(config('services.apple.team_id')) ->issuedAt($now) ->expiresAt($now->addHour()) ->permittedFor('https://appleid.apple.com') ->relatedTo(config('services.apple.client_id')) ->withHeader('kid', config('services.apple.key_id')) - ->getToken($this->jwtConfig->signer(), $this->jwtConfig->signingKey()); + ->getToken($jwtConfig->signer(), $jwtConfig->signingKey()); config()->set('services.apple.client_secret', $token->toString()); } diff --git a/app/Http/Controllers/ErrorController.php b/app/Http/Controllers/ErrorController.php new file mode 100644 index 0000000..2b1c1f2 --- /dev/null +++ b/app/Http/Controllers/ErrorController.php @@ -0,0 +1,13 @@ +code ?? 500, $request->message ?? null); + } +} diff --git a/app/Http/Controllers/HealthCheckController.php b/app/Http/Controllers/HealthCheckController.php index 02d1ff8..8eb1f64 100644 --- a/app/Http/Controllers/HealthCheckController.php +++ b/app/Http/Controllers/HealthCheckController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Post; use Illuminate\Http\JsonResponse; class HealthCheckController extends Controller @@ -11,6 +12,8 @@ class HealthCheckController extends Controller */ public function __invoke(): JsonResponse { - return response()->json(['status' => 'healthy']); + return response()->json([ + 'status' => ! Post::first() ? 'unhealthy' : 'healthy', + ]); } } diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php index eec2dda..7bfbab8 100644 --- a/app/Http/Controllers/PostController.php +++ b/app/Http/Controllers/PostController.php @@ -2,75 +2,122 @@ namespace App\Http\Controllers; +use App\Http\Requests\Post\IndexRequest; +use App\Http\Requests\Post\StoreRequest; +use App\Http\Requests\Post\UpdateRequest; +use App\Http\Resources\MessageResource; +use App\Http\Resources\Post\EditResource; use App\Http\Resources\Post\IndexResource; -use App\Http\Resources\Post\MessageResource; use App\Http\Resources\Post\ShowResource; -use App\Models\Board\Post; -use Illuminate\Http\Request; +use App\Models\Post; +use Exception; +use Illuminate\Http\Resources\Json\AnonymousResourceCollection; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Gate; class PostController extends Controller { - public function index(): IndexResource + public function index(IndexRequest $request): AnonymousResourceCollection { - return new IndexResource( - Post::with('user')->paginate(10) + return IndexResource::collection( + Post::search($request->q) + // ->when($request->type, fn ($query, $type) => $query->where('type', $type)) + // ->query(fn (Builder $query) => $query->with('user:id,nickname')) + ->when($request->type, function ($query, $type) { + return $query->where('type', $type); + })->query(function ($query) { + return $query->with('user:id,nickname'); + })->paginate(10) ); } - public function store(Request $request): MessageResource + public function store(StoreRequest $request): MessageResource { - $post = Post::create([ - 'user_id' => Auth::id(), - 'type' => $request->type ?? null, - 'title' => $request->title, - 'contents' => $request->contents, - 'is_open' => $request->is_open ?? false, - ]); + try { + DB::beginTransaction(); + $post = Post::create([ + 'user_id' => Auth::id(), + 'type' => $request->type ?? 'free', + 'title' => $request->title, + 'contents' => $request->contents, + 'is_open' => $request->is_open ?? false, + ]); + DB::commit(); + + $post->searchable(); + } catch (Exception $e) { + DB::rollBack(); + logger($e->getMessage()); + abort(500); + } return new MessageResource([ 'id' => $post->id, - 'message' => '게시글이 등록되었습니다.', + 'message' => __('post.store'), ]); } public function show(Post $post): ShowResource { - $post->increment('hit'); + try { + $post->increment('hit'); + } catch (Exception $e) { + logger($e->getMessage()); + } return new ShowResource($post); } - public function update(Request $request, Post $post): MessageResource + public function edit(Post $post): EditResource { - if ($post->user_id !== Auth::id()) { - abort(403, '게시글 작성자만 수정할 수 있습니다.'); - } + Gate::authorize('update', $post); - $post->update([ - 'type' => $request->type ?? null, - 'title' => $request->title, - 'contents' => $request->contents, - 'is_open' => $request->is_open ?? false, - ]); + return new EditResource($post); + } + + public function update(UpdateRequest $request, Post $post): MessageResource + { + Gate::authorize('update', $post); + + try { + DB::beginTransaction(); + $post->update([ + 'type' => $request->type, + 'title' => $request->title, + 'contents' => $request->contents, + 'is_open' => $request->is_open, + ]); + DB::commit(); + + $post->searchable(); + } catch (Exception $e) { + DB::rollBack(); + logger($e->getMessage()); + abort(500); + } return new MessageResource([ 'id' => $post->id, - 'message' => '게시글이 수정되었습니다.', + 'message' => __('post.update'), ]); } public function destroy(Post $post): MessageResource { - if ($post->user_id !== Auth::id()) { - abort(403, '게시글 작성자만 삭제할 수 있습니다.'); - } + Gate::authorize('delete', $post); + + try { + $post->delete(); - $post->delete(); + $post->unsearchable(); + } catch (Exception $e) { + logger($e->getMessage()); + abort(500); + } return new MessageResource([ - 'id' => 0, - 'message' => '게시글이 삭제되었습니다.', + 'message' => __('post.destroy'), ]); } } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index d4ef644..5cb7e78 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -12,6 +12,6 @@ class Authenticate extends Middleware */ protected function redirectTo(Request $request): ?string { - return $request->expectsJson() ? null : route('login'); + return $request->expectsJson() ? null : 'errors/401'; } } diff --git a/app/Http/Requests/Post/IndexRequest.php b/app/Http/Requests/Post/IndexRequest.php new file mode 100644 index 0000000..495aacd --- /dev/null +++ b/app/Http/Requests/Post/IndexRequest.php @@ -0,0 +1,21 @@ + ['nullable', 'string', 'min:2', 'max:100'], + 'type' => ['nullable', 'string', 'in:free,notice,faq'], + ]; + } + + public function authorize(): bool + { + return true; + } +} diff --git a/app/Http/Requests/Post/StoreRequest.php b/app/Http/Requests/Post/StoreRequest.php new file mode 100644 index 0000000..a7abfc4 --- /dev/null +++ b/app/Http/Requests/Post/StoreRequest.php @@ -0,0 +1,23 @@ + ['nullable', 'string', 'in:free,notice,faq'], + 'title' => ['required', 'string', 'min:2', 'max:100'], + 'contents' => ['required', 'string', 'min:2'], + 'is_open' => ['nullable', 'boolean'], + ]; + } + + public function authorize(): bool + { + return true; + } +} diff --git a/app/Http/Requests/Post/UpdateRequest.php b/app/Http/Requests/Post/UpdateRequest.php new file mode 100644 index 0000000..e2bf345 --- /dev/null +++ b/app/Http/Requests/Post/UpdateRequest.php @@ -0,0 +1,23 @@ + ['nullable', 'string', 'in:free,notice,faq'], + 'title' => ['required', 'string', 'min:2', 'max:100'], + 'contents' => ['required', 'string', 'min:2'], + 'is_open' => ['nullable', 'boolean'], + ]; + } + + public function authorize(): bool + { + return true; + } +} diff --git a/app/Http/Resources/Account/UserResource.php b/app/Http/Resources/Account/UserResource.php index c069b85..8173551 100644 --- a/app/Http/Resources/Account/UserResource.php +++ b/app/Http/Resources/Account/UserResource.php @@ -16,6 +16,7 @@ public function toArray(Request $request): array 'email' => $this->email, 'phone' => $this->phone, 'provider' => $this->provider, + 'created_at' => $this->created_at, ]; } } diff --git a/app/Http/Resources/MessageResource.php b/app/Http/Resources/MessageResource.php new file mode 100644 index 0000000..a61f259 --- /dev/null +++ b/app/Http/Resources/MessageResource.php @@ -0,0 +1,19 @@ +mergeWhen(isset($this->resource['id']), [ + 'id' => $this->resource['id'] ?? null, + ]), + 'message' => $this->resource['message'], + ]; + } +} diff --git a/app/Http/Resources/Post/MessageResource.php b/app/Http/Resources/Post/EditResource.php similarity index 56% rename from app/Http/Resources/Post/MessageResource.php rename to app/Http/Resources/Post/EditResource.php index 18a38f3..22dacef 100644 --- a/app/Http/Resources/Post/MessageResource.php +++ b/app/Http/Resources/Post/EditResource.php @@ -5,13 +5,16 @@ use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; -class MessageResource extends JsonResource +class EditResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, - 'message' => $this->message, + 'type' => $this->type, + 'title' => $this->title, + 'contents' => $this->contents, + 'is_open' => $this->is_open, ]; } } diff --git a/app/Http/Resources/Post/IndexResource.php b/app/Http/Resources/Post/IndexResource.php index e07242a..b793845 100644 --- a/app/Http/Resources/Post/IndexResource.php +++ b/app/Http/Resources/Post/IndexResource.php @@ -13,11 +13,12 @@ public function toArray(Request $request): array 'id' => $this->id, 'user' => [ 'id' => $this->user->id, - 'name' => $this->user->name, + 'name' => $this->user->nickname, ], 'type' => $this->type, 'title' => $this->title, 'hit' => $this->hit, + 'created_at' => $this->created_at, ]; } } diff --git a/app/Http/Resources/Post/ShowResource.php b/app/Http/Resources/Post/ShowResource.php index 879285e..84cd7c2 100644 --- a/app/Http/Resources/Post/ShowResource.php +++ b/app/Http/Resources/Post/ShowResource.php @@ -4,6 +4,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Support\Facades\Auth; class ShowResource extends JsonResource { @@ -12,13 +13,15 @@ public function toArray(Request $request): array return [ 'id' => $this->id, 'user' => [ - 'id' => $this->user->id, - 'name' => $this->user->name, + // 'id' => $this->user->id, + 'name' => $this->user->nickname, ], 'type' => $this->type, 'title' => $this->title, 'contents' => $this->contents, 'hit' => $this->hit, + 'is_edit' => $this->user->id === Auth::guard('sanctum')->id(), + 'created_at' => $this->created_at, ]; } } diff --git a/app/Models/Board/Post.php b/app/Models/Post.php similarity index 61% rename from app/Models/Board/Post.php rename to app/Models/Post.php index 66b82ef..dd0b2c7 100644 --- a/app/Models/Board/Post.php +++ b/app/Models/Post.php @@ -1,26 +1,29 @@ 'boolean', ]; - protected static function booted(): void + public function toSearchableArray(): array { - static::addGlobalScope(new ViewablePostScope); + return [ + 'title' => $this->title, + 'contents' => $this->contents, + ]; } public function user(): BelongsTo diff --git a/app/Policies/PostPolicy.php b/app/Policies/PostPolicy.php new file mode 100644 index 0000000..edf5519 --- /dev/null +++ b/app/Policies/PostPolicy.php @@ -0,0 +1,54 @@ +id === $post->user_id + ? Response::allow() + : Response::deny(__('post.update_denied')); + } + + /** + * Determine whether the user can delete the model. + */ + public function delete(User $user, Post $post): Response + { + return $user->id === $post->user_id + ? Response::allow() + : Response::deny(__('post.destroy_denied')); + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 54756cd..8216940 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -3,6 +3,8 @@ namespace App\Providers; // use Illuminate\Support\Facades\Gate; +use App\Models\Post; +use App\Policies\PostPolicy; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider @@ -13,7 +15,7 @@ class AuthServiceProvider extends ServiceProvider * @var array */ protected $policies = [ - // + Post::class => PostPolicy::class, ]; /** @@ -21,6 +23,6 @@ class AuthServiceProvider extends ServiceProvider */ public function boot(): void { - // + // $this->registerPolicies(); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 1cf5f15..973b544 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/home'; + public const HOME = '/'; /** * Define your route model bindings, pattern filters, and other route configuration. diff --git a/composer.json b/composer.json index 21c5b2c..f4ef424 100644 --- a/composer.json +++ b/composer.json @@ -11,10 +11,12 @@ "license": "MIT", "require": { "php": "^8.3", + "algolia/algoliasearch-client-php": "^3.4", "doctrine/dbal": "^3.7", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.10", "laravel/sanctum": "^3.3", + "laravel/scout": "^10.8", "laravel/socialite": "^5.9", "laravel/tinker": "^2.8", "league/flysystem-aws-s3-v3": "^3.16", @@ -24,6 +26,7 @@ }, "require-dev": { "beyondcode/laravel-query-detector": "^1.7", + "dedoc/scramble": "^0.8", "fakerphp/faker": "^1.9.1", "kimchanhyung98/laravel-maker": "^0.1.0", "larastan/larastan": "^2.8", diff --git a/composer.lock b/composer.lock index 0f03bf2..5880ecd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,82 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "74842c3cee12583c69d89d7aa4523a7f", + "content-hash": "5691dbfac8402ffb3ed09ad225603a49", "packages": [ + { + "name": "algolia/algoliasearch-client-php", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/algolia/algoliasearch-client-php.git", + "reference": "cf87b649f745479c0800299481d91dc303e23cea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/algolia/algoliasearch-client-php/zipball/cf87b649f745479c0800299481d91dc303e23cea", + "reference": "cf87b649f745479c0800299481d91dc303e23cea", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.3 || ^8.0", + "psr/http-message": "^1.1 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "fzaninotto/faker": "^1.8", + "phpunit/phpunit": "^8.0 || ^9.0", + "symfony/yaml": "^2.0 || ^4.0" + }, + "suggest": { + "guzzlehttp/guzzle": "If you prefer to use Guzzle HTTP client instead of the Http Client implementation provided by the package" + }, + "bin": [ + "bin/algolia-doctor" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/Http/Psr7/functions.php", + "src/functions.php" + ], + "psr-4": { + "Algolia\\AlgoliaSearch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Algolia Team", + "email": "contact@algolia.com" + } + ], + "description": "Algolia Search API Client for PHP", + "keywords": [ + "algolia", + "api", + "client", + "php", + "search" + ], + "support": { + "issues": "https://github.com/algolia/algoliasearch-client-php/issues", + "source": "https://github.com/algolia/algoliasearch-client-php/tree/3.4.1" + }, + "time": "2023-08-28T14:34:04+00:00" + }, { "name": "aws/aws-crt-php", "version": "v1.2.4", @@ -62,16 +136,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.300.10", + "version": "3.302.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "b24bf7882fed0ef029996dcdcba6c273b69db8fe" + "reference": "cb343ed4fc5d86c0ddf8e948f0271052f183f937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b24bf7882fed0ef029996dcdcba6c273b69db8fe", - "reference": "b24bf7882fed0ef029996dcdcba6c273b69db8fe", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/cb343ed4fc5d86c0ddf8e948f0271052f183f937", + "reference": "cb343ed4fc5d86c0ddf8e948f0271052f183f937", "shasum": "" }, "require": { @@ -151,9 +225,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.300.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.302.0" }, - "time": "2024-03-04T19:06:07+00:00" + "time": "2024-03-29T18:07:04+00:00" }, { "name": "brick/math", @@ -1603,16 +1677,16 @@ }, { "name": "laravel/framework", - "version": "v10.46.0", + "version": "v10.48.4", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "5e95946a8283a8d5c015035793f9c61c297e937f" + "reference": "7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/5e95946a8283a8d5c015035793f9c61c297e937f", - "reference": "5e95946a8283a8d5c015035793f9c61c297e937f", + "url": "https://api.github.com/repos/laravel/framework/zipball/7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72", + "reference": "7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72", "shasum": "" }, "require": { @@ -1660,6 +1734,7 @@ "conflict": { "carbonphp/carbon-doctrine-types": ">=3.0", "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, @@ -1716,7 +1791,7 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.18", + "orchestra/testbench-core": "^8.23.4", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^10.0.7", @@ -1805,20 +1880,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-02-27T16:46:54+00:00" + "time": "2024-03-21T13:36:36+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.16", + "version": "v0.1.17", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781" + "reference": "8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781", - "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781", + "url": "https://api.github.com/repos/laravel/prompts/zipball/8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5", + "reference": "8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5", "shasum": "" }, "require": { @@ -1860,9 +1935,9 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.16" + "source": "https://github.com/laravel/prompts/tree/v0.1.17" }, - "time": "2024-02-21T19:25:27+00:00" + "time": "2024-03-13T16:05:43+00:00" }, { "name": "laravel/sanctum", @@ -1930,6 +2005,84 @@ }, "time": "2023-12-19T18:44:48+00:00" }, + { + "name": "laravel/scout", + "version": "v10.8.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/scout.git", + "reference": "de4000a0044c0c13d513132af82562397da70d52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/scout/zipball/de4000a0044c0c13d513132af82562397da70d52", + "reference": "de4000a0044c0c13d513132af82562397da70d52", + "shasum": "" + }, + "require": { + "illuminate/bus": "^9.0|^10.0|^11.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", + "illuminate/database": "^9.0|^10.0|^11.0", + "illuminate/http": "^9.0|^10.0|^11.0", + "illuminate/pagination": "^9.0|^10.0|^11.0", + "illuminate/queue": "^9.0|^10.0|^11.0", + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "algolia/algoliasearch-client-php": "^3.2", + "meilisearch/meilisearch-php": "^1.0", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.31|^8.11|^9.0", + "php-http/guzzle7-adapter": "^1.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.3|^10.4", + "typesense/typesense-php": "^4.9" + }, + "suggest": { + "algolia/algoliasearch-client-php": "Required to use the Algolia engine (^3.2).", + "meilisearch/meilisearch-php": "Required to use the Meilisearch engine (^1.0).", + "typesense/typesense-php": "Required to use the Typesense engine (^4.9)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Scout\\ScoutServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Scout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Scout provides a driver based solution to searching your Eloquent models.", + "keywords": [ + "algolia", + "laravel", + "search" + ], + "support": { + "issues": "https://github.com/laravel/scout/issues", + "source": "https://github.com/laravel/scout" + }, + "time": "2024-03-26T16:46:57+00:00" + }, { "name": "laravel/serializable-closure", "version": "v1.3.3", @@ -2453,16 +2606,16 @@ }, { "name": "league/flysystem", - "version": "3.24.0", + "version": "3.26.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675" + "reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/072735c56cc0da00e10716dd90d5a7f7b40b36be", + "reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be", "shasum": "" }, "require": { @@ -2490,7 +2643,7 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.34", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", "sabre/dav": "^4.6.0" @@ -2527,7 +2680,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.24.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.26.0" }, "funding": [ { @@ -2539,20 +2692,20 @@ "type": "github" } ], - "time": "2024-02-04T12:10:17+00:00" + "time": "2024-03-25T11:49:53+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.24.0", + "version": "3.26.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513" + "reference": "885d0a758c71ae3cd6c503544573a1fdb8dc754f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513", - "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/885d0a758c71ae3cd6c503544573a1fdb8dc754f", + "reference": "885d0a758c71ae3cd6c503544573a1fdb8dc754f", "shasum": "" }, "require": { @@ -2592,7 +2745,7 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.24.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.26.0" }, "funding": [ { @@ -2604,20 +2757,20 @@ "type": "github" } ], - "time": "2024-01-26T18:43:21+00:00" + "time": "2024-03-24T21:11:18+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.1", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", "shasum": "" }, "require": { @@ -2651,8 +2804,7 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" }, "funding": [ { @@ -2664,7 +2816,7 @@ "type": "github" } ], - "time": "2024-01-26T18:25:23+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/mime-type-detection", @@ -3222,21 +3374,21 @@ }, { "name": "nikic/php-parser", - "version": "v4.18.0", + "version": "v4.19.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -3272,9 +3424,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" }, - "time": "2023-12-10T21:03:43+00:00" + "time": "2024-03-17T08:10:35+00:00" }, { "name": "nunomaduro/termwind", @@ -3961,16 +4113,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.0", + "version": "v0.12.2", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d", + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d", "shasum": "" }, "require": { @@ -4034,9 +4186,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.2" }, - "time": "2023-12-20T15:28:09+00:00" + "time": "2024-03-17T01:53:00+00:00" }, { "name": "ralouphie/getallheaders", @@ -6953,16 +7105,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -6974,8 +7126,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -7030,7 +7182,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -7038,7 +7190,7 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", @@ -7119,48 +7271,48 @@ }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.15.1", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b" + "reference": "bc1d67f01ce8c77e3f97d48ba51fa1d81874f622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/77831852bb7bc54f287246d32eb91274eaf87f8b", - "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/bc1d67f01ce8c77e3f97d48ba51fa1d81874f622", + "reference": "bc1d67f01ce8c77e3f97d48ba51fa1d81874f622", "shasum": "" }, "require": { - "barryvdh/reflection-docblock": "^2.0.6", + "barryvdh/reflection-docblock": "^2.1.1", "composer/class-map-generator": "^1.0", - "doctrine/dbal": "^2.6 || ^3.1.4", "ext-json": "*", - "illuminate/console": "^9 || ^10", - "illuminate/filesystem": "^9 || ^10", - "illuminate/support": "^9 || ^10", + "illuminate/console": "^10 || ^11", + "illuminate/database": "^10.38 || ^11", + "illuminate/filesystem": "^10 || ^11", + "illuminate/support": "^10 || ^11", "nikic/php-parser": "^4.18 || ^5", - "php": "^8.0", + "php": "^8.1", "phpdocumentor/type-resolver": "^1.1.0" }, "require-dev": { "ext-pdo_sqlite": "*", "friendsofphp/php-cs-fixer": "^3", - "illuminate/config": "^9 || ^10", - "illuminate/view": "^9 || ^10", + "illuminate/config": "^9 || ^10 || ^11", + "illuminate/view": "^9 || ^10 || ^11", "mockery/mockery": "^1.4", - "orchestra/testbench": "^7 || ^8", - "phpunit/phpunit": "^9", - "spatie/phpunit-snapshot-assertions": "^4", + "orchestra/testbench": "^8 || ^9", + "phpunit/phpunit": "^10.5", + "spatie/phpunit-snapshot-assertions": "^4 || ^5", "vimeo/psalm": "^5.4" }, "suggest": { - "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." + "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.15-dev" + "dev-master": "3.0-dev" }, "laravel": { "providers": [ @@ -7197,7 +7349,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.15.1" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.0.0" }, "funding": [ { @@ -7209,7 +7361,7 @@ "type": "github" } ], - "time": "2024-02-15T14:23:20+00:00" + "time": "2024-03-01T12:53:18+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -7325,16 +7477,16 @@ }, { "name": "composer/class-map-generator", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" + "reference": "8286a62d243312ed99b3eee20d5005c961adb311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8286a62d243312ed99b3eee20d5005c961adb311", + "reference": "8286a62d243312ed99b3eee20d5005c961adb311", "shasum": "" }, "require": { @@ -7378,7 +7530,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.0" + "source": "https://github.com/composer/class-map-generator/tree/1.1.1" }, "funding": [ { @@ -7394,20 +7546,20 @@ "type": "tidelift" } ], - "time": "2023-06-30T13:58:57+00:00" + "time": "2024-03-15T12:53:41+00:00" }, { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -7449,7 +7601,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -7465,7 +7617,7 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "composer/semver", @@ -7550,16 +7702,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -7570,7 +7722,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -7594,9 +7746,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -7612,7 +7764,82 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" + }, + { + "name": "dedoc/scramble", + "version": "v0.8.6", + "source": { + "type": "git", + "url": "https://github.com/dedoc/scramble.git", + "reference": "f0331d5cde68cf14ce6287006ae536e5b9ed6df2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dedoc/scramble/zipball/f0331d5cde68cf14ce6287006ae536e5b9ed6df2", + "reference": "f0331d5cde68cf14ce6287006ae536e5b9ed6df2", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0.0|^9.0.0|^10.0.0", + "nikic/php-parser": "^4.0", + "php": "^8.1", + "phpstan/phpdoc-parser": "^1.0", + "spatie/laravel-package-tools": "^1.9.2" + }, + "require-dev": { + "doctrine/dbal": "^3.4", + "laravel/pint": "^v1.1.0", + "nunomaduro/collision": "^5.0|^v6.0", + "orchestra/testbench": "^6.0|^7.0|^8.0", + "pestphp/pest": "^1.21", + "pestphp/pest-plugin-laravel": "^1.2", + "phpunit/phpunit": "^9.5", + "spatie/pest-plugin-snapshots": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Dedoc\\Scramble\\ScrambleServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Dedoc\\Scramble\\": "src", + "Dedoc\\Scramble\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Lytvynenko", + "email": "litvinenko95@gmail.com", + "role": "Developer" + } + ], + "description": "Automatic generation of API documentation for Laravel applications.", + "homepage": "https://github.com/dedoc/scramble", + "keywords": [ + "documentation", + "laravel", + "openapi" + ], + "support": { + "issues": "https://github.com/dedoc/scramble/issues", + "source": "https://github.com/dedoc/scramble/tree/v0.8.6" + }, + "funding": [ + { + "url": "https://github.com/romalytvynenko", + "type": "github" + } + ], + "time": "2024-03-03T18:32:22+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -8172,16 +8399,16 @@ }, { "name": "laravel/pint", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e" + "reference": "c52de679b3ac01207016c179d7ce173e4be128c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/6b127276e3f263f7bb17d5077e9e0269e61b2a0e", - "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e", + "url": "https://api.github.com/repos/laravel/pint/zipball/c52de679b3ac01207016c179d7ce173e4be128c4", + "reference": "c52de679b3ac01207016c179d7ce173e4be128c4", "shasum": "" }, "require": { @@ -8234,20 +8461,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-02-20T17:38:05+00:00" + "time": "2024-03-26T16:40:24+00:00" }, { "name": "laravel/sail", - "version": "v1.28.1", + "version": "v1.29.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "f84e444a3dbc1811803cd2a050bdd54ff6f5eef8" + "reference": "8be4a31150eab3b46af11a2e7b2c4632eefaad7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/f84e444a3dbc1811803cd2a050bdd54ff6f5eef8", - "reference": "f84e444a3dbc1811803cd2a050bdd54ff6f5eef8", + "url": "https://api.github.com/repos/laravel/sail/zipball/8be4a31150eab3b46af11a2e7b2c4632eefaad7e", + "reference": "8be4a31150eab3b46af11a2e7b2c4632eefaad7e", "shasum": "" }, "require": { @@ -8255,6 +8482,7 @@ "illuminate/contracts": "^9.52.16|^10.0|^11.0", "illuminate/support": "^9.52.16|^10.0|^11.0", "php": "^8.0", + "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { @@ -8296,20 +8524,20 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-02-23T00:24:47+00:00" + "time": "2024-03-20T20:09:31+00:00" }, { "name": "mockery/mockery", - "version": "1.6.7", + "version": "1.6.11", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + "reference": "81a161d0b135df89951abd52296adf97deb0723d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", "shasum": "" }, "require": { @@ -8321,8 +8549,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "symplify/easy-coding-standard": "^12.0.8" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -8379,7 +8607,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-12-10T02:24:34+00:00" + "time": "2024-03-21T18:34:15+00:00" }, { "name": "myclabs/deep-copy", @@ -8588,57 +8816,68 @@ "time": "2023-10-11T15:45:01+00:00" }, { - "name": "orchestra/canvas", - "version": "v8.11.7", + "name": "orchestra/testbench-core", + "version": "v8.23.5", "source": { "type": "git", - "url": "https://github.com/orchestral/canvas.git", - "reference": "e4a0157f522222725f1559bde0da1091a91542fb" + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "0e5c930d247f50d1d6d5997441e57891af862634" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/e4a0157f522222725f1559bde0da1091a91542fb", - "reference": "e4a0157f522222725f1559bde0da1091a91542fb", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/0e5c930d247f50d1d6d5997441e57891af862634", + "reference": "0e5c930d247f50d1d6d5997441e57891af862634", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "composer/semver": "^3.0", - "illuminate/console": "^10.39", - "illuminate/database": "^10.39", - "illuminate/filesystem": "^10.39", - "illuminate/support": "^10.39", - "orchestra/canvas-core": "^8.10.2", - "orchestra/testbench-core": "^8.19", "php": "^8.1", - "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" + "symfony/polyfill-php83": "^1.28" + }, + "conflict": { + "brianium/paratest": "<6.4.0 || >=7.0.0 <7.1.4 || >=8.0.0", + "laravel/framework": "<10.48.2 || >=11.0.0", + "nunomaduro/collision": "<6.4.0 || >=7.0.0 <7.4.0 || >=8.0.0", + "orchestra/testbench-dusk": "<8.21.0 || >=9.0.0", + "orchestra/workbench": "<1.0.0", + "phpunit/phpunit": "<9.6.0 || >=10.6.0" }, "require-dev": { - "laravel/framework": "^10.39", + "fakerphp/faker": "^1.21", + "laravel/framework": "^10.48.2", "laravel/pint": "^1.6", "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.5", + "phpstan/phpstan": "^1.10.7", "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.32.4" + "spatie/laravel-ray": "^1.32.4", + "symfony/process": "^6.2", + "symfony/yaml": "^6.2", + "vlucas/phpdotenv": "^5.4.1" + }, + "suggest": { + "brianium/paratest": "Allow using parallel testing (^6.4 || ^7.1.4).", + "ext-pcntl": "Required to use all features of the console signal trapping.", + "fakerphp/faker": "Allow using Faker for testing (^1.21).", + "laravel/framework": "Required for testing (^10.48.2).", + "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.4).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^9.6 || ^10.1).", + "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^6.2).", + "symfony/yaml": "Required for Testbench CLI (^6.2).", + "vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)." }, "bin": [ - "canvas" + "testbench" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.0-dev" - }, - "laravel": { - "providers": [ - "Orchestra\\Canvas\\LaravelServiceProvider" - ] - } - }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Orchestra\\Canvas\\": "src/" + "Orchestra\\Testbench\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8646,353 +8885,70 @@ "MIT" ], "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, { "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" } ], - "description": "Code Generators for Laravel Applications and Packages", + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", + "keywords": [ + "BDD", + "TDD", + "dev", + "laravel", + "laravel-packages", + "testing" + ], "support": { - "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v8.11.7" + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench-core" }, - "time": "2024-02-07T10:29:23+00:00" + "time": "2024-03-25T04:32:37+00:00" }, { - "name": "orchestra/canvas-core", - "version": "v8.10.2", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/orchestral/canvas-core.git", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "composer-runtime-api": "^2.2", - "composer/semver": "^3.0", - "illuminate/console": "^10.38.1", - "illuminate/filesystem": "^10.38.1", - "php": "^8.1", - "symfony/polyfill-php83": "^1.28" - }, - "conflict": { - "orchestra/canvas": "<8.11.0", - "orchestra/testbench-core": "<8.2.0" - }, - "require-dev": { - "laravel/framework": "^10.38.1", - "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.19", - "phpstan/phpstan": "^1.10.6", - "phpunit/phpunit": "^10.1", - "symfony/yaml": "^6.2" + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.0-dev" - }, - "laravel": { - "providers": [ - "Orchestra\\Canvas\\Core\\LaravelServiceProvider" - ] + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Orchestra\\Canvas\\Core\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Code Generators Builder for Laravel Applications and Packages", - "support": { - "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas-core/tree/v8.10.2" - }, - "time": "2023-12-28T01:27:59+00:00" - }, - { - "name": "orchestra/testbench", - "version": "v8.21.1", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "c22a81802a68e746e032edf65cbb68af28a52670" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/c22a81802a68e746e032edf65cbb68af28a52670", - "reference": "c22a81802a68e746e032edf65cbb68af28a52670", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.40", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.21.1", - "orchestra/workbench": "^1.2 || ^8.2", - "php": "^8.1", - "phpunit/phpunit": "^9.6 || ^10.1", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", - "vlucas/phpdotenv": "^5.4.1" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v8.21.1" - }, - "time": "2024-01-22T03:22:22+00:00" - }, - { - "name": "orchestra/testbench-core", - "version": "v8.22.1", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "b0006c092694828f4b0fa409a369b798e5e26f8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b0006c092694828f4b0fa409a369b798e5e26f8d", - "reference": "b0006c092694828f4b0fa409a369b798e5e26f8d", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "php": "^8.1", - "symfony/polyfill-php83": "^1.28" - }, - "conflict": { - "brianium/paratest": "<6.4.0 || >=7.0.0 <7.1.4 || >=8.0.0", - "laravel/framework": "<10.40 || >=11.0.0", - "nunomaduro/collision": "<6.4.0 || >=7.0.0 <7.4.0 || >=8.0.0", - "orchestra/testbench-dusk": "<8.21.0 || >=9.0.0", - "orchestra/workbench": "<1.0.0", - "phpunit/phpunit": "<9.6.0 || >=10.6.0" - }, - "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.40", - "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.32.4", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", - "vlucas/phpdotenv": "^5.4.1" - }, - "suggest": { - "brianium/paratest": "Allow using parallel testing (^6.4 || ^7.1.4).", - "ext-pcntl": "Required to use all features of the console signal trapping.", - "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^10.40).", - "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.4).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.6 || ^10.1).", - "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^6.2).", - "symfony/yaml": "Required for Testbench CLI (^6.2).", - "vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)." - }, - "bin": [ - "testbench" - ], - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Orchestra\\Testbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" - }, - "time": "2024-02-21T23:33:22+00:00" - }, - { - "name": "orchestra/workbench", - "version": "v8.3.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/workbench.git", - "reference": "1246c7ffd0ab8b1cbf9a9b346a50921dd83bc24b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/1246c7ffd0ab8b1cbf9a9b346a50921dd83bc24b", - "reference": "1246c7ffd0ab8b1cbf9a9b346a50921dd83bc24b", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.38.1", - "laravel/tinker": "^2.8.2", - "orchestra/canvas": "^8.11.4", - "orchestra/testbench-core": "^8.22", - "php": "^8.1", - "spatie/laravel-ray": "^1.32.4", - "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" - }, - "require-dev": { - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^10.1", - "symfony/process": "^6.2" - }, - "suggest": { - "ext-pcntl": "Required to use all features of the console signal trapping." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Orchestra\\Workbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Workbench Companion for Laravel Packages Development", - "keywords": [ - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v8.3.0" - }, - "time": "2024-03-03T14:32:38+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { "name": "Sebastian Heuer", @@ -9327,16 +9283,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.26.0", + "version": "1.27.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" + "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757", + "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757", "shasum": "" }, "require": { @@ -9368,22 +9324,22 @@ "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/1.26.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0" }, - "time": "2024-02-23T16:05:55+00:00" + "time": "2024-03-21T13:14:53+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.59", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e607609388d3a6d418a50a49f7940e8086798281" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", - "reference": "e607609388d3a6d418a50a49f7940e8086798281", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -9432,20 +9388,20 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:59:13+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.12", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/842f72662d6b9edda84c4b6f13885fd9cd53dc63", - "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { @@ -9502,7 +9458,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/10.1.12" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -9510,7 +9466,7 @@ "type": "github" } ], - "time": "2024-03-02T07:22:05+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", @@ -9757,16 +9713,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.11", + "version": "10.5.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4" + "reference": "18f8d4a5f52b61fdd9370aaae3167daa0eeb69cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", - "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/18f8d4a5f52b61fdd9370aaae3167daa0eeb69cd", + "reference": "18f8d4a5f52b61fdd9370aaae3167daa0eeb69cd", "shasum": "" }, "require": { @@ -9838,7 +9794,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.11" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.16" }, "funding": [ { @@ -9854,38 +9810,60 @@ "type": "tidelift" } ], - "time": "2024-02-25T14:05:00+00:00" + "time": "2024-03-28T10:08:10+00:00" }, { - "name": "pimple/pimple", - "version": "v3.5.0", + "name": "psalm/plugin-laravel", + "version": "v2.11.0", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + "url": "https://github.com/psalm/psalm-plugin-laravel.git", + "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "url": "https://api.github.com/repos/psalm/psalm-plugin-laravel/zipball/ffd51399b672959331ed3ef4eaae13984474e2f0", + "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" + "barryvdh/laravel-ide-helper": "^2.13 || ^3.0", + "ext-simplexml": "*", + "illuminate/config": "^10.48 || ^11.0", + "illuminate/container": "^10.48 || ^11.0", + "illuminate/contracts": "^10.48 || ^11.0", + "illuminate/database": "^10.48 || ^11.0", + "illuminate/events": "^10.48 || ^11.0", + "illuminate/http": "^10.48 || ^11.0", + "illuminate/routing": "^10.48 || ^11.0", + "illuminate/support": "^10.48 || ^11.0", + "illuminate/view": "^10.48 || ^11.0", + "nikic/php-parser": "^4.18 || ^5.0", + "orchestra/testbench-core": "^8.22 || ^9.0", + "php": "^8.1", + "symfony/console": "^6.0 || ^7.0", + "symfony/finder": "^6.0 || ^7.0", + "vimeo/psalm": "^5.20" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" + "laravel/framework": "^10.48 || ^11.0", + "phpunit/phpunit": "^10.5 || ^11.0", + "phpyh/psalm-tester": "^0.1.0", + "ramsey/collection": "^1.3", + "rector/rector": "^1.0", + "slevomat/coding-standard": "^8.8", + "squizlabs/php_codesniffer": "*", + "symfony/http-foundation": "^6.0 || ^7.0" }, - "type": "library", + "type": "psalm-plugin", "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" + "psalm": { + "pluginClass": "Psalm\\LaravelPlugin\\Plugin" } }, "autoload": { - "psr-0": { - "Pimple": "src/" + "psr-4": { + "Psalm\\LaravelPlugin\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9894,162 +9872,30 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Matthew Brown", + "email": "github@muglug.com" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], + "description": "Psalm plugin for Laravel", + "homepage": "https://github.com/psalm/psalm-plugin-laravel", "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + "issues": "https://github.com/psalm/psalm-plugin-laravel/issues", + "source": "https://github.com/psalm/psalm-plugin-laravel/tree/v2.11.0" }, - "time": "2021-10-28T11:13:42+00:00" + "time": "2024-03-19T21:40:03+00:00" }, { - "name": "psalm/plugin-laravel", - "version": "v2.8.0", + "name": "roave/security-advisories", + "version": "dev-latest", "source": { "type": "git", - "url": "https://github.com/psalm/psalm-plugin-laravel.git", - "reference": "0b42a51f977d216e0b5d649f68346e2f324f4a55" + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "6900b812a02fbea68608e13e112d1e0a9b02a370" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-laravel/zipball/0b42a51f977d216e0b5d649f68346e2f324f4a55", - "reference": "0b42a51f977d216e0b5d649f68346e2f324f4a55", - "shasum": "" - }, - "require": { - "barryvdh/laravel-ide-helper": "^2.13", - "ext-simplexml": "*", - "illuminate/config": "^9.48 || ^10.0", - "illuminate/container": "^9.48 || ^10.0", - "illuminate/contracts": "^9.48 || ^10.0", - "illuminate/database": "^9.48 || ^10.0", - "illuminate/events": "^9.48 || ^10.0", - "illuminate/http": "^9.48 || ^10.0", - "illuminate/routing": "^9.48 || ^10.0", - "illuminate/support": "^9.48 || ^10.0", - "illuminate/view": "^9.48 || ^10.0", - "nikic/php-parser": "^4.13", - "orchestra/testbench": "^7.19 || ^8.0", - "php": "^8.0.2", - "symfony/console": "^6.0", - "vimeo/psalm": "^4.30 || ^5.1" - }, - "require-dev": { - "codeception/codeception": "^5.0", - "codeception/module-asserts": "^3.0", - "codeception/module-cli": "^2.0", - "codeception/module-filesystem": "^3.0", - "codeception/module-phpbrowser": "^3.0", - "phpunit/phpunit": "^9.6 || ^10.0", - "ramsey/collection": "^1.3", - "slevomat/coding-standard": "^8.8", - "squizlabs/php_codesniffer": "*", - "symfony/http-foundation": "^6.0" - }, - "type": "psalm-plugin", - "extra": { - "psalm": { - "pluginClass": "Psalm\\LaravelPlugin\\Plugin" - } - }, - "autoload": { - "psr-4": { - "Psalm\\LaravelPlugin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown", - "email": "github@muglug.com" - } - ], - "description": "A Laravel plugin for Psalm", - "homepage": "https://github.com/psalm/psalm-plugin-laravel", - "support": { - "issues": "https://github.com/psalm/psalm-plugin-laravel/issues", - "source": "https://github.com/psalm/psalm-plugin-laravel/tree/v2.8.0" - }, - "time": "2023-02-26T18:23:48+00:00" - }, - { - "name": "rector/rector", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/rectorphp/rector.git", - "reference": "7596fa6da06c6a20c012efe6bb3d9188a9113b11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/7596fa6da06c6a20c012efe6bb3d9188a9113b11", - "reference": "7596fa6da06c6a20c012efe6bb3d9188a9113b11", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.57" - }, - "conflict": { - "rector/rector-doctrine": "*", - "rector/rector-downgrade-php": "*", - "rector/rector-phpunit": "*", - "rector/rector-symfony": "*" - }, - "bin": [ - "bin/rector" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Instant Upgrade and Automated Refactoring of any PHP code", - "keywords": [ - "automation", - "dev", - "migration", - "refactoring" - ], - "support": { - "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2024-03-03T12:32:31+00:00" - }, - { - "name": "roave/security-advisories", - "version": "dev-latest", - "source": { - "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "da77e3d08db7ecddce118186977b21d04149b2f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/da77e3d08db7ecddce118186977b21d04149b2f9", - "reference": "da77e3d08db7ecddce118186977b21d04149b2f9", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/6900b812a02fbea68608e13e112d1e0a9b02a370", + "reference": "6900b812a02fbea68608e13e112d1e0a9b02a370", "shasum": "" }, "conflict": { @@ -10103,7 +9949,7 @@ "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", - "bref/bref": "<2.1.13", + "bref/bref": "<2.1.17", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", @@ -10128,11 +9974,11 @@ "cockpit-hq/cockpit": "<=2.6.3|==2.7", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<=4.4.2", + "codeigniter4/framework": "<4.4.7", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7", - "concrete5/concrete5": "<9.2.5", + "concrete5/concrete5": "<9.2.7", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", @@ -10195,7 +10041,7 @@ "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.34", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", @@ -10232,15 +10078,16 @@ "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", "froxlor/froxlor": "<=2.1.1", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.44", + "getgrav/grav": "<1.7.45", "getkirby/cms": "<4.1.1", "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", @@ -10268,13 +10115,14 @@ "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.4", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", @@ -10294,6 +10142,7 @@ "james-heinrich/phpthumb": "<1.7.12", "jasig/phpcas": "<1.3.3", "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", @@ -10310,7 +10159,7 @@ "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<2.1", + "kimai/kimai": "<2.13", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -10335,7 +10184,7 @@ "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", @@ -10370,7 +10219,7 @@ "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.3", + "moodle/moodle": "<=4.3.3", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "mpdf/mpdf": "<=7.1.7", @@ -10415,8 +10264,8 @@ "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", - "oro/customer-portal": ">=4.2,<=4.2.8|>=5,<5.0.11|>=5.1,<5.1.1", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<5.0.8", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", "oxid-esales/oxideshop-ce": "<4.5", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", @@ -10440,7 +10289,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<3.2.5", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", @@ -10457,11 +10306,11 @@ "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.1.1", + "pimcore/pimcore": "<11.1.6.1-dev|>=11.2,<11.2.2", "pixelfed/pixelfed": "<0.11.11", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", + "pocketmine/pocketmine-mp": "<5.11.2", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -10493,7 +10342,7 @@ "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", "redaxo/source": "<=5.15.1", - "remdex/livehelperchat": "<3.99", + "remdex/livehelperchat": "<4.29", "reportico-web/reportico": "<=7.1.21", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", @@ -10510,10 +10359,10 @@ "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<=1.2", "shopware/core": "<=6.5.7.3", - "shopware/platform": "<=6.5.7.3", + "shopware/platform": "<=6.5.7.3|>=6.5.8,<6.5.8.7-dev", "shopware/production": "<=6.3.5.2", "shopware/shopware": "<=5.7.17", - "shopware/storefront": "<=6.4.8.1", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", "silverstripe-australia/advancedreports": ">=1,<=2", @@ -10582,7 +10431,7 @@ "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -10623,7 +10472,7 @@ "thinkcmf/thinkcmf": "<=5.1.7", "thorsten/phpmyfaq": "<3.2.2", "tikiwiki/tiki-manager": "<=17.1", - "tinymce/tinymce": "<5.10.9|>=6,<6.7.3", + "tinymce/tinymce": "<7", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", "tobiasbg/tablepress": "<=2.0.0.0-RC1", @@ -10676,7 +10525,7 @@ "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", "winter/wn-system-module": "<1.2.4", - "wintercms/winter": "<1.2.3", + "wintercms/winter": "<=1.2.3", "woocommerce/woocommerce": "<6.6", "wp-cli/wp-cli": ">=0.12,<2.5", "wp-graphql/wp-graphql": "<=1.14.5", @@ -10776,7 +10625,7 @@ "type": "tidelift" } ], - "time": "2024-03-04T21:04:58+00:00" + "time": "2024-03-29T21:04:02+00:00" }, { "name": "sebastian/cli-parser", @@ -11150,16 +10999,16 @@ }, { "name": "sebastian/environment", - "version": "6.0.1", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { @@ -11174,7 +11023,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -11202,7 +11051,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -11210,7 +11059,7 @@ "type": "github" } ], - "time": "2023-04-11T05:39:26+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", @@ -11890,16 +11739,16 @@ }, { "name": "spatie/ignition", - "version": "1.12.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d" + "reference": "889bf1dfa59e161590f677728b47bf4a6893983b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/5b6f801c605a593106b623e45ca41496a6e7d56d", - "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d", + "url": "https://api.github.com/repos/spatie/ignition/zipball/889bf1dfa59e161590f677728b47bf4a6893983b", + "reference": "889bf1dfa59e161590f677728b47bf4a6893983b", "shasum": "" }, "require": { @@ -11969,20 +11818,20 @@ "type": "github" } ], - "time": "2024-01-03T15:49:39+00:00" + "time": "2024-03-29T14:03:47+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.4.2", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e" + "reference": "e23f4e8ce6644dc3d68b9d8a0aed3beaca0d6ada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e", - "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/e23f4e8ce6644dc3d68b9d8a0aed3beaca0d6ada", + "reference": "e23f4e8ce6644dc3d68b9d8a0aed3beaca0d6ada", "shasum": "" }, "require": { @@ -11992,7 +11841,7 @@ "illuminate/support": "^10.0|^11.0", "php": "^8.1", "spatie/flare-client-php": "^1.3.5", - "spatie/ignition": "^1.9", + "spatie/ignition": "^1.13", "symfony/console": "^6.2.3|^7.0", "symfony/var-dumper": "^6.2.3|^7.0" }, @@ -12061,20 +11910,20 @@ "type": "github" } ], - "time": "2024-02-09T16:08:40+00:00" + "time": "2024-03-29T14:14:55+00:00" }, { "name": "spatie/laravel-package-tools", - "version": "1.16.2", + "version": "1.16.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15" + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15", - "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", "shasum": "" }, "require": { @@ -12113,7 +11962,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.2" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4" }, "funding": [ { @@ -12121,224 +11970,7 @@ "type": "github" } ], - "time": "2024-01-11T08:43:00+00:00" - }, - { - "name": "spatie/laravel-ray", - "version": "1.35.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ray.git", - "reference": "f504d3787d88c7e5de7a4290658f7ad9b1352f22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/f504d3787d88c7e5de7a4290658f7ad9b1352f22", - "reference": "f504d3787d88c7e5de7a4290658f7ad9b1352f22", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0|^11.0", - "illuminate/database": "^7.20|^8.19|^9.0|^10.0|^11.0", - "illuminate/queue": "^7.20|^8.19|^9.0|^10.0|^11.0", - "illuminate/support": "^7.20|^8.19|^9.0|^10.0|^11.0", - "php": "^7.4|^8.0", - "rector/rector": "^0.19.2|^1.0", - "spatie/backtrace": "^1.0", - "spatie/ray": "^1.41.1", - "symfony/stopwatch": "4.2|^5.1|^6.0|^7.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19|^9.0|^10.0|^11.0", - "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0|^9.0", - "pestphp/pest": "^1.22|^2.0", - "phpstan/phpstan": "^1.10.57", - "phpunit/phpunit": "^9.3|^10.1", - "spatie/pest-plugin-snapshots": "^1.1|^2.0", - "symfony/var-dumper": "^4.2|^5.1|^6.0|^7.0.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.29.x-dev" - }, - "laravel": { - "providers": [ - "Spatie\\LaravelRay\\RayServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\LaravelRay\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Easily debug Laravel apps", - "homepage": "https://github.com/spatie/laravel-ray", - "keywords": [ - "laravel-ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.35.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-02-13T14:19:41+00:00" - }, - { - "name": "spatie/macroable", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/macroable.git", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Macroable\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A trait to dynamically add methods to a class", - "homepage": "https://github.com/spatie/macroable", - "keywords": [ - "macroable", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/2.0.0" - }, - "time": "2021-03-26T22:39:02+00:00" - }, - { - "name": "spatie/ray", - "version": "1.41.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/ray.git", - "reference": "051a0facb1d2462fafef87ff77eb74d6f2d12944" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/051a0facb1d2462fafef87ff77eb74d6f2d12944", - "reference": "051a0facb1d2462fafef87ff77eb74d6f2d12944", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "php": "^7.3|^8.0", - "ramsey/uuid": "^3.0|^4.1", - "spatie/backtrace": "^1.1", - "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1|^6.0|^7.0", - "symfony/var-dumper": "^4.2|^5.1|^6.0|^7.0" - }, - "require-dev": { - "illuminate/support": "6.x|^8.18|^9.0", - "nesbot/carbon": "^2.63", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.19.2", - "spatie/phpunit-snapshot-assertions": "^4.2", - "spatie/test-time": "^1.2" - }, - "bin": [ - "bin/remove-ray.sh" - ], - "type": "library", - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\Ray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Debug with Ray to fix problems faster", - "homepage": "https://github.com/spatie/ray", - "keywords": [ - "ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.41.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-01-25T10:15:50+00:00" + "time": "2024-03-20T07:29:11+00:00" }, { "name": "symfony/filesystem", @@ -12403,172 +12035,29 @@ ], "time": "2024-01-23T15:02:46+00:00" }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112", - "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/service-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, { "name": "symfony/yaml", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -12599,7 +12088,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.3" + "source": "https://github.com/symfony/yaml/tree/v7.0.3" }, "funding": [ { @@ -12615,7 +12104,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "theseer/tokenizer", @@ -12669,16 +12158,16 @@ }, { "name": "vimeo/psalm", - "version": "5.22.2", + "version": "5.23.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d768d914152dbbf3486c36398802f74e80cfde48" + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d768d914152dbbf3486c36398802f74e80cfde48", - "reference": "d768d914152dbbf3486c36398802f74e80cfde48", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4", + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4", "shasum": "" }, "require": { @@ -12775,227 +12264,20 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2024-02-22T23:39:07+00:00" - }, - { - "name": "zbateson/mail-mime-parser", - "version": "2.4.0", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/20b3e48eb799537683780bc8782fbbe9bc25934a", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MailMimeParser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - }, - { - "name": "Contributors", - "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" - } - ], - "description": "MIME email message parser", - "homepage": "https://mail-mime-parser.org", - "keywords": [ - "MimeMailParser", - "email", - "mail", - "mailparse", - "mime", - "mimeparse", - "parser", - "php-imap" - ], - "support": { - "docs": "https://mail-mime-parser.org/#usage-guide", - "issues": "https://github.com/zbateson/mail-mime-parser/issues", - "source": "https://github.com/zbateson/mail-mime-parser" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-02-14T22:58:03+00:00" - }, - { - "name": "zbateson/mb-wrapper", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-iconv": "^1.9", - "symfony/polyfill-mbstring": "^1.9" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MbWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", - "keywords": [ - "charset", - "encoding", - "http", - "iconv", - "mail", - "mb", - "mb_convert_encoding", - "mbstring", - "mime", - "multibyte", - "string" - ], - "support": { - "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-01-11T23:05:44+00:00" - }, - { - "name": "zbateson/stream-decorators", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\StreamDecorators\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "PHP psr7 stream decorators for mime message part streams", - "keywords": [ - "base64", - "charset", - "decorators", - "mail", - "mime", - "psr7", - "quoted-printable", - "stream", - "uuencode" - ], - "support": { - "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-05-30T22:51:52+00:00" + "time": "2024-03-11T20:33:46+00:00" }, { "name": "zircote/swagger-php", - "version": "4.8.4", + "version": "4.8.7", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "bdee7f5a9216ce103ba2c953c1c43c4a3e139e4c" + "reference": "2357fafbb084be0f9eda7b5c1a659704fed65b28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/bdee7f5a9216ce103ba2c953c1c43c4a3e139e4c", - "reference": "bdee7f5a9216ce103ba2c953c1c43c4a3e139e4c", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/2357fafbb084be0f9eda7b5c1a659704fed65b28", + "reference": "2357fafbb084be0f9eda7b5c1a659704fed65b28", "shasum": "" }, "require": { @@ -13061,9 +12343,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.8.4" + "source": "https://github.com/zircote/swagger-php/tree/4.8.7" }, - "time": "2024-02-04T21:16:47+00:00" + "time": "2024-03-23T06:35:46+00:00" } ], "aliases": [], diff --git a/config/scout.php b/config/scout.php new file mode 100644 index 0000000..ac1a88e --- /dev/null +++ b/config/scout.php @@ -0,0 +1,202 @@ + env('SCOUT_DRIVER', 'algolia'), + + /* + |-------------------------------------------------------------------------- + | Index Prefix + |-------------------------------------------------------------------------- + | + | Here you may specify a prefix that will be applied to all search index + | names used by Scout. This prefix may be useful if you have multiple + | "tenants" or applications sharing the same search infrastructure. + | + */ + + 'prefix' => env('SCOUT_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Queue Data Syncing + |-------------------------------------------------------------------------- + | + | This option allows you to control if the operations that sync your data + | with your search engines are queued. When this is set to "true" then + | all automatic data syncing will get queued for better performance. + | + */ + + 'queue' => env('SCOUT_QUEUE', false), + + /* + |-------------------------------------------------------------------------- + | Database Transactions + |-------------------------------------------------------------------------- + | + | This configuration option determines if your data will only be synced + | with your search indexes after every open database transaction has + | been committed, thus preventing any discarded data from syncing. + | + */ + + 'after_commit' => false, + + /* + |-------------------------------------------------------------------------- + | Chunk Sizes + |-------------------------------------------------------------------------- + | + | These options allow you to control the maximum chunk size when you are + | mass importing data into the search engine. This allows you to fine + | tune each of these chunk sizes based on the power of the servers. + | + */ + + 'chunk' => [ + 'searchable' => 500, + 'unsearchable' => 500, + ], + + /* + |-------------------------------------------------------------------------- + | Soft Deletes + |-------------------------------------------------------------------------- + | + | This option allows to control whether to keep soft deleted records in + | the search indexes. Maintaining soft deleted records can be useful + | if your application still needs to search for the records later. + | + */ + + 'soft_delete' => false, + + /* + |-------------------------------------------------------------------------- + | Identify User + |-------------------------------------------------------------------------- + | + | This option allows you to control whether to notify the search engine + | of the user performing the search. This is sometimes useful if the + | engine supports any analytics based on this application's users. + | + | Supported engines: "algolia" + | + */ + + 'identify' => env('SCOUT_IDENTIFY', false), + + /* + |-------------------------------------------------------------------------- + | Algolia Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Algolia settings. Algolia is a cloud hosted + | search engine which works great with Scout out of the box. Just plug + | in your application ID and admin API key to get started searching. + | + */ + + 'algolia' => [ + 'id' => env('ALGOLIA_APP_ID', ''), + 'secret' => env('ALGOLIA_SECRET', ''), + ], + + /* + |-------------------------------------------------------------------------- + | Meilisearch Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Meilisearch settings. Meilisearch is an open + | source search engine with minimal configuration. Below, you can state + | the host and key information for your own Meilisearch installation. + | + | See: https://www.meilisearch.com/docs/learn/configuration/instance_options#all-instance-options + | + */ + + 'meilisearch' => [ + 'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'), + 'key' => env('MEILISEARCH_KEY'), + 'index-settings' => [ + // 'users' => [ + // 'filterableAttributes'=> ['id', 'name', 'email'], + // ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Typesense Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Typesense settings. Typesense is an open + | source search engine using minimal configuration. Below, you will + | state the host, key, and schema configuration for the instance. + | + */ + + 'typesense' => [ + 'client-settings' => [ + 'api_key' => env('TYPESENSE_API_KEY', 'xyz'), + 'nodes' => [ + [ + 'host' => env('TYPESENSE_HOST', 'localhost'), + 'port' => env('TYPESENSE_PORT', '8108'), + 'path' => env('TYPESENSE_PATH', ''), + 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), + ], + ], + 'nearest_node' => [ + 'host' => env('TYPESENSE_HOST', 'localhost'), + 'port' => env('TYPESENSE_PORT', '8108'), + 'path' => env('TYPESENSE_PATH', ''), + 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), + ], + 'connection_timeout_seconds' => env('TYPESENSE_CONNECTION_TIMEOUT_SECONDS', 2), + 'healthcheck_interval_seconds' => env('TYPESENSE_HEALTHCHECK_INTERVAL_SECONDS', 30), + 'num_retries' => env('TYPESENSE_NUM_RETRIES', 3), + 'retry_interval_seconds' => env('TYPESENSE_RETRY_INTERVAL_SECONDS', 1), + ], + 'model-settings' => [ + // User::class => [ + // 'collection-schema' => [ + // 'fields' => [ + // [ + // 'name' => 'id', + // 'type' => 'string', + // ], + // [ + // 'name' => 'name', + // 'type' => 'string', + // ], + // [ + // 'name' => 'created_at', + // 'type' => 'int64', + // ], + // ], + // 'default_sorting_field' => 'created_at', + // ], + // 'search-parameters' => [ + // 'query_by' => 'name' + // ], + // ], + ], + ], + +]; diff --git a/config/scramble.php b/config/scramble.php new file mode 100644 index 0000000..697e528 --- /dev/null +++ b/config/scramble.php @@ -0,0 +1,78 @@ + 'api', + + /* + * Your API domain. By default, app domain is used. This is also a part of the default API routes + * matcher, so when implementing your own, make sure you use this config if needed. + */ + 'api_domain' => null, + + /* + * Define the theme of the documentation. + * Available options are `light` and `dark`. + */ + 'theme' => 'dark', + + 'info' => [ + /* + * API version. + */ + 'version' => env('API_VERSION', '0.1.0'), + + /* + * Description rendered on the home page of the API documentation (`/docs/api`). + */ + 'description' => '', + ], + + /* + * Customize Stoplight Elements UI + */ + 'ui' => [ + /* + * Hide the `Try It` feature. Enabled by default. + */ + 'hide_try_it' => false, + + /* + * URL to an image that displays as a small square logo next to the title, above the table of contents. + */ + 'logo' => '', + + /* + * Use to fetch the credential policy for the Try It feature. Options are: omit, include (default), and same-origin + */ + 'try_it_credentials_policy' => 'include', + ], + + /* + * The list of servers of the API. By default, when `null`, server URL will be created from + * `scramble.api_path` and `scramble.api_domain` config variables. When providing an array, you + * will need to specify the local server URL manually (if needed). + * + * Example of non-default config (final URLs are generated using Laravel `url` helper): + * + * ```php + * 'servers' => [ + * 'Live' => 'api', + * 'Prod' => 'https://scramble.dedoc.co/api', + * ], + * ``` + */ + 'servers' => null, + + 'middleware' => [ + 'web', + RestrictedDocsAccess::class, + ], + + 'extensions' => [], +]; diff --git a/database/factories/PostFactory.php b/database/factories/PostFactory.php new file mode 100644 index 0000000..f94219f --- /dev/null +++ b/database/factories/PostFactory.php @@ -0,0 +1,24 @@ + User::inRandomOrder()->first()->id, + 'type' => fake()->randomElement(['free', 'notice', 'faq']), + 'title' => fake()->sentence, + 'contents' => fake()->text, + 'hit' => fake()->numberBetween(0, 1000), + 'is_open' => fake()->boolean, + ]; + } +} diff --git a/database/factories/User/UserAppleFactory.php b/database/factories/User/UserAppleFactory.php new file mode 100644 index 0000000..36b8a15 --- /dev/null +++ b/database/factories/User/UserAppleFactory.php @@ -0,0 +1,26 @@ +apple()->create(); + + return [ + 'user_id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + 'sub' => $user->provider_id, + 'at_hash' => fake()->md5, + 'token' => $user->provider_token, + ]; + } +} diff --git a/database/factories/User/UserKakaoFactory.php b/database/factories/User/UserKakaoFactory.php new file mode 100644 index 0000000..45e143d --- /dev/null +++ b/database/factories/User/UserKakaoFactory.php @@ -0,0 +1,30 @@ +kakao()->create(); + + return [ + 'user_id' => $user->id, + 'email' => $user->email, + 'name' => $user->name, + 'nickname' => $user->nickname, + 'avatar' => fake()->imageUrl(), + 'gender' => fake()->randomElement(['male', 'female']), + 'birthday' => fake()->date('md'), + 'calendar' => fake()->randomElement(['SOLAR', 'LUNAR', 'LEAP']), + 'age_range' => fake()->randomElement(['15~19', '20~29', '30~39', '40~49', '50~59', '60~']), + 'sub' => $user->provider_id, + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index c28cbcb..467e68c 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -6,39 +6,41 @@ use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; -/** - * @extends Factory - */ class UserFactory extends Factory { - /** - * Define the model's default state. - * - * @return array - */ + protected $model = User::class; + public function definition(): array { return [ 'name' => fake()->unique()->name(), - 'nickname' => fake()->userName(), + 'nickname' => fake()->unique()->userName(), 'email' => fake()->unique()->safeEmail(), - 'email_verified_at' => now(), + 'email_verified_at' => null, + 'password' => bcrypt('password'), 'phone' => fake()->phoneNumber(), - 'provider' => fake()->randomElement(['apple', 'kakao']), - 'provider_id' => fake()->uuid(), - 'provider_token' => fake()->randomNumber(15, true), 'remember_token' => Str::random(10), + 'provider' => null, + 'provider_id' => null, + 'provider_token' => null, ]; } - /** - * Indicate that the model's email address should be unverified. - */ - public function unverified(): static + public function apple(): UserFactory { - return $this->state(fn (array $attributes) => [ - 'email_verified_at' => null, - 'phone' => null, + return $this->state([ + 'provider' => 'apple', + 'provider_id' => '000123.'.fake()->uuid(), + 'provider_token' => fake()->md5, + ]); + } + + public function kakao(): UserFactory + { + return $this->state([ + 'provider' => 'kakao', + 'provider_id' => fake()->numberBetween(1000000000, 5000000000), + 'provider_token' => fake()->md5, ]); } } diff --git a/database/migrations/2023_12_01_000000_create_user_kakaos_table.php b/database/migrations/2023_12_01_000000_create_user_kakaos_table.php index d0bb5ca..2de82ee 100644 --- a/database/migrations/2023_12_01_000000_create_user_kakaos_table.php +++ b/database/migrations/2023_12_01_000000_create_user_kakaos_table.php @@ -19,7 +19,7 @@ public function up(): void $table->string('nickname', 50)->nullable(); $table->string('avatar', 200)->nullable()->comment('profile image path'); $table->string('gender', 20)->nullable(); - $table->integer('birthday')->nullable(); + $table->string('birthday')->nullable(); $table->string('calendar', 20)->nullable(); $table->string('age_range', 20)->nullable(); $table->string('sub', 200)->comment('user unique id'); diff --git a/database/migrations/2023_12_02_000000_create_posts_table.php b/database/migrations/2023_12_02_000000_create_posts_table.php index b29c4f9..f72903c 100644 --- a/database/migrations/2023_12_02_000000_create_posts_table.php +++ b/database/migrations/2023_12_02_000000_create_posts_table.php @@ -14,7 +14,7 @@ public function up(): void Schema::create('posts', static function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained(); - $table->enum('type', ['notice', 'faq'])->nullable(); + $table->enum('type', ['free', 'notice', 'faq'])->nullable(); $table->string('title', 200); $table->longText('contents'); $table->unsignedInteger('hit')->default(0); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index dc99b53..6ce4b5e 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,16 +2,15 @@ namespace Database\Seeders; -use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { - /** - * Seed the application's database. - */ public function run(): void { - User::factory(10)->create(); + $this->call([ + UserSeeder::class, + PostSeeder::class, + ]); } } diff --git a/database/seeders/PostSeeder.php b/database/seeders/PostSeeder.php new file mode 100644 index 0000000..15e3ce3 --- /dev/null +++ b/database/seeders/PostSeeder.php @@ -0,0 +1,14 @@ +create(); + } +} diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php new file mode 100644 index 0000000..625bfa9 --- /dev/null +++ b/database/seeders/UserSeeder.php @@ -0,0 +1,18 @@ +create(); + UserApple::factory(5)->create(); + UserKakao::factory(5)->create(); + } +} diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..f1223bd --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset.', + 'sent' => 'We have emailed your password reset link.', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..8dbe37f --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,191 @@ + 'The :attribute field must be accepted.', + 'accepted_if' => 'The :attribute field must be accepted when :other is :value.', + 'active_url' => 'The :attribute field must be a valid URL.', + 'after' => 'The :attribute field must be a date after :date.', + 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', + 'alpha' => 'The :attribute field must only contain letters.', + 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', + 'alpha_num' => 'The :attribute field must only contain letters and numbers.', + 'array' => 'The :attribute field must be an array.', + 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute field must be a date before :date.', + 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute field must have between :min and :max items.', + 'file' => 'The :attribute field must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute field must be between :min and :max.', + 'string' => 'The :attribute field must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'can' => 'The :attribute field contains an unauthorized value.', + 'confirmed' => 'The :attribute field confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute field must be a valid date.', + 'date_equals' => 'The :attribute field must be a date equal to :date.', + 'date_format' => 'The :attribute field must match the format :format.', + 'decimal' => 'The :attribute field must have :decimal decimal places.', + 'declined' => 'The :attribute field must be declined.', + 'declined_if' => 'The :attribute field must be declined when :other is :value.', + 'different' => 'The :attribute field and :other must be different.', + 'digits' => 'The :attribute field must be :digits digits.', + 'digits_between' => 'The :attribute field must be between :min and :max digits.', + 'dimensions' => 'The :attribute field has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', + 'email' => 'The :attribute field must be a valid email address.', + 'ends_with' => 'The :attribute field must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'extensions' => 'The :attribute field must have one of the following extensions: :values.', + 'file' => 'The :attribute field must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute field must have more than :value items.', + 'file' => 'The :attribute field must be greater than :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than :value.', + 'string' => 'The :attribute field must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute field must have :value items or more.', + 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than or equal to :value.', + 'string' => 'The :attribute field must be greater than or equal to :value characters.', + ], + 'hex_color' => 'The :attribute field must be a valid hexadecimal color.', + 'image' => 'The :attribute field must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field must exist in :other.', + 'integer' => 'The :attribute field must be an integer.', + 'ip' => 'The :attribute field must be a valid IP address.', + 'ipv4' => 'The :attribute field must be a valid IPv4 address.', + 'ipv6' => 'The :attribute field must be a valid IPv6 address.', + 'json' => 'The :attribute field must be a valid JSON string.', + 'lowercase' => 'The :attribute field must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute field must have less than :value items.', + 'file' => 'The :attribute field must be less than :value kilobytes.', + 'numeric' => 'The :attribute field must be less than :value.', + 'string' => 'The :attribute field must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute field must not have more than :value items.', + 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be less than or equal to :value.', + 'string' => 'The :attribute field must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute field must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute field must not have more than :max items.', + 'file' => 'The :attribute field must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute field must not be greater than :max.', + 'string' => 'The :attribute field must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute field must not have more than :max digits.', + 'mimes' => 'The :attribute field must be a file of type: :values.', + 'mimetypes' => 'The :attribute field must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute field must have at least :min items.', + 'file' => 'The :attribute field must be at least :min kilobytes.', + 'numeric' => 'The :attribute field must be at least :min.', + 'string' => 'The :attribute field must be at least :min characters.', + ], + 'min_digits' => 'The :attribute field must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute field must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute field format is invalid.', + 'numeric' => 'The :attribute field must be a number.', + 'password' => [ + 'letters' => 'The :attribute field must contain at least one letter.', + 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute field must contain at least one number.', + 'symbols' => 'The :attribute field must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'present_if' => 'The :attribute field must be present when :other is :value.', + 'present_unless' => 'The :attribute field must be present unless :other is :value.', + 'present_with' => 'The :attribute field must be present when :values is present.', + 'present_with_all' => 'The :attribute field must be present when :values are present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute field format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute field must match :other.', + 'size' => [ + 'array' => 'The :attribute field must contain :size items.', + 'file' => 'The :attribute field must be :size kilobytes.', + 'numeric' => 'The :attribute field must be :size.', + 'string' => 'The :attribute field must be :size characters.', + ], + 'starts_with' => 'The :attribute field must start with one of the following: :values.', + 'string' => 'The :attribute field must be a string.', + 'timezone' => 'The :attribute field must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute field must be uppercase.', + 'url' => 'The :attribute field must be a valid URL.', + 'ulid' => 'The :attribute field must be a valid ULID.', + 'uuid' => 'The :attribute field must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/ko/auth.php b/lang/ko/auth.php new file mode 100644 index 0000000..7b6e9dd --- /dev/null +++ b/lang/ko/auth.php @@ -0,0 +1,20 @@ + '인증 정보가 레코드와 일치하지 않습니다.', + 'password' => '비밀번호가 올바르지 않습니다.', + 'throttle' => '너무 많이 로그인을 시도하였습니다. :seconds 초 후에 다시 시도해 주세요.', + +]; diff --git a/lang/ko/pagination.php b/lang/ko/pagination.php new file mode 100644 index 0000000..6c07077 --- /dev/null +++ b/lang/ko/pagination.php @@ -0,0 +1,19 @@ + '« 이전', + 'next' => '다음 »', + +]; diff --git a/lang/ko/passwords.php b/lang/ko/passwords.php new file mode 100644 index 0000000..121a9c8 --- /dev/null +++ b/lang/ko/passwords.php @@ -0,0 +1,22 @@ + '비밀번호가 재설정되었습니다.', + 'sent' => '비밀번호 재설정 링크를 이메일로 전송했습니다.', + 'throttled' => '잠시 후 다시 시도해주세요.', + 'token' => '비밀번호 재설정 토큰이 유효하지 않습니다.', + 'user' => '해당 이메일을 사용하는 사용자를 찾을 수 없습니다.', + +]; diff --git a/lang/ko/post.php b/lang/ko/post.php new file mode 100644 index 0000000..52d26b7 --- /dev/null +++ b/lang/ko/post.php @@ -0,0 +1,11 @@ + '게시글이 등록되었습니다.', + 'update' => '게시글이 수정되었습니다.', + 'update_denied' => '게시글 작성자만 수정할 수 있습니다.', + 'destroy' => '게시글이 삭제되었습니다.', + 'destroy_denied' => '게시글 작성자만 삭제할 수 있습니다.', + +]; diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..7549540 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Not Found')) +@section('code', '404') +@section('message', __('Not Found')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..d9e95d9 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..019c2cd --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + + + + + + @yield('title') + + + + + +
+
+
+ @yield('message') +
+
+
+ + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..db69f25 --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,34 @@ + + + + + + + @yield('title') + + + + + + +
+
+
+
+ @yield('code') +
+ +
+ @yield('message') +
+
+
+
+ + diff --git a/routes/api.php b/routes/api.php index 42fb42e..a94c78c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -5,6 +5,7 @@ use App\Http\Controllers\Account\SignInController; use App\Http\Controllers\Account\SignUpController; use App\Http\Controllers\Account\UserController; +use App\Http\Controllers\PostController; use Illuminate\Support\Facades\Route; /* @@ -18,6 +19,7 @@ | */ +// Account Route::prefix('accounts')->group(static function () { Route::post('signup', SignUpController::class); // Route::get('verify', VerifyController::class); @@ -36,14 +38,14 @@ }); // Board -Route::group(['prefix' => 'posts', 'controller' => 'PostController'], static function () { +Route::group(['prefix' => 'posts', 'controller' => PostController::class], static function () { Route::get('/', 'index'); Route::get('{post}', 'show'); Route::middleware('auth:sanctum')->group(static function () { Route::post('/', 'store'); Route::prefix('{post}')->group(static function () { - // Route::get('/', 'show')->withoutMiddleware('auth:sanctum'); + Route::get('edit', 'edit'); Route::put('/', 'update'); Route::delete('/', 'destroy'); }); diff --git a/routes/web.php b/routes/web.php index ef08c0f..3cb2ad2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@