- Introduced `environment_uuid` as a required field in various API endpoints and schemas. - Updated descriptions to clarify that either `environment_name` or `environment_uuid` must be provided. - Modified routes and controller methods to accommodate the new UUID parameter. - Adjusted frontend components to utilize `environment_uuid` for better consistency and clarity. - Removed deprecated fields related to environment handling. This change enhances the API's flexibility in identifying environments, improving overall usability.
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Livewire\Project\Resource;
 | 
						|
 | 
						|
use App\Models\Environment;
 | 
						|
use App\Models\Project;
 | 
						|
use Illuminate\Support\Collection;
 | 
						|
use Livewire\Component;
 | 
						|
 | 
						|
class Index extends Component
 | 
						|
{
 | 
						|
    public Project $project;
 | 
						|
 | 
						|
    public Environment $environment;
 | 
						|
 | 
						|
    public Collection $applications;
 | 
						|
 | 
						|
    public Collection $postgresqls;
 | 
						|
 | 
						|
    public Collection $redis;
 | 
						|
 | 
						|
    public Collection $mongodbs;
 | 
						|
 | 
						|
    public Collection $mysqls;
 | 
						|
 | 
						|
    public Collection $mariadbs;
 | 
						|
 | 
						|
    public Collection $keydbs;
 | 
						|
 | 
						|
    public Collection $dragonflies;
 | 
						|
 | 
						|
    public Collection $clickhouses;
 | 
						|
 | 
						|
    public Collection $services;
 | 
						|
 | 
						|
    public array $parameters;
 | 
						|
 | 
						|
    public function mount()
 | 
						|
    {
 | 
						|
        $this->applications = $this->postgresqls = $this->redis = $this->mongodbs = $this->mysqls = $this->mariadbs = $this->keydbs = $this->dragonflies = $this->clickhouses = $this->services = collect();
 | 
						|
        $this->parameters = get_route_parameters();
 | 
						|
        $project = currentTeam()
 | 
						|
            ->projects()
 | 
						|
            ->select('id', 'uuid', 'team_id', 'name')
 | 
						|
            ->where('uuid', request()->route('project_uuid'))
 | 
						|
            ->firstOrFail();
 | 
						|
        $environment = $project->environments()
 | 
						|
            ->select('id', 'uuid', 'name', 'project_id')
 | 
						|
            ->where('uuid', request()->route('environment_uuid'))
 | 
						|
            ->firstOrFail();
 | 
						|
 | 
						|
        $this->project = $project;
 | 
						|
        $this->environment = $environment->loadCount([
 | 
						|
            'applications',
 | 
						|
            'redis',
 | 
						|
            'postgresqls',
 | 
						|
            'mysqls',
 | 
						|
            'keydbs',
 | 
						|
            'dragonflies',
 | 
						|
            'clickhouses',
 | 
						|
            'mariadbs',
 | 
						|
            'mongodbs',
 | 
						|
            'services',
 | 
						|
        ]);
 | 
						|
 | 
						|
        // Eager load all relationships for applications including nested ones
 | 
						|
        $this->applications = $this->environment->applications()->with([
 | 
						|
            'tags',
 | 
						|
            'additional_servers.settings',
 | 
						|
            'additional_networks',
 | 
						|
            'destination.server.settings',
 | 
						|
            'settings',
 | 
						|
        ])->get()->sortBy('name');
 | 
						|
        $this->applications = $this->applications->map(function ($application) {
 | 
						|
            $application->hrefLink = route('project.application.configuration', [
 | 
						|
                'project_uuid' => data_get($application, 'environment.project.uuid'),
 | 
						|
                'environment_uuid' => data_get($application, 'environment.uuid'),
 | 
						|
                'application_uuid' => data_get($application, 'uuid'),
 | 
						|
            ]);
 | 
						|
 | 
						|
            return $application;
 | 
						|
        });
 | 
						|
 | 
						|
        // Load all database resources in a single query per type
 | 
						|
        $databaseTypes = [
 | 
						|
            'postgresqls' => 'postgresqls',
 | 
						|
            'redis' => 'redis',
 | 
						|
            'mongodbs' => 'mongodbs',
 | 
						|
            'mysqls' => 'mysqls',
 | 
						|
            'mariadbs' => 'mariadbs',
 | 
						|
            'keydbs' => 'keydbs',
 | 
						|
            'dragonflies' => 'dragonflies',
 | 
						|
            'clickhouses' => 'clickhouses',
 | 
						|
        ];
 | 
						|
 | 
						|
        foreach ($databaseTypes as $property => $relation) {
 | 
						|
            $this->{$property} = $this->environment->{$relation}()->with([
 | 
						|
                'tags',
 | 
						|
                'destination.server.settings',
 | 
						|
            ])->get()->sortBy('name');
 | 
						|
            $this->{$property} = $this->{$property}->map(function ($db) {
 | 
						|
                $db->hrefLink = route('project.database.configuration', [
 | 
						|
                    'project_uuid' => $this->project->uuid,
 | 
						|
                    'database_uuid' => $db->uuid,
 | 
						|
                    'environment_uuid' => data_get($this->environment, 'uuid'),
 | 
						|
                ]);
 | 
						|
 | 
						|
                return $db;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        // Load services with their tags and server
 | 
						|
        $this->services = $this->environment->services()->with([
 | 
						|
            'tags',
 | 
						|
            'destination.server.settings',
 | 
						|
        ])->get()->sortBy('name');
 | 
						|
        $this->services = $this->services->map(function ($service) {
 | 
						|
            $service->hrefLink = route('project.service.configuration', [
 | 
						|
                'project_uuid' => data_get($service, 'environment.project.uuid'),
 | 
						|
                'environment_uuid' => data_get($service, 'environment.uuid'),
 | 
						|
                'service_uuid' => data_get($service, 'uuid'),
 | 
						|
            ]);
 | 
						|
 | 
						|
            return $service;
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    public function render()
 | 
						|
    {
 | 
						|
        return view('livewire.project.resource.index');
 | 
						|
    }
 | 
						|
}
 |