diff --git a/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php b/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php new file mode 100644 index 0000000..05c4504 --- /dev/null +++ b/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php @@ -0,0 +1,38 @@ + $this->request->name, + 'slug' => $this->request->slug, + 'url' => $this->request->url, + 'email' => '', + 'email_finance' => '', + 'account_name' => '', + 'account_iban' => '', + 'account_bic' => '', + 'city' => '', + 'postcode' => '', + 'is_active_local_group' => true, + 'has_active_instance' => true, + ]); + + $response->success = true; + $response->message = 'Stamm wurde angelegt.'; + $response->slug = $tenant->slug; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/CreateTenant/CreateTenantRequest.php b/app/Domains/Admin/Actions/CreateTenant/CreateTenantRequest.php new file mode 100644 index 0000000..85e7e82 --- /dev/null +++ b/app/Domains/Admin/Actions/CreateTenant/CreateTenantRequest.php @@ -0,0 +1,13 @@ +request->currentUserId === $this->request->user->id) { + $response->message = 'Du kannst dich nicht selbst deaktivieren.'; + return $response; + } + + $this->request->user->update(['active' => !$this->request->user->active]); + + $status = $this->request->user->active ? 'aktiviert' : 'deaktiviert'; + + $response->success = true; + $response->message = 'Benutzer*in wurde ' . $status . '.'; + $response->active = $this->request->user->active; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/ToggleUserActive/ToggleUserActiveRequest.php b/app/Domains/Admin/Actions/ToggleUserActive/ToggleUserActiveRequest.php new file mode 100644 index 0000000..b4f39d5 --- /dev/null +++ b/app/Domains/Admin/Actions/ToggleUserActive/ToggleUserActiveRequest.php @@ -0,0 +1,14 @@ +request->tenant->update([ + 'email' => $this->request->email, + 'email_finance' => $this->request->emailFinance, + 'postcode' => $this->request->postcode, + 'city' => $this->request->city, + ]); + + $response->success = true; + $response->message = 'Kontaktdaten wurden gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateTenantContact/UpdateTenantContactRequest.php b/app/Domains/Admin/Actions/UpdateTenantContact/UpdateTenantContactRequest.php new file mode 100644 index 0000000..f9135ea --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateTenantContact/UpdateTenantContactRequest.php @@ -0,0 +1,17 @@ +request->tenant->update([ + 'gdpr_text' => $this->request->gdprText, + ]); + + $response->success = true; + $response->message = 'Datenschutzerklärung wurde gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateTenantGdpr/UpdateTenantGdprRequest.php b/app/Domains/Admin/Actions/UpdateTenantGdpr/UpdateTenantGdprRequest.php new file mode 100644 index 0000000..4e63c27 --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateTenantGdpr/UpdateTenantGdprRequest.php @@ -0,0 +1,14 @@ +request->tenant->update([ + 'name' => $this->request->name, + 'slug' => $this->request->slug, + 'url' => $this->request->url, + ]); + + $response->success = true; + $response->message = 'Allgemeine Daten wurden gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateTenantGeneral/UpdateTenantGeneralRequest.php b/app/Domains/Admin/Actions/UpdateTenantGeneral/UpdateTenantGeneralRequest.php new file mode 100644 index 0000000..277cf0e --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateTenantGeneral/UpdateTenantGeneralRequest.php @@ -0,0 +1,16 @@ +request->tenant->update([ + 'impress_text' => $this->request->impressText, + ]); + + $response->success = true; + $response->message = 'Impressum wurde gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateTenantImpress/UpdateTenantImpressRequest.php b/app/Domains/Admin/Actions/UpdateTenantImpress/UpdateTenantImpressRequest.php new file mode 100644 index 0000000..d3e8637 --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateTenantImpress/UpdateTenantImpressRequest.php @@ -0,0 +1,14 @@ +request->tenant->update([ + 'account_iban' => $this->request->accountIban, + 'account_bic' => $this->request->accountBic, + 'account_name' => $this->request->accountName, + ]); + + $response->success = true; + $response->message = 'Bezahldaten wurden gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentRequest.php b/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentRequest.php new file mode 100644 index 0000000..1bc9a60 --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentRequest.php @@ -0,0 +1,16 @@ +request->isLvTenant) { + $allowedFields[] = 'local_group'; + if (!$this->request->isOwnUser) { + $allowedFields[] = 'user_role_main'; + } + } + + $data = array_intersect_key($this->request->data, array_flip($allowedFields)); + $this->request->user->update($data); + + $response->success = true; + $response->message = 'Benutzerdaten wurden gespeichert.'; + + return $response; + } +} diff --git a/app/Domains/Admin/Actions/UpdateUser/UpdateUserRequest.php b/app/Domains/Admin/Actions/UpdateUser/UpdateUserRequest.php new file mode 100644 index 0000000..85a347a --- /dev/null +++ b/app/Domains/Admin/Actions/UpdateUser/UpdateUserRequest.php @@ -0,0 +1,16 @@ +firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); return response()->json([ 'email' => $tenant->email, diff --git a/app/Domains/Admin/Controllers/ManagedTenantContactUpdateController.php b/app/Domains/Admin/Controllers/ManagedTenantContactUpdateController.php index a102aac..dce1996 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantContactUpdateController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantContactUpdateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactAction; +use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,18 +12,21 @@ class ManagedTenantContactUpdateController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); - $tenant->update([ - 'email' => $request->input('email'), - 'email_finance' => $request->input('email_finance'), - 'postcode' => $request->input('postcode'), - 'city' => $request->input('city'), - ]); + $action = new UpdateTenantContactAction(new UpdateTenantContactRequest( + tenant: $tenant, + email: $request->input('email'), + emailFinance: $request->input('email_finance'), + postcode: $request->input('postcode'), + city: $request->input('city'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Kontaktdaten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/ManagedTenantGdprGetController.php b/app/Domains/Admin/Controllers/ManagedTenantGdprGetController.php index 6cc472d..06bd941 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantGdprGetController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantGdprGetController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,7 +10,7 @@ class ManagedTenantGdprGetController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); return response()->json([ 'gdpr_text' => $tenant->gdpr_text ?? '', diff --git a/app/Domains/Admin/Controllers/ManagedTenantGdprUpdateController.php b/app/Domains/Admin/Controllers/ManagedTenantGdprUpdateController.php index 96a3826..47703c5 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantGdprUpdateController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantGdprUpdateController.php @@ -2,24 +2,29 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprAction; +use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class ManagedTenantGdprUpdateController extends CommonController { + public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); - $tenant->update([ - 'gdpr_text' => $request->input('gdpr_text'), - ]); + $action = new UpdateTenantGdprAction(new UpdateTenantGdprRequest( + tenant: $tenant, + gdprText: $request->input('gdpr_text'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Datenschutzerklärung wurde gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/ManagedTenantImpressGetController.php b/app/Domains/Admin/Controllers/ManagedTenantImpressGetController.php index dd188a8..8a718da 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantImpressGetController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantImpressGetController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,7 +10,7 @@ class ManagedTenantImpressGetController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); return response()->json([ 'impress_text' => $tenant->impress_text ?? '', diff --git a/app/Domains/Admin/Controllers/ManagedTenantImpressUpdateController.php b/app/Domains/Admin/Controllers/ManagedTenantImpressUpdateController.php index 09e23f1..baa1225 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantImpressUpdateController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantImpressUpdateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressAction; +use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,15 +12,18 @@ class ManagedTenantImpressUpdateController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); - $tenant->update([ - 'impress_text' => $request->input('impress_text'), - ]); + $action = new UpdateTenantImpressAction(new UpdateTenantImpressRequest( + tenant: $tenant, + impressText: $request->input('impress_text'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Impressum wurde gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/ManagedTenantPaymentGetController.php b/app/Domains/Admin/Controllers/ManagedTenantPaymentGetController.php index 5d8e258..e57e10b 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantPaymentGetController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantPaymentGetController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,7 +10,7 @@ class ManagedTenantPaymentGetController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); return response()->json([ 'account_iban' => $tenant->account_iban, diff --git a/app/Domains/Admin/Controllers/ManagedTenantPaymentUpdateController.php b/app/Domains/Admin/Controllers/ManagedTenantPaymentUpdateController.php index e01d39a..8d8e184 100644 --- a/app/Domains/Admin/Controllers/ManagedTenantPaymentUpdateController.php +++ b/app/Domains/Admin/Controllers/ManagedTenantPaymentUpdateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentAction; +use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,17 +12,20 @@ class ManagedTenantPaymentUpdateController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); - $tenant->update([ - 'account_iban' => $request->input('account_iban'), - 'account_bic' => $request->input('account_bic'), - 'account_name' => $request->input('account_name'), - ]); + $action = new UpdateTenantPaymentAction(new UpdateTenantPaymentRequest( + tenant: $tenant, + accountIban: $request->input('account_iban'), + accountBic: $request->input('account_bic'), + accountName: $request->input('account_name'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Bezahldaten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantContactUpdateController.php b/app/Domains/Admin/Controllers/TenantContactUpdateController.php index 8acf166..bc38a23 100644 --- a/app/Domains/Admin/Controllers/TenantContactUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantContactUpdateController.php @@ -2,6 +2,8 @@ namespace App\Domains\Admin\Controllers; +use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactAction; +use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -10,16 +12,19 @@ class TenantContactUpdateController extends CommonController { public function __invoke(Request $request): JsonResponse { - $this->tenant->update([ - 'email' => $request->input('email'), - 'email_finance' => $request->input('email_finance'), - 'postcode' => $request->input('postcode'), - 'city' => $request->input('city'), - ]); + $action = new UpdateTenantContactAction(new UpdateTenantContactRequest( + tenant: $this->tenant, + email: $request->input('email'), + emailFinance: $request->input('email_finance'), + postcode: $request->input('postcode'), + city: $request->input('city'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Kontaktdaten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantCreateController.php b/app/Domains/Admin/Controllers/TenantCreateController.php index c92e269..1048f63 100644 --- a/app/Domains/Admin/Controllers/TenantCreateController.php +++ b/app/Domains/Admin/Controllers/TenantCreateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\CreateTenant\CreateTenantAction; +use App\Domains\Admin\Actions\CreateTenant\CreateTenantRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,25 +12,18 @@ class TenantCreateController extends CommonController { public function __invoke(Request $request): JsonResponse { - $tenant = Tenant::create([ - 'name' => $request->input('name'), - 'slug' => $request->input('slug'), - 'url' => $request->input('url'), - 'email' => '', - 'email_finance' => '', - 'account_name' => '', - 'account_iban' => '', - 'account_bic' => '', - 'city' => '', - 'postcode' => '', - 'is_active_local_group' => true, - 'has_active_instance' => true, - ]); + $action = new CreateTenantAction(new CreateTenantRequest( + name: $request->input('name'), + slug: $request->input('slug'), + url: $request->input('url'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Stamm wurde angelegt.', - 'slug' => $tenant->slug, + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, + 'slug' => $response->slug, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantEditPageController.php b/app/Domains/Admin/Controllers/TenantEditPageController.php index dbf22a4..d56262d 100644 --- a/app/Domains/Admin/Controllers/TenantEditPageController.php +++ b/app/Domains/Admin/Controllers/TenantEditPageController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Providers\InertiaProvider; use App\Scopes\CommonController; use Illuminate\Http\Request; @@ -12,7 +11,7 @@ class TenantEditPageController extends CommonController { public function __invoke(string $slug, Request $request): Response { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); $inertiaProvider = new InertiaProvider('Admin/TenantEdit', [ 'tenant' => [ diff --git a/app/Domains/Admin/Controllers/TenantGdprUpdateController.php b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php index 974495b..e9886d8 100644 --- a/app/Domains/Admin/Controllers/TenantGdprUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php @@ -2,6 +2,8 @@ namespace App\Domains\Admin\Controllers; +use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprAction; +use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -10,13 +12,16 @@ class TenantGdprUpdateController extends CommonController { public function __invoke(Request $request): JsonResponse { - $this->tenant->update([ - 'gdpr_text' => $request->input('gdpr_text'), - ]); + $action = new UpdateTenantGdprAction(new UpdateTenantGdprRequest( + tenant: $this->tenant, + gdprText: $request->input('gdpr_text'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Datenschutzerklärung wurde gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantGeneralGetController.php b/app/Domains/Admin/Controllers/TenantGeneralGetController.php index 0c3c877..714bb72 100644 --- a/app/Domains/Admin/Controllers/TenantGeneralGetController.php +++ b/app/Domains/Admin/Controllers/TenantGeneralGetController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,7 +10,7 @@ class TenantGeneralGetController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); return response()->json([ 'name' => $tenant->name, diff --git a/app/Domains/Admin/Controllers/TenantGeneralUpdateController.php b/app/Domains/Admin/Controllers/TenantGeneralUpdateController.php index 3f6277e..a1654fe 100644 --- a/app/Domains/Admin/Controllers/TenantGeneralUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantGeneralUpdateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; +use App\Domains\Admin\Actions\UpdateTenantGeneral\UpdateTenantGeneralAction; +use App\Domains\Admin\Actions\UpdateTenantGeneral\UpdateTenantGeneralRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,17 +12,20 @@ class TenantGeneralUpdateController extends CommonController { public function __invoke(string $slug, Request $request): JsonResponse { - $tenant = Tenant::where('slug', $slug)->firstOrFail(); + $tenant = $this->adminTenants->findBySlug($slug); - $tenant->update([ - 'name' => $request->input('name'), - 'slug' => $request->input('slug'), - 'url' => $request->input('url'), - ]); + $action = new UpdateTenantGeneralAction(new UpdateTenantGeneralRequest( + tenant: $tenant, + name: $request->input('name'), + slug: $request->input('slug'), + url: $request->input('url'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Allgemeine Daten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantImpressUpdateController.php b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php index e2feaac..b18a1f1 100644 --- a/app/Domains/Admin/Controllers/TenantImpressUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php @@ -2,6 +2,8 @@ namespace App\Domains\Admin\Controllers; +use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressAction; +use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -10,13 +12,16 @@ class TenantImpressUpdateController extends CommonController { public function __invoke(Request $request): JsonResponse { - $this->tenant->update([ - 'impress_text' => $request->input('impress_text'), - ]); + $action = new UpdateTenantImpressAction(new UpdateTenantImpressRequest( + tenant: $this->tenant, + impressText: $request->input('impress_text'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Impressum wurde gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/TenantListApiController.php b/app/Domains/Admin/Controllers/TenantListApiController.php index 12c68e8..f09e6b4 100644 --- a/app/Domains/Admin/Controllers/TenantListApiController.php +++ b/app/Domains/Admin/Controllers/TenantListApiController.php @@ -2,7 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,7 +10,9 @@ class TenantListApiController extends CommonController { public function __invoke(Request $request): JsonResponse { - $tenants = Tenant::where('has_active_instance', true)->get()->map(function ($tenant) { + $tenants = $this->adminTenants->getActiveTenants(); + + $mapped = $tenants->map(function ($tenant) { return [ 'name' => $tenant->name, 'slug' => $tenant->slug, @@ -20,6 +21,6 @@ class TenantListApiController extends CommonController ]; }); - return response()->json(['tenants' => $tenants]); + return response()->json(['tenants' => $mapped]); } } diff --git a/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php index 7bf6fef..f6bf901 100644 --- a/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php @@ -2,6 +2,8 @@ namespace App\Domains\Admin\Controllers; +use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentAction; +use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -10,15 +12,18 @@ class TenantPaymentUpdateController extends CommonController { public function __invoke(Request $request): JsonResponse { - $this->tenant->update([ - 'account_iban' => $request->input('account_iban'), - 'account_bic' => $request->input('account_bic'), - 'account_name' => $request->input('account_name'), - ]); + $action = new UpdateTenantPaymentAction(new UpdateTenantPaymentRequest( + tenant: $this->tenant, + accountIban: $request->input('account_iban'), + accountBic: $request->input('account_bic'), + accountName: $request->input('account_name'), + )); + + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Bezahldaten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Controllers/UserDetailGetController.php b/app/Domains/Admin/Controllers/UserDetailGetController.php index 9e013e7..a093c0d 100644 --- a/app/Domains/Admin/Controllers/UserDetailGetController.php +++ b/app/Domains/Admin/Controllers/UserDetailGetController.php @@ -3,8 +3,6 @@ namespace App\Domains\Admin\Controllers; use App\Enumerations\UserRole; -use App\Models\Tenant; -use App\Models\User; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -13,13 +11,12 @@ class UserDetailGetController extends CommonController { public function __invoke(int $id, Request $request): JsonResponse { - $user = User::findOrFail($id); + $user = $this->adminUsers->findById($id); $userData = $user->toArray(); - unset($userData['password'], $userData['remember_token'], $userData['activation_token'], $userData['activation_token_expires_at']); - $tenantNames = Tenant::pluck('name', 'slug'); + $tenantNames = $this->adminTenants->getTenantNames(); $userData['nicename'] = $user->getNicename(); $userData['fullname'] = $user->getFullName(); $userData['local_group_name'] = $tenantNames[$user->local_group] ?? $user->local_group; @@ -29,7 +26,7 @@ class UserDetailGetController extends CommonController 'isOwnUser' => auth()->id() === $user->id, 'isLvTenant' => $this->tenant->slug === 'lv', 'userRoles' => UserRole::all()->map(fn($role) => ['slug' => $role->slug, 'name' => $role->name]), - 'localGroups' => Tenant::where('is_active_local_group', true)->get()->map(fn($t) => ['slug' => $t->slug, 'name' => $t->name]), + 'localGroups' => $this->adminTenants->getActiveLocalGroups()->map(fn($t) => ['slug' => $t->slug, 'name' => $t->name]), ]); } } diff --git a/app/Domains/Admin/Controllers/UserListApiController.php b/app/Domains/Admin/Controllers/UserListApiController.php index e4aa5dc..8ba8a76 100644 --- a/app/Domains/Admin/Controllers/UserListApiController.php +++ b/app/Domains/Admin/Controllers/UserListApiController.php @@ -2,8 +2,6 @@ namespace App\Domains\Admin\Controllers; -use App\Models\Tenant; -use App\Models\User; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -12,18 +10,10 @@ class UserListApiController extends CommonController { public function __invoke(Request $request): JsonResponse { - $tenantNames = Tenant::pluck('name', 'slug'); + $tenantNames = $this->adminTenants->getTenantNames(); + $users = $this->adminUsers->getListForTenant($this->tenant->slug); - $query = User::query(); - - if ($this->tenant->slug === 'lv') { - $query->orderBy('lastname')->orderBy('firstname'); - } else { - $query->where('local_group', $this->tenant->slug) - ->orderBy('lastname')->orderBy('firstname'); - } - - $users = $query->get()->map(function ($user) use ($tenantNames) { + $mapped = $users->map(function ($user) use ($tenantNames) { return [ 'id' => $user->id, 'firstname' => $user->firstname, @@ -35,6 +25,6 @@ class UserListApiController extends CommonController ]; }); - return response()->json(['users' => $users]); + return response()->json(['users' => $mapped]); } } diff --git a/app/Domains/Admin/Controllers/UserResetPasswordController.php b/app/Domains/Admin/Controllers/UserResetPasswordController.php index 253034f..d27ebb8 100644 --- a/app/Domains/Admin/Controllers/UserResetPasswordController.php +++ b/app/Domains/Admin/Controllers/UserResetPasswordController.php @@ -3,7 +3,6 @@ namespace App\Domains\Admin\Controllers; use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenCommand; -use App\Models\User; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -12,7 +11,7 @@ class UserResetPasswordController extends CommonController { public function __invoke(int $id, Request $request): JsonResponse { - $user = User::findOrFail($id); + $user = $this->adminUsers->findById($id); if (!$user->email) { return response()->json([ diff --git a/app/Domains/Admin/Controllers/UserToggleActiveController.php b/app/Domains/Admin/Controllers/UserToggleActiveController.php index 4c5ffe5..005d7bc 100644 --- a/app/Domains/Admin/Controllers/UserToggleActiveController.php +++ b/app/Domains/Admin/Controllers/UserToggleActiveController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\User; +use App\Domains\Admin\Actions\ToggleUserActive\ToggleUserActiveAction; +use App\Domains\Admin\Actions\ToggleUserActive\ToggleUserActiveRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,23 +12,19 @@ class UserToggleActiveController extends CommonController { public function __invoke(int $id, Request $request): JsonResponse { - $user = User::findOrFail($id); + $user = $this->adminUsers->findById($id); - if (auth()->id() === $user->id) { - return response()->json([ - 'status' => 'error', - 'message' => 'Du kannst dich nicht selbst deaktivieren.', - ]); - } + $action = new ToggleUserActiveAction(new ToggleUserActiveRequest( + user: $user, + currentUserId: auth()->id(), + )); - $user->update(['active' => !$user->active]); - - $status = $user->active ? 'aktiviert' : 'deaktiviert'; + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Benutzer*in wurde ' . $status . '.', - 'active' => $user->active, + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, + 'active' => $response->active, ]); } } diff --git a/app/Domains/Admin/Controllers/UserUpdateController.php b/app/Domains/Admin/Controllers/UserUpdateController.php index de85b97..6878692 100644 --- a/app/Domains/Admin/Controllers/UserUpdateController.php +++ b/app/Domains/Admin/Controllers/UserUpdateController.php @@ -2,7 +2,8 @@ namespace App\Domains\Admin\Controllers; -use App\Models\User; +use App\Domains\Admin\Actions\UpdateUser\UpdateUserAction; +use App\Domains\Admin\Actions\UpdateUser\UpdateUserRequest; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -11,32 +12,20 @@ class UserUpdateController extends CommonController { public function __invoke(int $id, Request $request): JsonResponse { - $user = User::findOrFail($id); - $isOwnUser = auth()->id() === $user->id; - $isLvTenant = $this->tenant->slug === 'lv'; + $user = $this->adminUsers->findById($id); - $allowedFields = [ - 'firstname', 'lastname', 'nickname', 'email', 'phone', 'birthday', - 'membership_id', 'address_1', 'address_2', 'postcode', 'city', - 'eating_habits', 'swimming_permission', 'first_aid_permission', - 'bank_account_owner', 'bank_account_iban', - 'medications', 'allergies', 'intolerances', - 'user_role_local_group', - ]; + $action = new UpdateUserAction(new UpdateUserRequest( + user: $user, + data: $request->all(), + isOwnUser: auth()->id() === $user->id, + isLvTenant: $this->tenant->slug === 'lv', + )); - if ($isLvTenant) { - $allowedFields[] = 'local_group'; - if (!$isOwnUser) { - $allowedFields[] = 'user_role_main'; - } - } - - $data = $request->only($allowedFields); - $user->update($data); + $response = $action->execute(); return response()->json([ - 'status' => 'success', - 'message' => 'Benutzerdaten wurden gespeichert.', + 'status' => $response->success ? 'success' : 'error', + 'message' => $response->message, ]); } } diff --git a/app/Domains/Admin/Repositories/AdminTenantRepository.php b/app/Domains/Admin/Repositories/AdminTenantRepository.php new file mode 100644 index 0000000..0c92d38 --- /dev/null +++ b/app/Domains/Admin/Repositories/AdminTenantRepository.php @@ -0,0 +1,30 @@ +firstOrFail(); + } + + public function getActiveTenants(): Collection + { + return Tenant::where('has_active_instance', true)->get(); + } + + public function getTenantNames(): SupportCollection + { + return Tenant::pluck('name', 'slug'); + } + + public function getActiveLocalGroups(): Collection + { + return Tenant::where('is_active_local_group', true)->get(); + } +} diff --git a/app/Domains/Admin/Repositories/AdminUserRepository.php b/app/Domains/Admin/Repositories/AdminUserRepository.php new file mode 100644 index 0000000..997ca58 --- /dev/null +++ b/app/Domains/Admin/Repositories/AdminUserRepository.php @@ -0,0 +1,25 @@ +where('local_group', $tenantSlug); + } + + return $query->orderBy('lastname')->orderBy('firstname')->get(); + } +} diff --git a/app/Scopes/CommonController.php b/app/Scopes/CommonController.php index dd0efae..695b531 100644 --- a/app/Scopes/CommonController.php +++ b/app/Scopes/CommonController.php @@ -2,6 +2,8 @@ namespace App\Scopes; +use App\Domains\Admin\Repositories\AdminTenantRepository; +use App\Domains\Admin\Repositories\AdminUserRepository; use App\Models\Tenant; use App\Providers\AuthCheckProvider; use App\Repositories\CostUnitRepository; @@ -23,6 +25,8 @@ abstract class CommonController { protected EventRepository $events; protected EventParticipantRepository $eventParticipants; protected EstimatesRepository $estimates; + protected AdminUserRepository $adminUsers; + protected AdminTenantRepository $adminTenants; public function __construct() { $this->tenant = app('tenant'); @@ -33,6 +37,8 @@ abstract class CommonController { $this->events = new EventRepository(); $this->eventParticipants = new EventParticipantRepository(); $this->estimates = new EstimatesRepository(); + $this->adminUsers = new AdminUserRepository(); + $this->adminTenants = new AdminTenantRepository(); } protected function checkAuth() {