100 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Livewire\Project\Resource;
 | |
| 
 | |
| use App\Models\EnvironmentVariable;
 | |
| use App\Models\Service;
 | |
| use App\Models\StandaloneDocker;
 | |
| use Livewire\Component;
 | |
| 
 | |
| class Create extends Component
 | |
| {
 | |
|     public $type;
 | |
|     public function mount()
 | |
|     {
 | |
|         $services = getServiceTemplates();
 | |
|         $type = str(request()->query('type'));
 | |
|         $destination_uuid = request()->query('destination');
 | |
|         $server_id = request()->query('server_id');
 | |
| 
 | |
|         $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
 | |
|         if (!$project) {
 | |
|             return redirect()->route('dashboard');
 | |
|         }
 | |
|         $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first();
 | |
|         if (!$environment) {
 | |
|             return redirect()->route('dashboard');
 | |
|         }
 | |
|         if (in_array($type, DATABASE_TYPES)) {
 | |
|             if ($type->value() === "postgresql") {
 | |
|                 $database = create_standalone_postgresql($environment->id, $destination_uuid);
 | |
|             } else if ($type->value() === 'redis') {
 | |
|                 $database = create_standalone_redis($environment->id, $destination_uuid);
 | |
|             } else if ($type->value() === 'mongodb') {
 | |
|                 $database = create_standalone_mongodb($environment->id, $destination_uuid);
 | |
|             } else if ($type->value() === 'mysql') {
 | |
|                 $database = create_standalone_mysql($environment->id, $destination_uuid);
 | |
|             } else if ($type->value() === 'mariadb') {
 | |
|                 $database = create_standalone_mariadb($environment->id, $destination_uuid);
 | |
|             }
 | |
|             return redirect()->route('project.database.configuration', [
 | |
|                 'project_uuid' => $project->uuid,
 | |
|                 'environment_name' => $environment->name,
 | |
|                 'database_uuid' => $database->uuid,
 | |
|             ]);
 | |
|         }
 | |
|         if ($type->startsWith('one-click-service-') && !is_null((int)$server_id)) {
 | |
|             $oneClickServiceName = $type->after('one-click-service-')->value();
 | |
|             $oneClickService = data_get($services, "$oneClickServiceName.compose");
 | |
|             $oneClickDotEnvs = data_get($services, "$oneClickServiceName.envs", null);
 | |
|             if ($oneClickDotEnvs) {
 | |
|                 $oneClickDotEnvs = str(base64_decode($oneClickDotEnvs))->split('/\r\n|\r|\n/')->filter(function ($value) {
 | |
|                     return !empty($value);
 | |
|                 });
 | |
|             }
 | |
|             if ($oneClickService) {
 | |
|                 $destination = StandaloneDocker::whereUuid($destination_uuid)->first();
 | |
|                 $service = Service::create([
 | |
|                     'name' => "$oneClickServiceName-" . str()->random(10),
 | |
|                     'docker_compose_raw' => base64_decode($oneClickService),
 | |
|                     'environment_id' => $environment->id,
 | |
|                     'server_id' => (int) $server_id,
 | |
|                     'destination_id' => $destination->id,
 | |
|                     'destination_type' => $destination->getMorphClass(),
 | |
|                 ]);
 | |
|                 $service->name = "$oneClickServiceName-" . $service->uuid;
 | |
|                 $service->save();
 | |
|                 if ($oneClickDotEnvs?->count() > 0) {
 | |
|                     $oneClickDotEnvs->each(function ($value) use ($service) {
 | |
|                         $key = str()->before($value, '=');
 | |
|                         $value = str(str()->after($value, '='));
 | |
|                         $generatedValue = $value;
 | |
|                         if ($value->contains('SERVICE_')) {
 | |
|                             $command = $value->after('SERVICE_')->beforeLast('_');
 | |
|                             $generatedValue = generateEnvValue($command->value(), $service);
 | |
|                         }
 | |
|                         EnvironmentVariable::create([
 | |
|                             'key' => $key,
 | |
|                             'value' => $generatedValue,
 | |
|                             'service_id' => $service->id,
 | |
|                             'is_build_time' => false,
 | |
|                             'is_preview' => false,
 | |
|                         ]);
 | |
|                     });
 | |
|                 }
 | |
|                 $service->parse(isNew: true);
 | |
|                 return redirect()->route('project.service.configuration', [
 | |
|                     'service_uuid' => $service->uuid,
 | |
|                     'environment_name' => $environment->name,
 | |
|                     'project_uuid' => $project->uuid,
 | |
|                 ]);
 | |
|             }
 | |
|         }
 | |
|         $this->type = $type->value();
 | |
|     }
 | |
|     public function render()
 | |
|     {
 | |
|         return view('livewire.project.resource.create');
 | |
|     }
 | |
| }
 | 
