Skip to content

Commit 7721734

Browse files
committed
Backup
1 parent 9c048db commit 7721734

File tree

13 files changed

+330
-35
lines changed

13 files changed

+330
-35
lines changed

Database/Migrations/2020_11_16_194103_vh_saas_servers.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ public function up()
1616

1717
Schema::create('vh_saas_servers', function (Blueprint $table) {
1818
$table->increments('id');
19-
$table->uuid('uuid')->nullable();
19+
$table->uuid('uuid')->nullable()->index();
2020

2121
$table->string('name')->nullable(); // server label
22-
$table->string('slug')->nullable(); // server label
22+
$table->string('slug')->nullable()->index(); // server label
2323

2424
$table->string('host_type')->nullable(); //cPanel | mysql
2525

2626
$table->string('driver')->nullable(); // mysql | redis
27-
$table->string('host')->nullable();
27+
$table->string('host')->nullable()->index();
2828
$table->string('port')->nullable();
2929
$table->string('username')->nullable();
3030
$table->string('password')->nullable();

Database/Migrations/2020_11_16_194130_vh_saas_tenants.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ public function up()
1616

1717
Schema::create('vh_saas_tenants', function (Blueprint $table) {
1818
$table->increments('id');
19-
$table->uuid('uuid')->nullable();
19+
$table->uuid('uuid')->nullable()->index();
2020
$table->integer('vh_saas_server_id')->nullable();
2121

2222
$table->string('name')->nullable();
23-
$table->string('slug')->nullable();
24-
$table->string('path')->nullable();
25-
$table->string('domain')->nullable();
26-
$table->string('sub_domain')->nullable();
23+
$table->string('slug')->nullable()->index();
24+
$table->string('path')->nullable()->index();
25+
$table->string('domain')->nullable()->index();
26+
$table->string('sub_domain')->nullable()->index();
2727

2828
$table->string('database_name')->nullable();
2929
$table->string('database_charset')->nullable()->default('utf8mb4');

Database/Seeds/json/tenants.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
{
44
"name": "Tenant V1",
5-
"path": "mysql",
5+
"path": "v1",
66
"domain": "v1.com",
77
"sub_domain": "v1.tenant.com",
88
"vh_saas_server_id": 1,
@@ -16,7 +16,7 @@
1616
},
1717
{
1818
"name": "Tenant V2",
19-
"path": "mysql",
19+
"path": "v2",
2020
"domain": "v2.com",
2121
"sub_domain": "v2.tenant.com",
2222
"vh_saas_server_id": 1,

Entities/Tenant.php

Lines changed: 223 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
use Carbon\Carbon;
44
use Illuminate\Database\Eloquent\Model;
55
use Illuminate\Database\Eloquent\SoftDeletes;
6+
use Illuminate\Support\Facades\Validator;
67
use Illuminate\Support\Str;
8+
use VaahCms\Modules\Saas\Libraries\DatabaseManagers\DatabaseManager;
79
use WebReinvent\VaahCms\Traits\CrudWithUuidObservantTrait;
810
use WebReinvent\VaahCms\Entities\User;
911

@@ -17,7 +19,7 @@ class Tenant extends Model {
1719
//-------------------------------------------------
1820
protected $dates = [
1921
'is_database_created_at',
20-
'is_active_at',
22+
'activated_at',
2123
'is_deactivated_at',
2224
'created_at',
2325
'updated_at',
@@ -39,7 +41,8 @@ class Tenant extends Model {
3941
'database_charset',
4042
'database_collation',
4143
'is_database_created_at',
42-
'is_active_at',
44+
'activated_at',
45+
'is_active',
4346
'is_deactivated_at',
4447
'notes',
4548

@@ -413,6 +416,7 @@ public static function validation($inputs)
413416
$rules = array(
414417
'name' => 'required|max:150',
415418
'slug' => 'required|max:150',
419+
'database_name' => 'required|alpha_dash|max:20',
416420
);
417421

418422
$validator = \Validator::make( $inputs, $rules);
@@ -424,8 +428,225 @@ public static function validation($inputs)
424428
return $response;
425429
}
426430

431+
$exist = static::withTrashed()->where('database_name', $inputs['database_name'])
432+
->first();
433+
434+
435+
if($exist)
436+
{
437+
$response['status'] = 'failed';
438+
$response['errors'][] = 'Database name already exist';
439+
return $response;
440+
}
441+
442+
443+
}
444+
//-------------------------------------------------
445+
public static function createDatabase($request)
446+
{
447+
448+
if(!$request->has('inputs'))
449+
{
450+
$response['status'] = 'failed';
451+
$response['errors'][] = 'Select IDs';
452+
return $response;
453+
}
454+
455+
$item = static::where('id', $request->inputs)->withTrashed()->first();
456+
$server = Server::find($item->vh_saas_server_id);
457+
458+
$db_manager = new DatabaseManager($server, $item);
459+
$response = $db_manager->createDatabase();
460+
461+
if($response['status'] == 'success')
462+
{
463+
$item->is_active = 1;
464+
$item->activated_at = \Carbon::now();
465+
$item->is_database_created_at = \Carbon::now();
466+
$item->is_deactivated_at = null;
467+
$item->save();
468+
$response['data'] = [];
469+
}
470+
471+
return $response;
472+
}
473+
//-------------------------------------------------
474+
public static function deleteDatabase($request)
475+
{
476+
477+
if(!$request->has('inputs'))
478+
{
479+
$response['status'] = 'failed';
480+
$response['errors'][] = 'Select IDs';
481+
return $response;
482+
}
483+
484+
$item = static::where('id', $request->inputs)->withTrashed()->first();
485+
$server = Server::find($item->vh_saas_server_id);
486+
487+
$db_manager = new DatabaseManager($server, $item);
488+
$response = $db_manager->deleteDatabase();
489+
490+
if($response['status'] == 'success')
491+
{
492+
493+
$item->is_active = null;
494+
$item->activated_at = null;
495+
$item->is_database_created_at = null;
496+
$item->is_deactivated_at = \Carbon::now();
497+
$item->save();
498+
499+
$response['data'] = [];
500+
501+
}
502+
503+
return $response;
504+
505+
506+
}
507+
//-------------------------------------------------
508+
public static function artisanCommandValidation($value, $key='uuid')
509+
{
510+
$tenant = static::withTrashed()->where($key, $value)->first();
511+
512+
if(!$tenant)
513+
{
514+
$response['status'] = 'failed';
515+
$response['errors'][] = 'Tenant does not exist';
516+
return $response;
517+
}
518+
519+
//check database is created for the tenant
520+
if(!$tenant->is_database_created_at)
521+
{
522+
$response['status'] = 'failed';
523+
$response['errors'][] = 'Tenant database is not created';
524+
return $response;
525+
}
526+
527+
$server = Server::find($tenant->vh_saas_server_id);
528+
529+
if(!$server)
530+
{
531+
$response['status'] = 'failed';
532+
$response['errors'][] = 'Tenant database server does not exist';
533+
return $response;
534+
}
535+
536+
$db_manager = new DatabaseManager($server, $tenant);
537+
538+
//check server connection
539+
$is_connected = $db_manager->testConnection();
540+
if($is_connected['status'] == 'failed')
541+
{
542+
return $is_connected;
543+
}
544+
545+
//check if database does not exist on the server
546+
$db_exist = $db_manager->databaseExists();
547+
if($db_exist['status'] == 'failed')
548+
{
549+
return $db_exist;
550+
}
427551
}
428552
//-------------------------------------------------
553+
public static function migrate($inputs, $value, $key='uuid')
554+
{
555+
$rules = array(
556+
'command' => 'required',
557+
);
558+
559+
if(isset($inputs['command']))
560+
{
561+
$rules['path'] = 'required';
562+
}
563+
564+
$validator = Validator::make( $inputs, $rules);
565+
if ( $validator->fails() ) {
566+
567+
$errors = errorsToArray($validator->errors());
568+
$response['status'] = 'failed';
569+
$response['errors'] = $errors;
570+
return $response;
571+
}
572+
573+
$is_valid = static::artisanCommandValidation($value, $key='uuid');
574+
575+
if($is_valid['status'] == 'failed')
576+
{
577+
return $is_valid;
578+
}
579+
580+
$tenant = static::withTrashed()->where($key, $value)->first();
581+
$server = Server::find($tenant->vh_saas_server_id);
582+
$db_manager = new DatabaseManager($server, $tenant);
583+
584+
//connect to database
585+
$connection = $db_manager->connectToDatabase();
586+
587+
if(isset($connection['status']) && $connection['status'] == 'failed')
588+
{
589+
return $connection;
590+
}
591+
592+
$db_connection_name = $connection['data']['connection_name'];
593+
594+
$response = \VaahArtisan::migrate($inputs['command'], $db_connection_name, $inputs['path']);
595+
596+
return $response;
597+
598+
}
599+
//-------------------------------------------------
600+
public static function seed($inputs, $value, $key='uuid')
601+
{
602+
$rules = array(
603+
'command' => 'required',
604+
);
605+
606+
if(isset($inputs['command']))
607+
{
608+
$rules['class'] = 'required';
609+
}
610+
611+
$validator = Validator::make( $inputs, $rules);
612+
if ( $validator->fails() ) {
613+
614+
$errors = errorsToArray($validator->errors());
615+
$response['status'] = 'failed';
616+
$response['errors'] = $errors;
617+
return $response;
618+
}
619+
620+
$is_valid = static::artisanCommandValidation($value, $key='uuid');
621+
622+
if($is_valid['status'] == 'failed')
623+
{
624+
return $is_valid;
625+
}
626+
627+
$tenant = static::withTrashed()->where($key, $value)->first();
628+
$server = Server::find($tenant->vh_saas_server_id);
629+
$db_manager = new DatabaseManager($server, $tenant);
630+
631+
//connect to database
632+
$connection = $db_manager->connectToDatabase();
633+
634+
if(isset($connection['status']) && $connection['status'] == 'failed')
635+
{
636+
return $connection;
637+
}
638+
639+
$db_connection_name = $connection['data']['connection_name'];
640+
641+
$response = \VaahArtisan::seed($inputs['command'], $db_connection_name, $inputs['class']);
642+
643+
return $response;
644+
645+
}
646+
647+
//-------------------------------------------------
648+
//-------------------------------------------------
649+
//-------------------------------------------------
429650
//-------------------------------------------------
430651
//-------------------------------------------------
431652

Http/Controllers/Backend/BackendController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use VaahCms\Modules\Saas\Libraries\DatabaseManagers\DatabaseManager;
88
use VaahCms\Modules\Saas\Libraries\DatabaseManagers\MySQLDatabaseManager;
99

10+
11+
1012
class BackendController extends Controller
1113
{
1214

Http/Controllers/Backend/TenantsController.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Illuminate\Http\Request;
55
use Illuminate\Http\Response;
66
use Illuminate\Routing\Controller;
7+
use Illuminate\Support\Facades\Validator;
78
use VaahCms\Modules\Saas\Entities\Tenant;
89

910

@@ -109,6 +110,17 @@ public function postActions(Request $request, $action)
109110

110111
break;
111112
//------------------------------------
113+
case 'create-database':
114+
115+
$response = Tenant::createDatabase($request);
116+
117+
break;
118+
//------------------------------------
119+
case 'delete-database':
120+
121+
$response = Tenant::deleteDatabase($request);
122+
123+
break;
112124
//------------------------------------
113125

114126
}
@@ -117,6 +129,16 @@ public function postActions(Request $request, $action)
117129

118130
}
119131
//----------------------------------------------------------
132+
public function postMigrate(Request $request, $uuid)
133+
{
134+
135+
$inputs = $request->all();
136+
137+
$response = Tenant::migrate($inputs, $uuid);
138+
139+
return response()->json($response);
140+
141+
}
120142
//----------------------------------------------------------
121143

122144

Libraries/DatabaseManagers/DatabaseManager.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,10 @@ public function testConnection()
7575
}
7676
//--------------------------------------------------------
7777

78-
public function connectToTenant(TenantWithDatabase $tenant)
78+
public function connectToDatabase()
7979
{
80-
$this->database->purge('tenant');
81-
$this->createTenantConnection($tenant);
82-
$this->setDefaultConnection('tenant');
80+
$response = $this->db_manager->connectToDatabase();
81+
return $response;
8382
}
8483

8584
//--------------------------------------------------------

0 commit comments

Comments
 (0)