@@ -14,31 +14,43 @@ public function __construct(
1414 protected VercelService $ vercelService ,
1515 ) { parent ::__construct ($ domainRepository ); }
1616
17- public function resolve ( array $ data = [] ) {
17+ public function resolve ( array $ data = [], bool $ defaults = true , bool $ filled = true ) {
1818
19- return collect ([
20- ['dest ' => 'client ' , 'name ' => $ client = data_get ($ data , 'client_domain_name ' , 'www ' )],
21- ['dest ' => 'admin ' , 'name ' => data_get ($ data , 'admin_domain_name ' , $ client === ' www ' ? 'admin ' : null )],
19+ $ list = collect ([
20+ ['dest ' => 'client ' , 'name ' => data_get ($ data , 'client_domain_name ' ) ?: ( $ defaults ? 'www ' : ' ' )],
21+ ['dest ' => 'admin ' , 'name ' => data_get ($ data , 'admin_domain_name ' ) ?: ( $ defaults ? 'admin ' : '' )],
2222 ['dest ' => 'vendor ' , 'name ' => data_get ($ data , 'vendor_domain_name ' )],
2323 ['dest ' => 'delivery ' , 'name ' => data_get ($ data , 'delivery_domain_name ' )],
2424 ['dest ' => 'affiliate ' , 'name ' => data_get ($ data , 'affiliate_domain_name ' )],
2525 ['dest ' => 'blog ' , 'name ' => data_get ($ data , 'blog_domain_name ' )],
2626 ['dest ' => 'app ' , 'name ' => data_get ($ data , 'app_domain_name ' )],
2727 ['dest ' => 'api ' , 'name ' => data_get ($ data , 'api_domain_name ' )],
2828 ['dest ' => 'cdn ' , 'name ' => data_get ($ data , 'cdn_domain_name ' )],
29- ])->filter (fn ($ item ) => $ item ['name ' ])->all ();
29+ ]);
30+
31+ return $ filled ? $ list ->filter (fn ($ item ) => $ item ['name ' ]) : $ list ->filter (fn ($ item ) => !$ item ['name ' ]);
3032
3133 }
32- public function sync ( Domain $ domain ) {
34+ public function clean ( array $ items = [] ) {
3335
34- $ this ->domainRepository ->query ()->where ('dest ' , $ domain ->dest )->where ('name ' , '!= ' , $ domain ->name )->get ()->each (function ($ item ) {
36+ collect ($ items )->each (fn ($ item ) => $ this ->domainRepository ->query ()->where ('dest ' , $ item ['dest ' ])->get ()->each (fn ($ d ) =>
37+ $ this ->remove ($ d )
38+ ));
3539
36- $ this ->vercelService ->setProject ($ item ->dest )->deleteDomain ($ item ->name );
37- $ this ->cloudflareService ->deleteSubDomain ($ item ->provider_id ?? $ item ->name );
38- $ this ->delete ($ item ->id );
40+ }
41+ public function remove ( Domain $ domain ) {
3942
40- });
43+ $ this ->vercelService ->setProject ($ domain ->dest )->deleteDomain ($ domain ->name );
44+ $ this ->cloudflareService ->setZone ($ domain ->zone ?->provider_id)->deleteSubDomain ($ domain ->provider_id ?? $ domain ->name );
45+ $ this ->domainRepository ->forceDelete ($ domain ->id );
46+
47+ }
48+ public function sync ( Domain $ domain ) {
4149
50+ $ this ->domainRepository ->query ()->where ('id ' , '!= ' , $ domain ->id )->where ('dest ' , $ domain ->dest )->get ()->each (fn ($ d ) =>
51+ $ this ->remove ($ d )
52+ );
53+
4254 $ this ->deleteCache ();
4355
4456 }
@@ -84,19 +96,22 @@ public function register ( Zone $zone, string $name, string $dest ) {
8496 public function check ( string $ domain = null , array $ data = [] ) {
8597
8698 if ( $ domain && store ()?->zone?->name !== $ domain ) return (bool ) $ this ->zoneService ->validate ($ domain );
87- if ( !$ zone = $ this ->zoneService ->currentZone () ) return false ;
99+ if ( !$ zone = $ this ->zoneService ->current () ) return false ;
88100
89- return collect ( $ this ->resolve ($ data) )->every (fn ($ item ) => $ this ->validate ($ zone , $ item ['name ' ]));
101+ return $ this ->resolve ($ data, ( bool ) $ domain )->every (fn ($ item ) => $ this ->validate ($ zone , $ item ['name ' ]));
90102
91103 }
92104 public function apply ( array $ data = [] ) {
93105
94106 $ domain = string (data_get ($ data , 'domain_name ' ));
95-
107+
96108 if ( !$ this ->check ($ domain , $ data ) ) return false ;
97109 if ( !$ zone = $ this ->zoneService ->apply ($ domain ) ) return false ;
98110
99- return collect ($ this ->resolve ($ data ))->every (fn ($ item ) => $ this ->register ($ zone , $ item ['name ' ], $ item ['dest ' ]));
111+ $ result = $ this ->resolve ($ data , (bool ) $ domain )->every (fn ($ item ) => $ this ->register ($ zone , $ item ['name ' ], $ item ['dest ' ]));
112+ if ( $ result ) $ this ->runJob ([static ::class, 'clean ' ], [$ this ->resolve ($ data , (bool ) $ domain , false )->all ()]);
113+
114+ return $ result ;
100115
101116 }
102117
0 commit comments