81 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use App\Models\Environment;
 | 
						|
use App\Models\Project;
 | 
						|
use App\Models\Server;
 | 
						|
use App\Models\Team;
 | 
						|
 | 
						|
class MagicController extends Controller
 | 
						|
{
 | 
						|
    public function servers()
 | 
						|
    {
 | 
						|
        return response()->json([
 | 
						|
            'servers' => Server::isUsable()->get()
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function destinations()
 | 
						|
    {
 | 
						|
        return response()->json([
 | 
						|
            'destinations' => Server::destinationsByServer(request()->query('server_id'))->sortBy('name')
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function projects()
 | 
						|
    {
 | 
						|
        return response()->json([
 | 
						|
            'projects' => Project::ownedByCurrentTeam()->get()
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function environments()
 | 
						|
    {
 | 
						|
        $project = Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->first();
 | 
						|
        if (!$project) {
 | 
						|
            return response()->json([
 | 
						|
                'environments' => []
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
        return response()->json([
 | 
						|
            'environments' => $project->environments
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function newProject()
 | 
						|
    {
 | 
						|
        $project = Project::firstOrCreate(
 | 
						|
            ['name' => request()->query('name') ?? generate_random_name()],
 | 
						|
            ['team_id' => currentTeam()->id]
 | 
						|
        );
 | 
						|
        return response()->json([
 | 
						|
            'project_uuid' => $project->uuid
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function newEnvironment()
 | 
						|
    {
 | 
						|
        $environment = Environment::firstOrCreate(
 | 
						|
            ['name' => request()->query('name') ?? generate_random_name()],
 | 
						|
            ['project_id' => Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->firstOrFail()->id]
 | 
						|
        );
 | 
						|
        return response()->json([
 | 
						|
            'environment_name' => $environment->name,
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function newTeam()
 | 
						|
    {
 | 
						|
        $team = Team::create(
 | 
						|
            [
 | 
						|
                'name' => request()->query('name') ?? generate_random_name(),
 | 
						|
                'personal_team' => false,
 | 
						|
            ],
 | 
						|
        );
 | 
						|
        auth()->user()->teams()->attach($team, ['role' => 'admin']);
 | 
						|
        refreshSession();
 | 
						|
        return redirect(request()->header('Referer'));
 | 
						|
    }
 | 
						|
}
 |