singleloginsystem/app/Services/ConnectedAppService.php
= c0086ddb6a feature: implement ConnectedApp management with creation and editing support
- Added `ConnectedAppData` DTO for structured data representation.
- Implemented Livewire components for ConnectedApp list (`index`) and edit (`edit`).
- Integrated `ConnectedAppService` with CRUD operations.
- Updated routing to include ConnectedApp management paths.
- Enhanced UI with reusable components and dynamic dropdowns for protocols, providers, and statuses.
2026-05-14 14:03:53 +00:00

66 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Services;
use App\Data\ConnectedApp\{ConnectAppRequest, ConnectedAppData};
use App\Data\Ui\ConnectedApps\ConnectedAppData as UiConnectedAppData;
use App\Models\ConnectedApp;
use http\Exception\InvalidArgumentException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\DB;
use Spatie\LaravelData\PaginatedDataCollection;
use Throwable;
final class ConnectedAppService
{
/**
* Create a new connected app.
*
* @throws Throwable
*/
public function create(ConnectAppRequest $data): void
{
DB::transaction(
fn () => ConnectedApp::query()->create(
$data->toArray()
)
);
}
public function update(int $id, ConnectAppRequest $data): void
{
if (0 === $id) {
throw new InvalidArgumentException('Invalid id');
}
DB::transaction(
fn () => ConnectedApp::query()
->where('id', $id)
->update($data->toArray())
);
}
/**
* @return PaginatedDataCollection<int, UiConnectedAppData>
*/
public function getAll(): PaginatedDataCollection
{
$data = ConnectedApp::with('provider:name,id', 'protocol:id,name', 'status:id,name')
->paginate();
return UiConnectedAppData::collect($data, PaginatedDataCollection::class);
}
/**
* @throws ModelNotFoundException<ConnectedApp>
*/
public function getConnectedApp(int $id): ConnectedAppData
{
$data = ConnectedApp::with('provider:id', 'protocol:id', 'status:id')
->findOrFail($id);
return ConnectedAppData::from($data);
}
}