Refactor: change name of external apps from ConnectedService to ConnectedApp

This commit is contained in:
= 2026-05-13 10:30:35 +00:00
parent 6ddde416cf
commit 6f07068b1d
27 changed files with 96 additions and 92 deletions

View File

@ -4,7 +4,7 @@
namespace App\Data\Ui\ConnectedServices;
use App\Enums\{ConnectionProtocols, ConnectionStatus};
use App\Enums\{ConnectionProtocolEnum, ConnectionStatusEnum};
use Spatie\LaravelData\Data;
final class ConnectedServiceData extends Data
@ -12,8 +12,8 @@ final class ConnectedServiceData extends Data
public function __construct(
public string $name,
public string $icon,
public ConnectionProtocols $type,
public ConnectionProtocolEnum $type,
public string $connectionService,
public ConnectionStatus $status,
public ConnectionStatusEnum $status,
) {}
}

View File

@ -5,7 +5,7 @@
namespace App\Data\Ui\ManageRoles;
use App\Data\Users\UserData;
use App\Enums\RolesStatus;
use App\Enums\RolesStatusEnum;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\{Data, DataCollection};
@ -21,6 +21,6 @@ public function __construct(
/** @var DataCollection<int, ServiceData> */
#[DataCollectionOf(class: ServiceData::class), ]
public DataCollection $services,
public RolesStatus $status,
public RolesStatusEnum $status,
) {}
}

View File

