From 5361c3930f1e5724c480f059e9c0adf1d5218ebb Mon Sep 17 00:00:00 2001 From: philipp lang Date: Fri, 30 May 2025 01:46:46 +0200 Subject: [PATCH] Add preventAgainst to frontend --- app/Prevention/Actions/SettingApiAction.php | 4 ++++ app/Prevention/Actions/SettingStoreAction.php | 1 + app/Prevention/Enums/Prevention.php | 11 +++++++++++ app/Prevention/PreventionSettings.php | 1 + ..._202013_create_prevention_yearly_mail_settings.php | 1 + resources/js/views/setting/Prevention.vue | 3 ++- tests/Feature/Prevention/SettingTest.php | 9 ++++++++- 7 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/Prevention/Actions/SettingApiAction.php b/app/Prevention/Actions/SettingApiAction.php index 211c8737..7de5ddbf 100644 --- a/app/Prevention/Actions/SettingApiAction.php +++ b/app/Prevention/Actions/SettingApiAction.php @@ -2,6 +2,7 @@ namespace App\Prevention\Actions; +use App\Prevention\Enums\Prevention; use App\Prevention\PreventionSettings; use Illuminate\Http\JsonResponse; use Lorisleiva\Actions\Concerns\AsAction; @@ -14,6 +15,9 @@ class SettingApiAction { return response()->json([ 'data' => app(PreventionSettings::class)->toFrontend(), + 'meta' => [ + 'preventAgainsts' => Prevention::values(), + ] ]); } } diff --git a/app/Prevention/Actions/SettingStoreAction.php b/app/Prevention/Actions/SettingStoreAction.php index 1c1525a2..c04cd68d 100644 --- a/app/Prevention/Actions/SettingStoreAction.php +++ b/app/Prevention/Actions/SettingStoreAction.php @@ -36,6 +36,7 @@ class SettingStoreAction $settings->freshRememberInterval = $request->freshRememberInterval; $settings->active = $request->active; $settings->yearlyMemberFilter = FilterScope::from($request->yearlyMemberFilter); + $settings->preventAgainst = $request->preventAgainst; $settings->save(); Succeeded::message('Einstellungen gespeichert.')->dispatch(); diff --git a/app/Prevention/Enums/Prevention.php b/app/Prevention/Enums/Prevention.php index 0bdbcafe..94227381 100644 --- a/app/Prevention/Enums/Prevention.php +++ b/app/Prevention/Enums/Prevention.php @@ -49,4 +49,15 @@ enum Prevention 'tooltip' => $case->tooltip($preventions->pluck('type')->doesntContain($case)), ]); } + + /** + * @return array + */ + public static function values(): array + { + return collect(static::cases())->map(fn($case) => [ + 'id' => $case->name, + 'name' => $case->text(), + ])->toArray(); + } } diff --git a/app/Prevention/PreventionSettings.php b/app/Prevention/PreventionSettings.php index 5340fbba..a1eaf29a 100644 --- a/app/Prevention/PreventionSettings.php +++ b/app/Prevention/PreventionSettings.php @@ -15,6 +15,7 @@ class PreventionSettings extends LocalSettings public int $freshRememberInterval; public bool $active; public FilterScope $yearlyMemberFilter; + public array $preventAgainst; public static function group(): string { diff --git a/database/settings/2025_05_24_202013_create_prevention_yearly_mail_settings.php b/database/settings/2025_05_24_202013_create_prevention_yearly_mail_settings.php index 7d016a85..13f43107 100644 --- a/database/settings/2025_05_24_202013_create_prevention_yearly_mail_settings.php +++ b/database/settings/2025_05_24_202013_create_prevention_yearly_mail_settings.php @@ -12,5 +12,6 @@ return new class extends SettingsMigration $this->migrator->add('prevention.freshRememberInterval', 12); $this->migrator->add('prevention.active', false); $this->migrator->add('prevention.yearlyMemberFilter', FilterScope::from([])->toArray()); + $this->migrator->add('prevention.preventAgainst', []); } }; diff --git a/resources/js/views/setting/Prevention.vue b/resources/js/views/setting/Prevention.vue index 288930d9..5c047e68 100644 --- a/resources/js/views/setting/Prevention.vue +++ b/resources/js/views/setting/Prevention.vue @@ -21,6 +21,7 @@ + @@ -38,7 +39,7 @@ const tabs = [ ]; const active = ref(0); -const { axios, data, reload } = useApiIndex('/api/prevention', 'prevention'); +const { axios, data, meta, reload } = useApiIndex('/api/prevention', 'prevention'); const loaded = ref(false); async function load() { diff --git a/tests/Feature/Prevention/SettingTest.php b/tests/Feature/Prevention/SettingTest.php index f8bb48a0..8f2704f0 100644 --- a/tests/Feature/Prevention/SettingTest.php +++ b/tests/Feature/Prevention/SettingTest.php @@ -3,6 +3,7 @@ namespace Tests\Feature\Prevention; use App\Member\FilterScope; +use App\Prevention\Enums\Prevention; use App\Prevention\PreventionSettings; use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\RequestFactories\EditorRequestFactory; @@ -27,6 +28,7 @@ it('receives settings', function () { 'weeks' => 9, 'freshRememberInterval' => 11, 'active' => true, + 'preventAgainst' => [Prevention::MOREPS->name], 'yearlyMemberFilter' => FilterScope::from([ 'memberships' => [['group_ids' => [33]]], 'search' => 'searchstring', @@ -40,7 +42,10 @@ it('receives settings', function () { ->assertJsonPath('data.active', true) ->assertJsonPath('data.freshRememberInterval', '11') ->assertJsonPath('data.yearlyMemberFilter.search', 'searchstring') - ->assertJsonPath('data.yearlyMemberFilter.memberships.0.group_ids.0', 33); + ->assertJsonPath('data.yearlyMemberFilter.memberships.0.group_ids.0', 33) + ->assertJsonPath('data.preventAgainst', ['MOREPS']) + ->assertJsonPath('meta.preventAgainsts.0.name', 'erweitertes Führungszeugnis') + ->assertJsonPath('meta.preventAgainsts.0.id', 'EFZ'); }); it('testItStoresSettings', function () { @@ -52,6 +57,7 @@ it('testItStoresSettings', function () { 'weeks' => 9, 'freshRememberInterval' => 11, 'active' => true, + 'preventAgainst' => ['EFZ'], 'yearlyMemberFilter' => [ 'memberships' => [['group_ids' => 33]], 'search' => 'searchstring', @@ -64,4 +70,5 @@ it('testItStoresSettings', function () { test()->assertTrue(app(PreventionSettings::class)->active); test()->assertEquals([['group_ids' => 33]], app(PreventionSettings::class)->yearlyMemberFilter->memberships); test()->assertEquals('searchstring', app(PreventionSettings::class)->yearlyMemberFilter->search); + test()->assertEquals('EFZ', app(PreventionSettings::class)->preventAgainst[0]); });