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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,20 +15,20 @@
'service_provider_id', 'service_provider_id',
'service_status_id', 'service_status_id',
])] ])]
class ConnectedService extends Model class ConnectedApp extends Model
{ {
public function protocol(): HasOne 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 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 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; 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; 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\Attributes\Table;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
#[Table('service_statuses')] #[Table('connection_statuses')]
class ServiceStatus extends Model {} class ConnectionStatus extends Model {}

View File

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

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Models\{ServiceProtocol, ServiceProvider, ServiceStatus}; use App\Models\{ConnectionProtocol, ConnectionProvider, ConnectionStatus};
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@ -14,16 +14,16 @@
*/ */
public function up(): void public function up(): void
{ {
Schema::create('connected_services', function (Blueprint $table): void { Schema::create('connected_apps', function (Blueprint $table): void {
$table->id(); $table->id();
$table->string('name'); $table->string('name');
$table->string('slug')->unique(); $table->string('slug')->unique();
$table->foreignIdFor(ServiceProtocol::class); $table->foreignIdFor(ConnectionProtocol::class);
$table->foreignIdFor(ServiceProvider::class); $table->foreignIdFor(ConnectionProvider::class);
$table->foreignIdFor(ServiceStatus::class); $table->foreignIdFor(ConnectionStatus::class);
$table->timestamps(); $table->timestamps();
$table->index(['name', 'slug']); $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; namespace Database\Seeders;
use App\Enums\ConnectionStatus; use App\Enums\{ConnectionProtocolEnum};
use App\Models\ServiceStatus; use App\Models\ConnectionProtocol;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
final class ServiceStatusSeeder extends Seeder final class ConnectionProtocolSeeder extends Seeder
{ {
/** /**
* Run the database seeds. * Run the database seeds.
@ -18,8 +18,8 @@ public function run(): void
$data = array_map(fn ($value) => [ $data = array_map(fn ($value) => [
'name' => $value, 'name' => $value,
'created_at' => now(), 'created_at' => now(),
], ConnectionStatus::values()); ], ConnectionProtocolEnum::values());
ServiceStatus::query() ConnectionProtocol::query()
->upsert($data, 'name', ['updated_at']); ->upsert($data, 'name', ['updated_at']);
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@
use App\Data\Ui\ManageRoles\{RoleData, ServiceData}; use App\Data\Ui\ManageRoles\{RoleData, ServiceData};
use App\Data\Ui\TableHeader; use App\Data\Ui\TableHeader;
use App\Data\Users\UserData; use App\Data\Users\UserData;
use App\Enums\RolesStatus; use App\Enums\RolesStatusEnum;
use Livewire\Component; use Livewire\Component;
use Spatie\LaravelData\Attributes\DataCollectionOf; use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\DataCollection; use Spatie\LaravelData\DataCollection;
@ -62,7 +62,7 @@ public function mount(): void
DataCollection::class, DataCollection::class,
), ),
status: RolesStatus::Active, status: RolesStatusEnum::Active,
), ),
], ],
DataCollection::class, DataCollection::class,

View File

@ -4,7 +4,7 @@
use App\Data\Users\UserData; use App\Data\Users\UserData;
use App\Data\Ui\ManageRoles\RoleData; use App\Data\Ui\ManageRoles\RoleData;
use App\Data\Ui\ManageRoles\ServiceData; use App\Data\Ui\ManageRoles\ServiceData;
use App\Enums\RolesStatus; use App\Enums\RolesStatusEnum;
use Livewire\Component; use Livewire\Component;
use Spatie\LaravelData\Attributes\DataCollectionOf; use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\DataCollection; use Spatie\LaravelData\DataCollection;
@ -40,7 +40,7 @@ public function mount(): void
new ServiceData(name: 'AWS Core'), new ServiceData(name: 'AWS Core'),
new ServiceData(name: 'GitHub Enterprise'), new ServiceData(name: 'GitHub Enterprise'),
], DataCollection::class), ], DataCollection::class),
status: RolesStatus::Active, status: RolesStatusEnum::Active,
), ),
new RoleData( new RoleData(
name: 'HR Manager', name: 'HR Manager',
@ -49,7 +49,7 @@ public function mount(): void
new ServiceData(name: 'Keka'), new ServiceData(name: 'Keka'),
new ServiceData(name: 'Outlook'), new ServiceData(name: 'Outlook'),
], DataCollection::class), ], DataCollection::class),
status: RolesStatus::Active, status: RolesStatusEnum::Active,
) )
], DataCollection::class) ], DataCollection::class)
), ),
@ -65,7 +65,7 @@ public function mount(): void
services: ServiceData::collect([ services: ServiceData::collect([
new ServiceData(name: 'Forge'), new ServiceData(name: 'Forge'),
], DataCollection::class), ], DataCollection::class),
status: RolesStatus::Active, status: RolesStatusEnum::Active,
) )
], DataCollection::class) ], DataCollection::class)
), ),
@ -81,7 +81,7 @@ public function mount(): void
services: ServiceData::collect([ services: ServiceData::collect([
new ServiceData(name: 'Analytics Dashboard'), new ServiceData(name: 'Analytics Dashboard'),
], DataCollection::class), ], DataCollection::class),
status: RolesStatus::Active, status: RolesStatusEnum::Active,
) )
], DataCollection::class) ], DataCollection::class)
) )

View File

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

View File

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

View File

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