@ -6,7 +6,7 @@
use App\Concerns\EnumValuesAsArray;
enum ConnectionProtocols: string
enum ConnectionProtocolEnum: string
{
use EnumValuesAsArray;

View File

@ -6,7 +6,7 @@
use App\Concerns\EnumValuesAsArray;
enum ConnectionStatus: string
enum ConnectionStatusEnum: string
{
use EnumValuesAsArray;

View File

@ -4,7 +4,7 @@
namespace App\Enums;
enum RolesStatus: string
enum RolesStatusEnum: string
{
case Active = 'active';
case Inactive = 'inactive';

View File

@ -5,10 +5,9 @@
namespace App\Factories;
use App\Data\ConnectService\ConnectServiceData;
use App\Enums\ConnectionStatus;
use App\Models\ServiceStatus;
use App\Enums\ConnectionStatusEnum;
final class ConnectedServiceFactory
final class ConnectedAppFactory
{
public function createDataFromDto(ConnectServiceData $data): array
{
@ -23,8 +22,8 @@ public function createDataFromDto(ConnectServiceData $data): array
// Check if the staus is filled, if not select disconnected by default
if (null === $data->statusId) {
$status = ServiceStatus::query()
->where('name', '=', ConnectionStatus::Disconnected->value)
$status = ConnectionStatusEnum::query()
->where('name', '=', ConnectionStatusEnum::Disconnected->value)
->pluck('id');
$result['service_status_id'] = $status[0];
}

View File

@ -9,7 +9,7 @@
use Livewire\Attributes\Validate;
use Livewire\Form;
class ConnectServiceFrom extends Form
class StoreConnectedAppFrom extends Form
{
#[Validate('required|string|max:255|min:3')]
public string $name = '';

View File

@ -15,20 +15,20 @@
'service_provider_id',
'service_status_id',
])]
class ConnectedService extends Model
class ConnectedApp extends Model
{
public function protocol(): HasOne
{
return $this->hasOne(ServiceProtocol::class, 'id', 'service_protocol_id');
return $this->hasOne(ConnectionProtocol::class, 'id', 'service_protocol_id');
}
public function provider(): HasOne
{
return $this->hasOne(ServiceProvider::class, 'id', 'service_provider_id');
return $this->hasOne(ConnectionProvider::class, 'id', 'service_provider_id');
}
public function status(): HasOne
{
return $this->hasOne(ServiceStatus::class, 'id', 'service_status_id');
return $this->hasOne(ConnectionStatus::class, 'id', 'service_status_id');
}
}

View File

@ -6,4 +6,4 @@
use Illuminate\Database\Eloquent\Model;
final class ServiceProvider extends Model {}
final class ConnectionProtocol extends Model {}

View File

@ -6,4 +6,4 @@
use Illuminate\Database\Eloquent\Model;
final class ServiceProtocol extends Model {}
final class ConnectionProvider extends Model {}

View File

@ -7,5 +7,5 @@
use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Database\Eloquent\Model;
#[Table('service_statuses')]
class ServiceStatus extends Model {}
#[Table('connection_statuses')]
class ConnectionStatus extends Model {}

View File

@ -5,17 +5,17 @@
namespace App\Services;
use App\Data\ConnectService\ConnectServiceData;
use App\Factories\ConnectedServiceFactory;
use App\Models\ConnectedService;
use App\Factories\ConnectedAppFactory;
use App\Models\ConnectedApp;
use Illuminate\Support\Facades\DB;
final class ConnectedServicesService
{
public function create(ConnectServiceData $data): void
{
$data = app(ConnectedServiceFactory::class)->createDataFromDto($data);
$data = app(ConnectedAppFactory::class)->createDataFromDto($data);
DB::transaction(
fn () => ConnectedService::create(
fn () => ConnectedApp::create(
$data
)
);

View File

@ -13,7 +13,7 @@
*/
public function up(): void
{
Schema::create('service_providers', function (Blueprint $table): void {
Schema::create('connection_providers', function (Blueprint $table): void {
$table->id();
$table->string('name');
$table->string('slug')->unique();

View File

@ -13,7 +13,7 @@
*/
public function up(): void
{
Schema::create('service_statuses', function (Blueprint $table): void {
Schema::create('connection_statuses', function (Blueprint $table): void {
$table->id();
$table->string('name')->unique();
$table->timestamps();

View File

@ -13,7 +13,7 @@
*/
public function up(): void
{
Schema::create('service_protocols', function (Blueprint $table): void {
Schema::create('connection_protocols', function (Blueprint $table): void {
$table->id();
$table->string('name')->unique();
$table->timestamps();

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
use App\Models\{ServiceProtocol, ServiceProvider, ServiceStatus};
use App\Models\{ConnectionProtocol, ConnectionProvider, ConnectionStatus};
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
@ -14,16 +14,16 @@
*/
public function up(): void
{
Schema::create('connected_services', function (Blueprint $table): void {
Schema::create('connected_apps', function (Blueprint $table): void {
$table->id();
$table->string('name');
$table->string('slug')->unique();
$table->foreignIdFor(ServiceProtocol::class);
$table->foreignIdFor(ServiceProvider::class);
$table->foreignIdFor(ServiceStatus::class);
$table->foreignIdFor(ConnectionProtocol::class);
$table->foreignIdFor(ConnectionProvider::class);
$table->foreignIdFor(ConnectionStatus::class);
$table->timestamps();
$table->index(['name', 'slug']);
$table->index(['service_protocol_id', 'service_provider_id']);
$table->index(['connection_protocol_id', 'connection_provider_id']);
});
}

View File

@ -4,11 +4,11 @@
namespace Database\Seeders;
use App\Enums\ConnectionStatus;
use App\Models\ServiceStatus;
use App\Enums\{ConnectionProtocolEnum};
use App\Models\ConnectionProtocol;
use Illuminate\Database\Seeder;
final class ServiceStatusSeeder extends Seeder
final class ConnectionProtocolSeeder extends Seeder
{
/**
* Run the database seeds.
@ -18,8 +18,8 @@ public function run(): void
$data = array_map(fn ($value) => [
'name' => $value,
'created_at' => now(),
], ConnectionStatus::values());
ServiceStatus::query()
], ConnectionProtocolEnum::values());
ConnectionProtocol::query()
->upsert($data, 'name', ['updated_at']);
}
}

View File

@ -4,10 +4,10 @@
namespace Database\Seeders;
use App\Models\ServiceProvider;
use App\Models\ConnectionProvider;
use Illuminate\Database\Seeder;
class ServiceProviderSeeder extends Seeder
class ConnectionProviderSeeder extends Seeder
{
/**
* Run the database seeds.
@ -27,6 +27,6 @@ public function run(): void
'slug' => 'oneclick',
],
];
ServiceProvider::upsert($data, ['slug'], ['name']);
ConnectionProvider::query()->upsert($data, ['slug'], ['name']);
}
}

View File

@ -4,11 +4,11 @@
namespace Database\Seeders;
use App\Enums\ConnectionProtocols;
use App\Models\ServiceProtocol;
use App\Enums\ConnectionStatusEnum;
use App\Models\ConnectionStatus;
use Illuminate\Database\Seeder;
final class ServiceProtocolsSeeder extends Seeder
final class ConnectionStatusSeeder extends Seeder
{
/**
* Run the database seeds.
@ -18,8 +18,8 @@ public function run(): void
$data = array_map(fn ($value) => [
'name' => $value,
'created_at' => now(),
], ConnectionProtocols::values());
ServiceProtocol::query()
], ConnectionStatusEnum::values());
ConnectionStatus::query()
->upsert($data, 'name', ['updated_at']);
}
}

View File

@ -4,10 +4,10 @@
namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
final class DatabaseSeeder extends Seeder
{
/**
@ -17,9 +17,13 @@ public function run(): void
{
// User::factory(10)->create();
User::factory()->create([
'name' => 'Test User',
'email' => 'test@example.com',
]);
// User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
$this->call(ConnectionStatusSeeder::class);
$this->call(ConnectionProtocolSeeder::class);
$this->call(ConnectionProviderSeeder::class);
}
}

View File

@ -1,7 +1,8 @@
<?php
use App\Data\Ui\ConnectedServices\ConnectedServiceData;
use App\Enums\ConnectionStatus;
use App\Enums\ConnectionProtocolEnum;
use App\Enums\ConnectionStatusEnum;
use App\Enums\ConnectionProtocols;
use Illuminate\Support\Collection;
use Livewire\Component;
@ -18,30 +19,30 @@ public function mount(): void
new ConnectedServiceData(
name: 'Microsoft Outlook',
icon: 'home',
type: ConnectionProtocols::OIDC,
type: ConnectionProtocolEnum::OIDC,
connectionService: 'Azure AD',
status: ConnectionStatus::Connected
status: ConnectionStatusEnum::Connected
),
new ConnectedServiceData(
name: 'Microsoft Teams',
icon: 'home',
type: ConnectionProtocols::OIDC,
type: ConnectionProtocolEnum::OIDC,
connectionService: 'Azure AD',
status: ConnectionStatus::Pending
status: ConnectionStatusEnum::Pending
),
new ConnectedServiceData(
name: 'Keka HR',
icon: 'home',
type: ConnectionProtocols::SAML,
type: ConnectionProtocolEnum::SAML,
connectionService: 'KeKA',
status: ConnectionStatus::Disconnected
status: ConnectionStatusEnum::Disconnected
),
new ConnectedServiceData(
name: 'Trutimer',
icon: 'home',
type: ConnectionProtocols::SAML,
type: ConnectionProtocolEnum::SAML,
connectionService: 'Redmine',
status: ConnectionStatus::Error
status: ConnectionStatusEnum::Error
),
], DataCollection::class);
}
@ -69,10 +70,10 @@ public function mount(): void
<div
@class([
"w-2 h-2 rounded-full",
'bg-green-400' => $service->status === ConnectionStatus::Connected,
'bg-gray-400' => $service->status === ConnectionStatus::Disconnected,
'bg-yellow-400' => $service->status === ConnectionStatus::Pending,
'bg-red-400' => $service->status === ConnectionStatus::Error,
'bg-green-400' => $service->status === ConnectionStatusEnum::Connected,
'bg-gray-400' => $service->status === ConnectionStatusEnum::Disconnected,
'bg-yellow-400' => $service->status === ConnectionStatusEnum::Pending,
'bg-red-400' => $service->status === ConnectionStatusEnum::Error,
])
></div>
<p class="text-sm">{{ucfirst($service->status->name)}}</p>

View File

@ -10,7 +10,7 @@
<div>
<x-shared.card title="Connected Services" icon="lucide-grid-2x2-plus" class="p-0">
<x-slot:actions>
<x-shared.button :link="route('connected-services.create')">
<x-shared.button :link="route('connected-apps.create')">
<div class="flex items-center gap-x-2">
<x-lucide-plus class="w-5 h-5"/>
{{ __('Add service') }}
@ -19,7 +19,7 @@
</x-slot:actions>
<x-shared.tabs.tabs wire:model="selectedTab" class="px-4">
<x-shared.tabs.tab name="all-tab" label="All" class="">
<livewire:dashboard.connected-services.all/>
<livewire:dashboard.connected-apps.all/>
</x-shared.tabs.tab>
<x-shared.tabs.tab name="oidc-tab" label="OIDC">
<div>Tricks</div>

View File

@ -1,9 +1,9 @@
<?php
use App\Data\Ui\ManageRoles\{RoleData,ServiceData};
use App\Data\Ui\ManageRoles\{RoleData, ServiceData};
use App\Data\Ui\TableHeader;
use App\Data\Users\UserData;
use App\Enums\RolesStatus;
use App\Enums\RolesStatusEnum;
use Livewire\Component;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\DataCollection;
@ -62,7 +62,7 @@ public function mount(): void
DataCollection::class,
),
status: RolesStatus::Active,
status: RolesStatusEnum::Active,
),
],
DataCollection::class,
@ -85,7 +85,7 @@ public function mount(): void
@php /** @var RoleData $role */ @endphp
<div class="flex -space-x-3">
@foreach($role->users as $user)
<x-shared.avatar class="text-blue-800" :placeholder="$user->name" />
<x-shared.avatar class="text-blue-800" :placeholder="$user->name"/>
@endforeach
</div>
@endscope

View File

@ -4,7 +4,7 @@
use App\Data\Users\UserData;
use App\Data\Ui\ManageRoles\RoleData;
use App\Data\Ui\ManageRoles\ServiceData;
use App\Enums\RolesStatus;
use App\Enums\RolesStatusEnum;
use Livewire\Component;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\DataCollection;
@ -40,7 +40,7 @@ public function mount(): void
new ServiceData(name: 'AWS Core'),
new ServiceData(name: 'GitHub Enterprise'),
], DataCollection::class),
status: RolesStatus::Active,
status: RolesStatusEnum::Active,
),
new RoleData(
name: 'HR Manager',
@ -49,7 +49,7 @@ public function mount(): void
new ServiceData(name: 'Keka'),
new ServiceData(name: 'Outlook'),
], DataCollection::class),
status: RolesStatus::Active,
status: RolesStatusEnum::Active,
)
], DataCollection::class)
),
@ -65,7 +65,7 @@ public function mount(): void
services: ServiceData::collect([
new ServiceData(name: 'Forge'),
], DataCollection::class),
status: RolesStatus::Active,
status: RolesStatusEnum::Active,
)
], DataCollection::class)
),
@ -81,7 +81,7 @@ public function mount(): void
services: ServiceData::collect([
new ServiceData(name: 'Analytics Dashboard'),
], DataCollection::class),
status: RolesStatus::Active,
status: RolesStatusEnum::Active,
)
], DataCollection::class)
)
@ -100,7 +100,7 @@ public function mount(): void
<x-table :headers="$header->toArray()" :rows="$users">
@scope('cell_name', $row)
<x-shared.avatar :placeholder="$row->name" :title="$row->name" :subtitle="$row->email" />
<x-shared.avatar :placeholder="$row->name" :title="$row->name" :subtitle="$row->email"/>
@endscope
@scope('cell_role.name', $row)
<div class="flex space-x-2">

View File

@ -1,8 +1,8 @@
<?php
use App\Livewire\Forms\ConnectServiceFrom;
use App\Models\ServiceProtocol;
use App\Models\ServiceProvider;
use App\Livewire\Forms\StoreConnectedAppFrom;
use App\Models\ConnectionProtocol;
use App\Models\ConnectionProvider;
use Livewire\Attributes\Computed;
use Livewire\Component;
use Livewire\Attributes\Title;
@ -10,18 +10,18 @@
new
#[Title('Create a service')]
class extends Component {
public ConnectServiceFrom $form;
public StoreConnectedAppFrom $form;
#[Computed]
public function providers()
{
return ServiceProvider::query()->get();
return ConnectionProvider::query()->get();
}
#[Computed]
public function protocols()
{
return ServiceProtocol::query()->get()->map(function (ServiceProtocol $protocol) {
return ConnectionProtocol::query()->get()->map(function (ConnectionProtocol $protocol) {
$protocol->name = ucfirst($protocol->name);
return $protocol;
});

View File

@ -13,10 +13,10 @@ class extends Component {
?>
<div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl">
<x-dashboard-stats />
<livewire:dashboard.connected-services />
<livewire:dashboard.roles.manager />
<livewire:dashboard.roles.hr-permission />
<livewire:dashboard.users.assignments />
<x-dashboard-stats/>
<livewire:dashboard.connected-apps/>
<livewire:dashboard.roles.manager/>
<livewire:dashboard.roles.hr-permission/>
<livewire:dashboard.users.assignments/>
</div>

View File

@ -9,8 +9,8 @@
Route::group(['middleware' => ['auth', 'verified']], function (): void {
Route::livewire('dashboard', 'pages::dashboard')->name('dashboard');
Route::prefix('connected-services')->name('connected-services.')->group(function (): void {
Route::livewire('create', 'pages::connected-services.create')->name('create');
Route::prefix('connected-apps')->name('connected-apps.')->group(function (): void {
Route::livewire('create', 'pages::connected-apps.create')->name('create');
});
});