DB rework id, site_id and relations

This commit is contained in:
Deon George 2021-12-21 16:47:06 +11:00
parent bdcfe07fb0
commit d0a56de07e
2 changed files with 370 additions and 1 deletions

View File

@ -4,7 +4,7 @@ namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\{Account,Country,Currency,Language};
use App\Models\{Account,Country};
class AccountFactory extends Factory
{

View File

@ -0,0 +1,369 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/*
| ab_account_billing |
| ab_account_group |
| ab_account_log |
| ab_account_memo |
| ab_account_oauth |
| ab_adsl_plan |
| ab_adsl_supplier |
| ab_adsl_supplier_plan |
| ab_affiliate |
| ab_asset |
| ab_asset_pool |
| ab_cart |
| ab_checkout |
| ab_checkout_notify |
| ab_discount |
| ab_domain_registrar |
| ab_domain_tld |
| ab_email_log |
| ab_email_setup |
| ab_email_template |
| ab_email_template_translate |
| ab_export |
| ab_export_datamap |
| ab_export_item |
| ab_export_module |
| ab_group |
| ab_group_method |
| ab_host_server |
| ab_host_server_affiliate |
| ab_host_server_id |
| ab_host_tld_id |
| ab_import |
| ab_invoice |
| ab_invoice_item |
| ab_invoice_item_discount |
| ab_invoice_item_tax |
| ab_invoice_memo |
| ab_log_error |
| ab_module |
| ab_module_method |
| ab_module_method_token |
| ab_oauth |
| ab_pivot_product_cat |
| ab_product |
| ab_product_cat |
| ab_product_cat_translate |
| ab_product_translate |
| ab_record_id |
| rtm |*DONE*
| ab_service |
| ab_service__adsl |
| ab_service__adsl_traffic |
| ab_service__hosting |
| ab_service__ssl |
| ab_service__voip |
| ab_service_change |
| ab_service_memo |
| ab_setup_invoice |
| ab_ssl |
| ab_ssl_ca |
| ab_static_page |
| ab_static_page_category |
| ab_static_page_translate |
| ab_task |
| ab_task_log |
| ab_voip_plan |
| accounts |*PARTIAL*
| charges |
| countries |*DONE*
| currencies |*DONE*
| external_account |
| external_integrations |
| failed_jobs |*N/A*
| invites |
| jobs |*N/A*
| languages |*DONE*
| migrations |*N/A*
| oauth_access_tokens |
| oauth_auth_codes |
| oauth_clients |
| oauth_personal_access_clients |
| oauth_refresh_tokens |
| password_resets |
| payment_items |
| payments |
| quickbooks_tokens |
| service__generic |
| service_domains |
| site_details |*DONE*
| sites |*DONE*
| supplier_details |*DONE*
| suppliers |*DONE*
| taxes |*DONE*
| users |*PARTIAL*
*/
class IntUnsigned extends Migration
{
public function up()
{
$constraints = [
'ab_account_billing' => ['fk_ab_a','fk_ab_s'],
'ab_account_group' => ['fk_ag_acc','fk_ag_grp'],
'ab_account_log' => ['fk_al_acc'],
'ab_account_oauth' => ['fk_ao_a','fk_ao_o','site_user_id'],
'ab_adsl_plan' => ['fk_ap_asp'],
'ab_adsl_supplier' => ['fk_as_set'],
'ab_adsl_supplier_plan' => ['fk_asp_as'],
'ab_affiliate' => ['fk_aff_acc'],
'ab_cart' => ['fk_mod_crt'],
'ab_checkout' => ['fk_cko_set'],
'ab_checkout_notify' => ['fk_cn_c'],
'ab_domain_tld' => ['fk_ht_hrp'],
'ab_email_log' => ['fk_el_acc','fk_el_ett','fk_el_mod'],
'ab_email_setup' => ['fk_es_acc'],
'ab_email_template' => ['fk_et_es'],
'ab_email_template_translate' => ['fk_emt_et','fk_emt_lan'],
'ab_export' => ['fk_exp_set'],
'ab_export_datamap' => ['fk_edm_exm','fk_edm_mod'],
'ab_export_item' => ['fk_eit_exm'],
'ab_export_module' => ['fk_exm_exp','fk_exm_mod'],
'ab_group' => ['fk_grp_set'],
'ab_group_method' => ['fk_gm_grp','fk_gm_mm'],
'ab_host_server_affiliate' => ['fk_hsa_aff','fk_hsa_hs'],
'ab_invoice' => ['fk_inv_acc'],
'ab_invoice_item' => ['fk_ii_inv','fk_ii_mod','fk_ii_pdt','fk_ii_svc'],
'ab_invoice_item_tax' => ['fk_iit_ii','fk_iit_tax'],
'ab_invoice_memo' => ['fk_im_acc','fk_im_inv'],
'ab_module' => ['fk_mod','fk_mod_set'],
'ab_module_method' => ['fk_mm_mod'],
'ab_module_method_token' => ['fk_mmt_acc','fk_mmt_mm'],
'ab_oauth' => ['fk_o_set'],
'ab_pivot_product_cat' => ['fk_p','fk_pc'],
'ab_product' => ['fk_pdt_set'],
'ab_product_cat_translate' => ['fk_pct_lan','fk_pct_pc'],
'ab_product_cat' => ['fk_pc_pc','fk_pc_set'],
'ab_product_translate' => ['fk_pt_l','fk_pt_p'],
'ab_record_id' => ['fk_rid_mod','fk_rid_set'],
'rtm' => ['fk_rtm_acc','fk_rtm_rtm'],
'ab_service__adsl_traffic' => ['ab_service__adsl_traffic_ab_service_adsl_id_foreign','fk_sat_as'],
'ab_service__adsl' => ['fk_sa_ap','fk_sa_svc'],
'ab_service__hosting' => ['fk_sh_svc','fk_sh_ht','fk_sh_hs'],
'ab_service__ssl' => ['fk_ss_sca','fk_ss_svc'],
'ab_service_change' => ['fk_sc_a','fk_sc_p','fk_sc_s'],
'ab_service_memo' => ['fk_sm_acc','fk_sm_svc'],
'ab_service' => ['ab_service_orderby_id_foreign','fk_svc_acc','fk_svc_grp'],
'ab_ssl' => ['fk_ssl_set'],
'ab_ssl_ca' => ['fk_sca','fk_sca_acc'],
'ab_task_log' => ['fk_tl_t'],
'ab_task' => ['fk_tsk_set'],
'accounts' => ['ab_account_user_id_foreign','fk_acc_cty','fk_acc_cur','fk_acc_lan','fk_acc_rtm','fk_acc_set'],
'charges' => ['charges_account_id_site_id_foreign','charges_product_id_site_id_foreign','charges_service_id_site_id_foreign','charges_user_id_site_id_foreign'],
'countries' => ['countries_currency_id_foreign'],
'external_account' => ['external_account_account_id_foreign','external_account_external_integration_id_foreign','external_account_site_id_foreign'],
'external_integrations' => ['external_integrations_user_id_foreign'],
'payment_items' => ['fk_pi_inv','payment_items_payment_id_site_id_foreign'],
'payments' => ['fk_pay_acc','fk_pay_acc_b','fk_pay_co'],
'quickbooks_tokens' => ['quickbooks_tokens_user_id_foreign'],
'service__generic' => ['service__generic_product_id_site_id_foreign','service__generic_service_id_site_id_foreign','service__generic_site_id_foreign'],
'service_domains' => ['fk_sd_hrp','fk_sd_ht','fk_sd_svc'],
'site_details' => ['site_details_site_id_foreign'],
'sites' => ['sites_admin_id_site_id_foreign','sites_country_id_foreign','sites_currency_id_foreign','sites_language_id_foreign'],
'supplier_details' => ['supplier_details_site_id_foreign','supplier_details_supplier_id_foreign'],
'taxes' => ['taxes_country_id_foreign'],
'users' => ['users_currency_id_foreign','users_language_id_foreign','users_parent_id_foreign'],
];
$indexes = [
'ab_account_billing' => ['fk_ab_a','fk_ab_s','UNIQUE'],
'ab_account_group' => ['fk_ag_acc_idx','fk_ag_grp_idx','UNIQUE'],
'ab_account_log' => ['fk_al_acc_idx'],
'ab_account_memo' => ['memo','account','IDS'],
'ab_account_oauth' => ['fk_ao_a_idx','fk_ao_o_idx','site_user_id_idx','ab_account_oauth_site_id_user_id_oauth_id_unique','UNIQUE'],
'ab_adsl_supplier_plan' => ['fk_asp_as_idx'],
'ab_adsl_supplier' => ['fk_as_set_idx'],
'ab_adsl_plan' => ['fk_ap_asp_idx'],
'ab_affiliate' => ['fk_aff_acc_idx'],
'ab_asset_pool' => ['main','IDS'],
'ab_asset' => ['assets','asso','service','asset','IDS'],
'ab_cart' => ['fk_mod_crt_idx'],
'ab_checkout_notify' => ['fk_cn_c_idx'],
'ab_checkout' => ['fk_cko_set_idx'],
'ab_discount' => ['start','expire','status','IDS'],
'ab_domain_registrar' => ['fk_hrp_set','IDS'],
'ab_domain_tld' => ['fk_ht_hrp_idx'],
'ab_email_log' => ['fk_el_acc_idx','fk_el_ett_idx','fk_el_mod_idx'],
'ab_email_setup' => ['fk_es_acc_idx'],
'ab_email_template_translate' => ['fk_emt_et_idx','fk_emt_lan_idx'],
'ab_email_template' => ['fk_et_es_idx'],
'ab_export_datamap' => ['fk_edm_mod_idx','fk_edm_mod_idx1','UNIQUE'],
'ab_export_item' => ['fk_exp_eit_idx','UNIQUE'],
'ab_export_module' => ['fk_exp_exm_idx','fk_exp_mod_idx'],
'ab_export' => ['fk_exp_set_idx','UNIQUE'],
'ab_group_method' => ['fk_gm_grp_idx','fk_gm_mm_idx','UNIQUE'],
'ab_group' => ['fk_grp_set_idx'],
'ab_host_server' => ['IDS'],
'ab_host_server_affiliate' => ['fk_hsa_aff_idx','fk_hsa_hs_idx'],
'ab_import' => ['IDS'],
'ab_invoice_item_discount' => ['discounts','invoice_id','dates','accounts','IDS'],
'ab_invoice_item_tax' => ['fk_iit_ii_idx','fk_iit_tax_idx'],
'ab_invoice_item' => ['fk_ii_inv_idx','fk_ii_mod_idx','fk_ii_pdt_idx','fk_ii_svc_idx','UNIQUE'],
'ab_invoice_memo' => ['fk_im_acc_idx','fk_im_inv_idx'],
'ab_invoice' => ['fk_inv_acc_idx'],
'ab_log_error' => ['IDS'],
'ab_module_method_token' => ['fk_mmt_acc_idx','fk_mmt_mm_idx'],
'ab_module_method' => ['fk_mm_mod_idx','UNIQUE','UNIQUE2'],
'ab_module' => ['fk_mod_idx','fk_mod_set_idx','UNIQUE'],
'ab_oauth' => ['fk_o_set_idx','ab_oauth_site_id_name_unique'],
'ab_pivot_product_cat' => ['fk_p_idx','fk_pc_idx','UNIQUE'],
'ab_product_cat' => ['fk_pc_pc_idx','fk_pc_set_idx'],
'ab_product' => ['fk_pdt_set_idx'],
'ab_product_cat_translate' => ['fk_pct_lan_idx','fk_pct_pc_idx','UNIQUE'],
'ab_product_translate' => ['fk_pt_l_idx','fk_pt_p_idx','UNIQUE'],
'ab_record_id' => ['fk_rid_mod_idx','fk_rid_set_idx'],
'rtm' => ['fk_rtm_set_idx','fk_rtm_acc_p_idx','uq_name'],
'ab_service' => ['ab_service_orderby_id_foreign','fk_svc_acc_idx','fk_svc_grp_idx','UNIQUE'],
'ab_service__adsl' => ['fk_service_number','fk_sa_svc_idx','fk_sa_ap_idx','uq_service_username','UNIQUE'],
'ab_service__adsl_traffic' => ['fk_sat_as_idx','in_sat_SERVICE_DATE','in_sat_DATE','in_sat_SERVICE','ab_service__adsl_traffic_ab_service_adsl_id_date_time_unique'],
'ab_service__hosting' => ['fk_sh_hs_idx','fk_domain_tld_id','fk_service_id','uq_ftp_username','UNIQUE'],
'ab_service__ssl' => ['fk_ss_sca_idx','fk_ss_svc_idx','UNIQUE'],
'ab_service_change' => ['fk_s_sc_idx','fk_s_p_idx','fk_sc_a_idx'],
'ab_service_memo' => ['fk_sm_acc_idx','fk_sm_svc_idx'],
'ab_setup_invoice' => ['IDS'],
'ab_ssl' => ['fk_ssl_set_idx'],
'ab_ssl_ca' => ['fk_sca_idx','fk_sca_acc_idx'],
'ab_static_page' => ['cat','start','expire','name','IDS'],
'ab_static_page_category' => ['status','name','IDS'],
'ab_static_page_translate' => ['IDS'],
'ab_task' => ['fk_tsk_set_idx'],
'ab_task_log' => ['fk_tl_task'],
'accounts' => ['ab_account_user_id_foreign','fk_acc_set_idx','fk_acc_lan_idx','fk_acc_rtm_idx','fk_acc_cty_idx','fk_acc_cur_idx'],
'charges' => ['charges_account_id_site_id_foreign','charges_product_id_site_id_foreign','charges_service_id_site_id_foreign','charges_user_id_site_id_foreign'],
'countries' => ['countries_currency_id_foreign','name_UNIQUE','two_code_UNIQUE','three_code_UNIQUE'],
'currencies' => ['three_digit_UNIQUE'],
'external_account' => ['external_account_external_integration_id_foreign','external_account_account_id_foreign','sae'],
'external_integrations' => ['external_integrations_user_id_foreign'],
'languages' => ['name_UNIQUE','iso_UNIQUE'],
'payment_items' => ['fk_pi_inv_idx','payment_items_payment_id_site_id_foreign','payment_items_site_id_payment_id_invoice_id_unique'],
'payments' => ['fk_pay_acc_idx','fk_pay_cp_idx','fk_pay_acc_b_idx','payments_site_id_id_unique'],
'quickbooks_tokens' => ['quickbooks_tokens_user_id_foreign'],
'service__generic' => ['service__generic_service_id_site_id_foreign','service__generic_product_id_site_id_foreign','service__generic_site_id_service_id_unique'],
'service_domains' => ['fk_sd_svc_idx','fk_sd_hrp_idx','fk_sd_ht_idx','UNIQUE'],
'site_details' => ['site_details_site_id_key_unique'],
'sites' => ['sites_site_id_index','sites_admin_id_site_id_foreign','sites_country_id_foreign','sites_currency_id_foreign','sites_language_id_foreign','sites_site_id_url_unique'],
'supplier_details' => ['supplier_details_site_id_foreign','supplier_details_supplier_id_site_id_unique'],
'taxes' => ['UNIQUE'],
'users' => ['users_site_id_email_unique','users_parent_id_foreign','users_language_id_foreign','users_currency_id_foreign','site_user_id_idx'],
];
Schema::dropIfExists('ab_host_server_id');
Schema::dropIfExists('ab_host_tld_id');
DB::statement('ALTER TABLE ab_rtm RENAME TO rtm');
foreach ($constraints as $table => $constraint) {
Schema::table($table, function (Blueprint $table) use ($constraint) {
foreach ($constraint as $item)
$table->dropForeign($item);
});
}
foreach ($indexes as $table => $constraint) {
Schema::table($table, function (Blueprint $table) use ($constraint) {
foreach ($constraint as $item)
$table->dropIndex($item);
});
}
$tables = collect(array_unique(array_merge(array_keys($constraints),array_keys($indexes))));
$except = [
'ab_group','ab_record_id','ab_service__adsl_traffic','accounts','external_account','site_details',
'ab_account_memo','ab_asset_pool','ab_asset','ab_discount','ab_host_server','ab_import','ab_invoice_item_discount',
'ab_log_error','ab_setup_invoice','ab_static_page','ab_static_page_category','ab_static_page_translate',
'ab_email_template',
];
foreach ($tables->diff($except) as $table) {
DB::statement(sprintf('ALTER TABLE %s MODIFY id int unsigned auto_increment',$table));
if (Schema::hasColumn($table,'site_id')) {
DB::statement(sprintf('ALTER TABLE %s MODIFY site_id int unsigned NOT NULL',$table));
}
}
Schema::table('sites', function (Blueprint $table) {
$table->index(['site_id']);
});
foreach ($tables->diff($except)->diff(['sites']) as $table) {
if (Schema::hasColumn($table,'site_id')) {
dump($table);
Schema::table($table, function (Blueprint $table) {
$table->foreign(['site_id'])->references(['site_id'])->on('sites');
$table->index(['id','site_id']);
});
}
}
DB::statement('ALTER TABLE currencies RENAME COLUMN iso_code TO iso');
Schema::table('currencies', function (Blueprint $table) {
$table->unique(['name']);
$table->unique(['iso']);
});
Schema::table('languages', function (Blueprint $table) {
$table->unique(['name']);
$table->unique(['iso']);
});
DB::statement('ALTER TABLE countries MODIFY currency_id int unsigned');
Schema::table('countries', function (Blueprint $table) {
$table->foreign(['currency_id'])->references(['id'])->on('currencies');
$table->index(['id','currency_id']);
$table->unique(['name']);
$table->unique(['two_code']);
$table->unique(['three_code']);
});
DB::statement('ALTER TABLE users MODIFY country_id int unsigned NOT NULL,MODIFY language_id int unsigned NOT NULL,MODIFY currency_id int unsigned NOT NULL');
Schema::table('users', function (Blueprint $table) {
$table->foreign(['country_id','currency_id'])->references(['id','currency_id'])->on('countries');
$table->foreign(['parent_id','site_id'])->references(['id','site_id'])->on('users');
$table->foreign(['language_id'])->references(['id'])->on('languages');
});
DB::statement('DELETE FROM accounts WHERE id=0');
DB::statement('ALTER TABLE accounts MODIFY id int unsigned auto_increment');
DB::statement('ALTER TABLE accounts MODIFY site_id int unsigned NOT NULL');
DB::statement('ALTER TABLE accounts MODIFY country_id int unsigned NOT NULL,MODIFY language_id int unsigned NOT NULL,MODIFY currency_id int unsigned NOT NULL,MODIFY rtm_id int unsigned DEFAULT NULL,MODIFY active tinyint(1) NOT NULL');
Schema::table('accounts', function (Blueprint $table) {
$table->foreign(['site_id'])->references(['site_id'])->on('sites');
$table->index(['id','site_id']);
$table->foreign(['country_id','currency_id'])->references(['id','currency_id'])->on('countries');
$table->foreign(['user_id','site_id'])->references(['id','site_id'])->on('users');
$table->foreign(['language_id'])->references(['id'])->on('languages');
$table->foreign(['rtm_id','site_id'])->references(['id','site_id'])->on('rtm');
});
DB::statement('ALTER TABLE rtm MODIFY account_id int unsigned NOT NULL,MODIFY parent_id int unsigned');
Schema::table('rtm', function (Blueprint $table) {
$table->foreign(['parent_id','site_id'])->references(['id','site_id'])->on('rtm');
$table->foreign(['account_id','site_id'])->references(['id','site_id'])->on('accounts');
});
DB::statement('ALTER TABLE sites MODIFY country_id int unsigned NOT NULL,MODIFY language_id int unsigned NOT NULL,MODIFY currency_id int unsigned NOT NULL');
Schema::table('sites', function (Blueprint $table) {
$table->foreign(['country_id','currency_id'])->references(['id','currency_id'])->on('countries');
$table->foreign(['admin_id','site_id'])->references(['id','site_id'])->on('users');
$table->foreign(['language_id'])->references(['id'])->on('languages');
});
DB::statement('ALTER TABLE site_details MODIFY site_id int unsigned NOT NULL');
Schema::table('site_details', function (Blueprint $table) {
$table->foreign(['site_id'])->references(['id'])->on('sites');
$table->unique(['site_id','key']);
});
DB::statement('ALTER TABLE taxes MODIFY country_id int unsigned NOT NULL');
Schema::table('taxes', function (Blueprint $table) {
$table->foreign(['country_id'])->references(['id'])->on('countries');
$table->unique(['country_id','zone']);
});
}
}