Code Styling

This commit is contained in:
2026-06-21 22:12:05 +02:00
parent aebb2f9aaa
commit c1ef1d71ad
49 changed files with 650 additions and 159 deletions
@@ -0,0 +1,38 @@
<?php
namespace App\Domains\Admin\Actions\CreateTenant;
use App\Models\Tenant;
class CreateTenantAction
{
public function __construct(private CreateTenantRequest $request)
{
}
public function execute(): CreateTenantResponse
{
$response = new CreateTenantResponse();
$tenant = Tenant::create([
'name' => $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;
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Domains\Admin\Actions\CreateTenant;
class CreateTenantRequest
{
public function __construct(
public string $name,
public string $slug,
public string $url,
) {
}
}
@@ -0,0 +1,10 @@
<?php
namespace App\Domains\Admin\Actions\CreateTenant;
class CreateTenantResponse
{
public bool $success = false;
public string $message = '';
public ?string $slug = null;
}
@@ -0,0 +1,30 @@
<?php
namespace App\Domains\Admin\Actions\ToggleUserActive;
class ToggleUserActiveAction
{
public function __construct(private ToggleUserActiveRequest $request)
{
}
public function execute(): ToggleUserActiveResponse
{
$response = new ToggleUserActiveResponse();
if ($this->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;
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Domains\Admin\Actions\ToggleUserActive;
use App\Models\User;
class ToggleUserActiveRequest
{
public function __construct(
public User $user,
public int $currentUserId,
) {
}
}
@@ -0,0 +1,10 @@
<?php
namespace App\Domains\Admin\Actions\ToggleUserActive;
class ToggleUserActiveResponse
{
public bool $success = false;
public string $message = '';
public ?bool $active = null;
}
@@ -0,0 +1,27 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantContact;
class UpdateTenantContactAction
{
public function __construct(private UpdateTenantContactRequest $request)
{
}
public function execute(): UpdateTenantContactResponse
{
$response = new UpdateTenantContactResponse();
$this->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;
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantContact;
use App\Models\Tenant;
class UpdateTenantContactRequest
{
public function __construct(
public Tenant $tenant,
public string $email,
public string $emailFinance,
public string $postcode,
public string $city,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantContact;
class UpdateTenantContactResponse
{
public bool $success = false;
public string $message = '';
}
@@ -0,0 +1,24 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGdpr;
class UpdateTenantGdprAction
{
public function __construct(private UpdateTenantGdprRequest $request)
{
}
public function execute(): UpdateTenantGdprResponse
{
$response = new UpdateTenantGdprResponse();
$this->request->tenant->update([
'gdpr_text' => $this->request->gdprText,
]);
$response->success = true;
$response->message = 'Datenschutzerklärung wurde gespeichert.';
return $response;
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGdpr;
use App\Models\Tenant;
class UpdateTenantGdprRequest
{
public function __construct(
public Tenant $tenant,
public string $gdprText,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGdpr;
class UpdateTenantGdprResponse
{
public bool $success = false;
public string $message = '';
}
@@ -0,0 +1,26 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGeneral;
class UpdateTenantGeneralAction
{
public function __construct(private UpdateTenantGeneralRequest $request)
{
}
public function execute(): UpdateTenantGeneralResponse
{
$response = new UpdateTenantGeneralResponse();
$this->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;
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGeneral;
use App\Models\Tenant;
class UpdateTenantGeneralRequest
{
public function __construct(
public Tenant $tenant,
public string $name,
public string $slug,
public string $url,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantGeneral;
class UpdateTenantGeneralResponse
{
public bool $success = false;
public string $message = '';
}
@@ -0,0 +1,24 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantImpress;
class UpdateTenantImpressAction
{
public function __construct(private UpdateTenantImpressRequest $request)
{
}
public function execute(): UpdateTenantImpressResponse
{
$response = new UpdateTenantImpressResponse();
$this->request->tenant->update([
'impress_text' => $this->request->impressText,
]);
$response->success = true;
$response->message = 'Impressum wurde gespeichert.';
return $response;
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantImpress;
use App\Models\Tenant;
class UpdateTenantImpressRequest
{
public function __construct(
public Tenant $tenant,
public string $impressText,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantImpress;
class UpdateTenantImpressResponse
{
public bool $success = false;
public string $message = '';
}
@@ -0,0 +1,26 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantPayment;
class UpdateTenantPaymentAction
{
public function __construct(private UpdateTenantPaymentRequest $request)
{
}
public function execute(): UpdateTenantPaymentResponse
{
$response = new UpdateTenantPaymentResponse();
$this->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;
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantPayment;
use App\Models\Tenant;
class UpdateTenantPaymentRequest
{
public function __construct(
public Tenant $tenant,
public string $accountIban,
public string $accountBic,
public string $accountName,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateTenantPayment;
class UpdateTenantPaymentResponse
{
public bool $success = false;
public string $message = '';
}
@@ -0,0 +1,39 @@
<?php
namespace App\Domains\Admin\Actions\UpdateUser;
class UpdateUserAction
{
public function __construct(private UpdateUserRequest $request)
{
}
public function execute(): UpdateUserResponse
{
$response = new UpdateUserResponse();
$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',
];
if ($this->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;
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Domains\Admin\Actions\UpdateUser;
use App\Models\User;
class UpdateUserRequest
{
public function __construct(
public User $user,
public array $data,
public bool $isOwnUser,
public bool $isLvTenant,
) {
}
}
@@ -0,0 +1,9 @@
<?php
namespace App\Domains\Admin\Actions\UpdateUser;
class UpdateUserResponse
{
public bool $success = false;
public string $message = '';
}
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,7 @@ class ManagedTenantContactGetController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
return response()->json([ return response()->json([
'email' => $tenant->email, 'email' => $tenant->email,
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,18 +12,21 @@ class ManagedTenantContactUpdateController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$tenant->update([ $action = new UpdateTenantContactAction(new UpdateTenantContactRequest(
'email' => $request->input('email'), tenant: $tenant,
'email_finance' => $request->input('email_finance'), email: $request->input('email'),
'postcode' => $request->input('postcode'), emailFinance: $request->input('email_finance'),
'city' => $request->input('city'), postcode: $request->input('postcode'),
]); city: $request->input('city'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Kontaktdaten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,7 @@ class ManagedTenantGdprGetController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
return response()->json([ return response()->json([
'gdpr_text' => $tenant->gdpr_text ?? '', 'gdpr_text' => $tenant->gdpr_text ?? '',
@@ -2,24 +2,29 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class ManagedTenantGdprUpdateController extends CommonController class ManagedTenantGdprUpdateController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$tenant->update([ $action = new UpdateTenantGdprAction(new UpdateTenantGdprRequest(
'gdpr_text' => $request->input('gdpr_text'), tenant: $tenant,
]); gdprText: $request->input('gdpr_text'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Datenschutzerklärung wurde gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,7 @@ class ManagedTenantImpressGetController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
return response()->json([ return response()->json([
'impress_text' => $tenant->impress_text ?? '', 'impress_text' => $tenant->impress_text ?? '',
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,15 +12,18 @@ class ManagedTenantImpressUpdateController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$tenant->update([ $action = new UpdateTenantImpressAction(new UpdateTenantImpressRequest(
'impress_text' => $request->input('impress_text'), tenant: $tenant,
]); impressText: $request->input('impress_text'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Impressum wurde gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,7 @@ class ManagedTenantPaymentGetController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
return response()->json([ return response()->json([
'account_iban' => $tenant->account_iban, 'account_iban' => $tenant->account_iban,
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,17 +12,20 @@ class ManagedTenantPaymentUpdateController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$tenant->update([ $action = new UpdateTenantPaymentAction(new UpdateTenantPaymentRequest(
'account_iban' => $request->input('account_iban'), tenant: $tenant,
'account_bic' => $request->input('account_bic'), accountIban: $request->input('account_iban'),
'account_name' => $request->input('account_name'), accountBic: $request->input('account_bic'),
]); accountName: $request->input('account_name'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Bezahldaten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,6 +2,8 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactAction;
use App\Domains\Admin\Actions\UpdateTenantContact\UpdateTenantContactRequest;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -10,16 +12,19 @@ class TenantContactUpdateController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
$this->tenant->update([ $action = new UpdateTenantContactAction(new UpdateTenantContactRequest(
'email' => $request->input('email'), tenant: $this->tenant,
'email_finance' => $request->input('email_finance'), email: $request->input('email'),
'postcode' => $request->input('postcode'), emailFinance: $request->input('email_finance'),
'city' => $request->input('city'), postcode: $request->input('postcode'),
]); city: $request->input('city'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Kontaktdaten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,25 +12,18 @@ class TenantCreateController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
$tenant = Tenant::create([ $action = new CreateTenantAction(new CreateTenantRequest(
'name' => $request->input('name'), name: $request->input('name'),
'slug' => $request->input('slug'), slug: $request->input('slug'),
'url' => $request->input('url'), url: $request->input('url'),
'email' => '', ));
'email_finance' => '',
'account_name' => '', $response = $action->execute();
'account_iban' => '',
'account_bic' => '',
'city' => '',
'postcode' => '',
'is_active_local_group' => true,
'has_active_instance' => true,
]);
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Stamm wurde angelegt.', 'message' => $response->message,
'slug' => $tenant->slug, 'slug' => $response->slug,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Providers\InertiaProvider; use App\Providers\InertiaProvider;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -12,7 +11,7 @@ class TenantEditPageController extends CommonController
{ {
public function __invoke(string $slug, Request $request): Response public function __invoke(string $slug, Request $request): Response
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$inertiaProvider = new InertiaProvider('Admin/TenantEdit', [ $inertiaProvider = new InertiaProvider('Admin/TenantEdit', [
'tenant' => [ 'tenant' => [
@@ -2,6 +2,8 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprAction;
use App\Domains\Admin\Actions\UpdateTenantGdpr\UpdateTenantGdprRequest;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -10,13 +12,16 @@ class TenantGdprUpdateController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
$this->tenant->update([ $action = new UpdateTenantGdprAction(new UpdateTenantGdprRequest(
'gdpr_text' => $request->input('gdpr_text'), tenant: $this->tenant,
]); gdprText: $request->input('gdpr_text'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Datenschutzerklärung wurde gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,7 @@ class TenantGeneralGetController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
return response()->json([ return response()->json([
'name' => $tenant->name, 'name' => $tenant->name,
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,17 +12,20 @@ class TenantGeneralUpdateController extends CommonController
{ {
public function __invoke(string $slug, Request $request): JsonResponse public function __invoke(string $slug, Request $request): JsonResponse
{ {
$tenant = Tenant::where('slug', $slug)->firstOrFail(); $tenant = $this->adminTenants->findBySlug($slug);
$tenant->update([ $action = new UpdateTenantGeneralAction(new UpdateTenantGeneralRequest(
'name' => $request->input('name'), tenant: $tenant,
'slug' => $request->input('slug'), name: $request->input('name'),
'url' => $request->input('url'), slug: $request->input('slug'),
]); url: $request->input('url'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Allgemeine Daten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,6 +2,8 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressAction;
use App\Domains\Admin\Actions\UpdateTenantImpress\UpdateTenantImpressRequest;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -10,13 +12,16 @@ class TenantImpressUpdateController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
$this->tenant->update([ $action = new UpdateTenantImpressAction(new UpdateTenantImpressRequest(
'impress_text' => $request->input('impress_text'), tenant: $this->tenant,
]); impressText: $request->input('impress_text'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Impressum wurde gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -2,7 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,7 +10,9 @@ class TenantListApiController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse 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 [ return [
'name' => $tenant->name, 'name' => $tenant->name,
'slug' => $tenant->slug, 'slug' => $tenant->slug,
@@ -20,6 +21,6 @@ class TenantListApiController extends CommonController
]; ];
}); });
return response()->json(['tenants' => $tenants]); return response()->json(['tenants' => $mapped]);
} }
} }
@@ -2,6 +2,8 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentAction;
use App\Domains\Admin\Actions\UpdateTenantPayment\UpdateTenantPaymentRequest;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -10,15 +12,18 @@ class TenantPaymentUpdateController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
$this->tenant->update([ $action = new UpdateTenantPaymentAction(new UpdateTenantPaymentRequest(
'account_iban' => $request->input('account_iban'), tenant: $this->tenant,
'account_bic' => $request->input('account_bic'), accountIban: $request->input('account_iban'),
'account_name' => $request->input('account_name'), accountBic: $request->input('account_bic'),
]); accountName: $request->input('account_name'),
));
$response = $action->execute();
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Bezahldaten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -3,8 +3,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Enumerations\UserRole; use App\Enumerations\UserRole;
use App\Models\Tenant;
use App\Models\User;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -13,13 +11,12 @@ class UserDetailGetController extends CommonController
{ {
public function __invoke(int $id, Request $request): JsonResponse public function __invoke(int $id, Request $request): JsonResponse
{ {
$user = User::findOrFail($id); $user = $this->adminUsers->findById($id);
$userData = $user->toArray(); $userData = $user->toArray();
unset($userData['password'], $userData['remember_token'], $userData['activation_token'], $userData['activation_token_expires_at']); 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['nicename'] = $user->getNicename();
$userData['fullname'] = $user->getFullName(); $userData['fullname'] = $user->getFullName();
$userData['local_group_name'] = $tenantNames[$user->local_group] ?? $user->local_group; $userData['local_group_name'] = $tenantNames[$user->local_group] ?? $user->local_group;
@@ -29,7 +26,7 @@ class UserDetailGetController extends CommonController
'isOwnUser' => auth()->id() === $user->id, 'isOwnUser' => auth()->id() === $user->id,
'isLvTenant' => $this->tenant->slug === 'lv', 'isLvTenant' => $this->tenant->slug === 'lv',
'userRoles' => UserRole::all()->map(fn($role) => ['slug' => $role->slug, 'name' => $role->name]), '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]),
]); ]);
} }
} }
@@ -2,8 +2,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Models\Tenant;
use App\Models\User;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -12,18 +10,10 @@ class UserListApiController extends CommonController
{ {
public function __invoke(Request $request): JsonResponse 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(); $mapped = $users->map(function ($user) use ($tenantNames) {
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) {
return [ return [
'id' => $user->id, 'id' => $user->id,
'firstname' => $user->firstname, 'firstname' => $user->firstname,
@@ -35,6 +25,6 @@ class UserListApiController extends CommonController
]; ];
}); });
return response()->json(['users' => $users]); return response()->json(['users' => $mapped]);
} }
} }
@@ -3,7 +3,6 @@
namespace App\Domains\Admin\Controllers; namespace App\Domains\Admin\Controllers;
use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenCommand; use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenCommand;
use App\Models\User;
use App\Scopes\CommonController; use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -12,7 +11,7 @@ class UserResetPasswordController extends CommonController
{ {
public function __invoke(int $id, Request $request): JsonResponse public function __invoke(int $id, Request $request): JsonResponse
{ {
$user = User::findOrFail($id); $user = $this->adminUsers->findById($id);
if (!$user->email) { if (!$user->email) {
return response()->json([ return response()->json([
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,23 +12,19 @@ class UserToggleActiveController extends CommonController
{ {
public function __invoke(int $id, Request $request): JsonResponse public function __invoke(int $id, Request $request): JsonResponse
{ {
$user = User::findOrFail($id); $user = $this->adminUsers->findById($id);
if (auth()->id() === $user->id) { $action = new ToggleUserActiveAction(new ToggleUserActiveRequest(
return response()->json([ user: $user,
'status' => 'error', currentUserId: auth()->id(),
'message' => 'Du kannst dich nicht selbst deaktivieren.', ));
]);
}
$user->update(['active' => !$user->active]); $response = $action->execute();
$status = $user->active ? 'aktiviert' : 'deaktiviert';
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Benutzer*in wurde ' . $status . '.', 'message' => $response->message,
'active' => $user->active, 'active' => $response->active,
]); ]);
} }
} }
@@ -2,7 +2,8 @@
namespace App\Domains\Admin\Controllers; 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 App\Scopes\CommonController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -11,32 +12,20 @@ class UserUpdateController extends CommonController
{ {
public function __invoke(int $id, Request $request): JsonResponse public function __invoke(int $id, Request $request): JsonResponse
{ {
$user = User::findOrFail($id); $user = $this->adminUsers->findById($id);
$isOwnUser = auth()->id() === $user->id;
$isLvTenant = $this->tenant->slug === 'lv';
$allowedFields = [ $action = new UpdateUserAction(new UpdateUserRequest(
'firstname', 'lastname', 'nickname', 'email', 'phone', 'birthday', user: $user,
'membership_id', 'address_1', 'address_2', 'postcode', 'city', data: $request->all(),
'eating_habits', 'swimming_permission', 'first_aid_permission', isOwnUser: auth()->id() === $user->id,
'bank_account_owner', 'bank_account_iban', isLvTenant: $this->tenant->slug === 'lv',
'medications', 'allergies', 'intolerances', ));
'user_role_local_group',
];
if ($isLvTenant) { $response = $action->execute();
$allowedFields[] = 'local_group';
if (!$isOwnUser) {
$allowedFields[] = 'user_role_main';
}
}
$data = $request->only($allowedFields);
$user->update($data);
return response()->json([ return response()->json([
'status' => 'success', 'status' => $response->success ? 'success' : 'error',
'message' => 'Benutzerdaten wurden gespeichert.', 'message' => $response->message,
]); ]);
} }
} }
@@ -0,0 +1,30 @@
<?php
namespace App\Domains\Admin\Repositories;
use App\Models\Tenant;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Collection as SupportCollection;
class AdminTenantRepository
{
public function findBySlug(string $slug): Tenant
{
return Tenant::where('slug', $slug)->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();
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Domains\Admin\Repositories;
use App\Models\User;
use Illuminate\Database\Eloquent\Collection;
class AdminUserRepository
{
public function findById(int $id): User
{
return User::findOrFail($id);
}
public function getListForTenant(string $tenantSlug): Collection
{
$query = User::query();
if ($tenantSlug !== 'lv') {
$query->where('local_group', $tenantSlug);
}
return $query->orderBy('lastname')->orderBy('firstname')->get();
}
}
+6
View File
@@ -2,6 +2,8 @@
namespace App\Scopes; namespace App\Scopes;
use App\Domains\Admin\Repositories\AdminTenantRepository;
use App\Domains\Admin\Repositories\AdminUserRepository;
use App\Models\Tenant; use App\Models\Tenant;
use App\Providers\AuthCheckProvider; use App\Providers\AuthCheckProvider;
use App\Repositories\CostUnitRepository; use App\Repositories\CostUnitRepository;
@@ -23,6 +25,8 @@ abstract class CommonController {
protected EventRepository $events; protected EventRepository $events;
protected EventParticipantRepository $eventParticipants; protected EventParticipantRepository $eventParticipants;
protected EstimatesRepository $estimates; protected EstimatesRepository $estimates;
protected AdminUserRepository $adminUsers;
protected AdminTenantRepository $adminTenants;
public function __construct() { public function __construct() {
$this->tenant = app('tenant'); $this->tenant = app('tenant');
@@ -33,6 +37,8 @@ abstract class CommonController {
$this->events = new EventRepository(); $this->events = new EventRepository();
$this->eventParticipants = new EventParticipantRepository(); $this->eventParticipants = new EventParticipantRepository();
$this->estimates = new EstimatesRepository(); $this->estimates = new EstimatesRepository();
$this->adminUsers = new AdminUserRepository();
$this->adminTenants = new AdminTenantRepository();
} }
protected function checkAuth() { protected function checkAuth() {