* use RESOURCE_NAME for requests * use RESOURCE_NAME for transformers * add permissions field to api key * add migration for new permissions field * update tests * remove debug log * set column type to "json" * remove default attribute to fix tests * fix default value for permissions * fix after merge * fix after merge * allow to "register" custom permissions * add "role" to default resource names * fix after merge * fix phpstan * fix migrations
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Requests\Api\Application\Servers\Databases;
 | 
						|
 | 
						|
use Webmozart\Assert\Assert;
 | 
						|
use App\Models\Server;
 | 
						|
use Illuminate\Validation\Rule;
 | 
						|
use Illuminate\Database\Query\Builder;
 | 
						|
use App\Services\Acl\Api\AdminAcl;
 | 
						|
use App\Services\Databases\DatabaseManagementService;
 | 
						|
use App\Http\Requests\Api\Application\ApplicationApiRequest;
 | 
						|
use App\Models\Database;
 | 
						|
 | 
						|
class StoreServerDatabaseRequest extends ApplicationApiRequest
 | 
						|
{
 | 
						|
    protected ?string $resource = Database::RESOURCE_NAME;
 | 
						|
 | 
						|
    protected int $permission = AdminAcl::WRITE;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Validation rules for database creation.
 | 
						|
     */
 | 
						|
    public function rules(): array
 | 
						|
    {
 | 
						|
        /** @var Server $server */
 | 
						|
        $server = $this->route()->parameter('server');
 | 
						|
 | 
						|
        return [
 | 
						|
            'database' => [
 | 
						|
                'required',
 | 
						|
                'alpha_dash',
 | 
						|
                'min:1',
 | 
						|
                'max:48',
 | 
						|
                Rule::unique('databases')->where(function (Builder $query) use ($server) {
 | 
						|
                    $query->where('server_id', $server->id)->where('database', $this->databaseName());
 | 
						|
                }),
 | 
						|
            ],
 | 
						|
            'remote' => 'required|string|regex:/^[0-9%.]{1,15}$/',
 | 
						|
            'host' => 'required|integer|exists:database_hosts,id',
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return data formatted in the correct format for the service to consume.
 | 
						|
     */
 | 
						|
    public function validated($key = null, $default = null): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'database' => $this->input('database'),
 | 
						|
            'remote' => $this->input('remote'),
 | 
						|
            'database_host_id' => $this->input('host'),
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Format error messages in a more understandable format for API output.
 | 
						|
     */
 | 
						|
    public function attributes(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'host' => 'Database Host Server ID',
 | 
						|
            'remote' => 'Remote Connection String',
 | 
						|
            'database' => 'Database Name',
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the database name in the expected format.
 | 
						|
     */
 | 
						|
    public function databaseName(): string
 | 
						|
    {
 | 
						|
        $server = $this->route()->parameter('server');
 | 
						|
 | 
						|
        Assert::isInstanceOf($server, Server::class);
 | 
						|
 | 
						|
        return DatabaseManagementService::generateUniqueDatabaseName($this->input('database'), $server->id);
 | 
						|
    }
 | 
						|
}
 |