41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Initialize;
 | |
| 
 | |
| use App\Group;
 | |
| use DB;
 | |
| use Zoomyboy\LaravelNami\Api;
 | |
| use Zoomyboy\LaravelNami\Data\Group as NamiGroup;
 | |
| 
 | |
| class InitializeGroups
 | |
| {
 | |
|     private Api $api;
 | |
| 
 | |
|     public function __construct(Api $api)
 | |
|     {
 | |
|         $this->api = $api;
 | |
|     }
 | |
| 
 | |
|     public function handle(): void
 | |
|     {
 | |
|         $this->api->groups(null)->each(function ($group) {
 | |
|             $parent = Group::updateOrCreate(['nami_id' => $group->id], ['nami_id' => $group->id, 'name' => $group->name]);
 | |
| 
 | |
|             $this->syncChildren($group, $parent);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     private function syncChildren(NamiGroup $namiParent, Group $parent): void
 | |
|     {
 | |
|         $this->api->groups($namiParent)->each(function ($subgroup) use ($parent) {
 | |
|             $newParent = Group::updateOrCreate(['nami_id' => $subgroup->id], ['nami_id' => $subgroup->id, 'name' => $subgroup->name, 'parent_id' => $parent->id]);
 | |
|             $this->syncChildren($subgroup, $newParent);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     public function restore(): void
 | |
|     {
 | |
|         DB::table('groups')->delete();
 | |
|     }
 | |
| }
 |