Address input fixes, region_id/host_id must not be null, address constraints changes
This commit is contained in:
parent
848f41b382
commit
1f04f8374e
@ -13,6 +13,8 @@ class DomainController extends Controller
|
|||||||
public const NODE_RC = 1<<2; // Region
|
public const NODE_RC = 1<<2; // Region
|
||||||
public const NODE_NC = 1<<3; // Host
|
public const NODE_NC = 1<<3; // Host
|
||||||
public const NODE_HC = 1<<4; // Hub
|
public const NODE_HC = 1<<4; // Hub
|
||||||
|
public const NODE_PVT = 1<<5; // Pvt
|
||||||
|
public const NODE_DOWN = 1<<6; // Down
|
||||||
|
|
||||||
// http://ftsc.org/docs/frl-1002.001
|
// http://ftsc.org/docs/frl-1002.001
|
||||||
public const NUMBER_MAX = 0x7fff;
|
public const NUMBER_MAX = 0x7fff;
|
||||||
@ -87,7 +89,7 @@ class DomainController extends Controller
|
|||||||
->get();
|
->get();
|
||||||
|
|
||||||
return $oo->map(function($item) {
|
return $oo->map(function($item) {
|
||||||
return ['id'=>$item->host_id,'value'=>sprintf('%s %s',$item->ftn,$item->system->name)];
|
return ['id'=>$item->id,'value'=>sprintf('%s %s',$item->ftn,$item->system->name)];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ class SystemController extends Controller
|
|||||||
// Check that the region doesnt already exist
|
// Check that the region doesnt already exist
|
||||||
$o = Address::where(function($query) use ($value) {
|
$o = Address::where(function($query) use ($value) {
|
||||||
return $query->where('region_id',$value)
|
return $query->where('region_id',$value)
|
||||||
->whereNULL('host_id')
|
->where('host_id',0)
|
||||||
->where('node_id',0)
|
->where('node_id',0)
|
||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('role',DomainController::NODE_RC);
|
->where('role',DomainController::NODE_RC);
|
||||||
@ -74,7 +74,7 @@ class SystemController extends Controller
|
|||||||
|
|
||||||
case 'host':
|
case 'host':
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'region_id' => ['nullable',new TwoByteInteger],
|
'region_id' => ['required',new TwoByteInteger],
|
||||||
'host_id_new' => [
|
'host_id_new' => [
|
||||||
'required',
|
'required',
|
||||||
new TwoByteInteger,
|
new TwoByteInteger,
|
||||||
@ -82,7 +82,7 @@ class SystemController extends Controller
|
|||||||
// Check that the region doesnt already exist
|
// Check that the region doesnt already exist
|
||||||
$o = Address::where(function($query) use ($value) {
|
$o = Address::where(function($query) use ($value) {
|
||||||
return $query->where('region_id',$value)
|
return $query->where('region_id',$value)
|
||||||
->whereNULL('host_id')
|
->where('host_id',0)
|
||||||
->where('node_id',0)
|
->where('node_id',0)
|
||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('role',DomainController::NODE_RC);
|
->where('role',DomainController::NODE_RC);
|
||||||
@ -121,7 +121,7 @@ class SystemController extends Controller
|
|||||||
|
|
||||||
$oo = new Address;
|
$oo = new Address;
|
||||||
$oo->zone_id = $request->post('zone_id');
|
$oo->zone_id = $request->post('zone_id');
|
||||||
$oo->region_id = ($x=$request->post('region_id')) == 'no' ? NULL : $x;
|
$oo->region_id = ($x=$request->post('region_id')) == 'no' ? 0 : $x;
|
||||||
$oo->host_id = $request->post('host_id_new');
|
$oo->host_id = $request->post('host_id_new');
|
||||||
$oo->node_id = $request->post('node_id_new');
|
$oo->node_id = $request->post('node_id_new');
|
||||||
$oo->point_id = 0;
|
$oo->point_id = 0;
|
||||||
@ -133,8 +133,8 @@ class SystemController extends Controller
|
|||||||
|
|
||||||
case 'node':
|
case 'node':
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'region_id' => ['nullable',new TwoByteInteger],
|
'region_id' => ['required',new TwoByteInteger],
|
||||||
'host_id' => ['nullable',new TwoByteInteger],
|
'host_id' => ['required',new TwoByteInteger],
|
||||||
'node_id' => [
|
'node_id' => [
|
||||||
'required',
|
'required',
|
||||||
new TwoByteInteger,
|
new TwoByteInteger,
|
||||||
@ -142,7 +142,7 @@ class SystemController extends Controller
|
|||||||
// Check that the region doesnt already exist
|
// Check that the region doesnt already exist
|
||||||
$o = Address::where(function($query) use ($request,$value) {
|
$o = Address::where(function($query) use ($request,$value) {
|
||||||
return $query
|
return $query
|
||||||
->where('host_id',$request->post('host_id_new'))
|
->where('host_id',$request->post('host_id'))
|
||||||
->where('node_id',$value)
|
->where('node_id',$value)
|
||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('role',DomainController::NODE_RC);
|
->where('role',DomainController::NODE_RC);
|
||||||
@ -158,14 +158,16 @@ class SystemController extends Controller
|
|||||||
$fail(sprintf('Point numbers must be between 0 and %d',DomainController::NUMBER_MAX));
|
$fail(sprintf('Point numbers must be between 0 and %d',DomainController::NUMBER_MAX));
|
||||||
}],
|
}],
|
||||||
'hub' => 'required|boolean',
|
'hub' => 'required|boolean',
|
||||||
|
'hub_id' => 'nullable|exists:addresses,id',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$oo = new Address;
|
$oo = new Address;
|
||||||
$oo->zone_id = $request->post('zone_id');
|
$oo->zone_id = $request->post('zone_id');
|
||||||
$oo->region_id = ($x=$request->post('region_id')) == 'no' ? NULL : $x;
|
$oo->region_id = ($x=$request->post('region_id')) == 'no' ? 0 : $x;
|
||||||
$oo->host_id = $request->post('host_id');
|
$oo->host_id = $request->post('host_id');
|
||||||
$oo->node_id = $request->post('node_id');
|
$oo->node_id = $request->post('node_id');
|
||||||
$oo->point_id = $request->post('point_id');
|
$oo->point_id = $request->post('point_id');
|
||||||
|
$oo->hub_id = $request->post('hub_id');
|
||||||
$oo->role = (! $oo->point_id) && $request->post('hub') ? DomainController::NODE_HC : NULL;
|
$oo->role = (! $oo->point_id) && $request->post('hub') ? DomainController::NODE_HC : NULL;
|
||||||
$oo->active = TRUE;
|
$oo->active = TRUE;
|
||||||
|
|
||||||
|
@ -4,13 +4,14 @@ namespace App\Models;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
use App\Http\Controllers\DomainController;
|
use App\Http\Controllers\DomainController;
|
||||||
use App\Traits\ScopeActive;
|
use App\Traits\ScopeActive;
|
||||||
|
|
||||||
class Address extends Model
|
class Address extends Model
|
||||||
{
|
{
|
||||||
use ScopeActive;
|
use ScopeActive,SoftDeletes;
|
||||||
|
|
||||||
/* SCOPES */
|
/* SCOPES */
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ class Address extends Model
|
|||||||
{
|
{
|
||||||
return $query
|
return $query
|
||||||
->orderBy('region_id')
|
->orderBy('region_id')
|
||||||
->orderByRaw('host_id NULLS FIRST')
|
->orderBy('host_id')
|
||||||
->orderBy('node_id')
|
->orderBy('node_id')
|
||||||
->orderBy('point_id');
|
->orderBy('point_id');
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ class Zone extends Model
|
|||||||
public function scopeDomainZoneOrder($query)
|
public function scopeDomainZoneOrder($query)
|
||||||
{
|
{
|
||||||
return $query
|
return $query
|
||||||
|
->select('zones.*')
|
||||||
->join('domains',['domains.id'=>'zones.domain_id'])
|
->join('domains',['domains.id'=>'zones.domain_id'])
|
||||||
->orderBy('domains.name')
|
->orderBy('domains.name')
|
||||||
->orderBy('zone_id');
|
->orderBy('zone_id');
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddSoftdeletesToAddresses extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('addresses', function (Blueprint $table) {
|
||||||
|
$table->dropUnique(['zone_id','region_id','host_id','node_id']);
|
||||||
|
$table->dropUnique(['zone_id','host_id','node_id','point_id']);
|
||||||
|
|
||||||
|
$table->integer('hub_id')->nullable();
|
||||||
|
$table->foreign('hub_id')->references('id')->on('addresses');
|
||||||
|
$table->softDeletes();
|
||||||
|
});
|
||||||
|
|
||||||
|
DB::statement("ALTER TABLE addresses ALTER COLUMN region_id set NOT NULL");
|
||||||
|
DB::statement("ALTER TABLE addresses ALTER COLUMN host_id set NOT NULL");
|
||||||
|
DB::statement("CREATE UNIQUE INDEX active_addresses ON addresses (zone_id,region_id,host_id,node_id,point_id) WHERE active = true");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('addresses', function (Blueprint $table) {
|
||||||
|
$table->dropSoftDeletes();
|
||||||
|
$table->dropForeign(['hub_id']);
|
||||||
|
$table->dropColumn('hub_id');
|
||||||
|
$table->dropIndex('active_addresses');
|
||||||
|
$table->unique(['zone_id','region_id','host_id','node_id']);
|
||||||
|
$table->unique(['zone_id','host_id','node_id','point_id']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -68,7 +68,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($o->zones as $oz)
|
@foreach ($o->zones->sortBy('zone_id') as $oz)
|
||||||
<!-- First System Zone -->
|
<!-- First System Zone -->
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ sprintf('ZC-%s-%05d',$oz->domain->name,$oz->zone_id) }}</td>
|
<td>{{ sprintf('ZC-%s-%05d',$oz->domain->name,$oz->zone_id) }}</td>
|
||||||
@ -80,7 +80,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<!-- Other Nodes -->
|
<!-- Other Nodes -->
|
||||||
@foreach ($oz->addresses()->FTNorder()->with(['system','zone.domain'])->get() as $ao)
|
@foreach ($oz->addresses()->active()->FTNorder()->whereNull('hub_id')->with(['system','zone.domain'])->get() as $ao)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $ao->system->name($ao) }}</td>
|
<td>{{ $ao->system->name($ao) }}</td>
|
||||||
<td>{{ $ao->system->sysop }}</td>
|
<td>{{ $ao->system->sysop }}</td>
|
||||||
@ -89,6 +89,18 @@
|
|||||||
<td>{{ $ao->ftn }}</td>
|
<td>{{ $ao->ftn }}</td>
|
||||||
<td>-</td>
|
<td>-</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<!-- If this node is a hub -->
|
||||||
|
@foreach ($oz->addresses()->active()->FTNorder()->where('hub_id',$ao->id)->with(['system','zone.domain'])->get() as $aoo)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $aoo->system->name($aoo) }}</td>
|
||||||
|
<td>{{ $aoo->system->sysop }}</td>
|
||||||
|
<td>{{ $ao->system->location }}</td>
|
||||||
|
<td>{{ $aoo->role }}</td>
|
||||||
|
<td>{{ $aoo->ftn }}</td>
|
||||||
|
<td>-</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
@endforeach
|
@endforeach
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
|
Loading…
Reference in New Issue
Block a user