mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-29 15:26:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Services\Eggs\Sharing;
 | |
| 
 | |
| use Ramsey\Uuid\Uuid;
 | |
| use Illuminate\Support\Arr;
 | |
| use App\Models\Egg;
 | |
| use Illuminate\Http\UploadedFile;
 | |
| use App\Models\EggVariable;
 | |
| use Illuminate\Database\ConnectionInterface;
 | |
| use App\Services\Eggs\EggParserService;
 | |
| 
 | |
| class EggImporterService
 | |
| {
 | |
|     public function __construct(protected ConnectionInterface $connection, protected EggParserService $parser)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Take an uploaded JSON file and parse it into a new egg.
 | |
|      *
 | |
|      * @throws \App\Exceptions\Service\InvalidFileUploadException|\Throwable
 | |
|      */
 | |
|     public function handle(UploadedFile $file): Egg
 | |
|     {
 | |
|         $parsed = $this->parser->handle($file);
 | |
| 
 | |
|         return $this->connection->transaction(function () use ($parsed) {
 | |
|             $egg = (new Egg())->forceFill([
 | |
|                 'uuid' => Uuid::uuid4()->toString(),
 | |
|                 'author' => Arr::get($parsed, 'author'),
 | |
|                 'copy_script_from' => null,
 | |
|             ]);
 | |
| 
 | |
|             $egg = $this->parser->fillFromParsed($egg, $parsed);
 | |
|             $egg->save();
 | |
| 
 | |
|             foreach ($parsed['variables'] ?? [] as $variable) {
 | |
|                 EggVariable::query()->forceCreate(array_merge($variable, ['egg_id' => $egg->id]));
 | |
|             }
 | |
| 
 | |
|             return $egg;
 | |
|         });
 | |
|     }
 | |
| }
 | 
