flight search and pagination (in admin), schema changes to accomodate

This commit is contained in:
Nabeel Shahzad
2017-11-30 20:28:45 -06:00
parent a82b8878d3
commit e1b0b92f83
30 changed files with 554 additions and 104 deletions

View File

@@ -7,6 +7,8 @@ use App\Models\FlightFields;
use App\Models\Airport;
use App\Http\Requests\CreateFlightRequest;
use App\Http\Requests\UpdateFlightRequest;
use App\Repositories\AirlineRepository;
use App\Repositories\AirportRepository;
use App\Repositories\FlightRepository;
use App\Repositories\SubfleetRepository;
use Illuminate\Http\Request;
@@ -16,15 +18,15 @@ use Response;
class FlightController extends BaseController
{
/** @var FlightRepository */
private $flightRepository, $subfleetRepo;
public function __construct(
AirlineRepository $airlineRepo,
AirportRepository $airportRepo,
FlightRepository $flightRepo,
SubfleetRepository $subfleetRepo
)
{
$this->flightRepository = $flightRepo;
) {
$this->airlineRepo = $airlineRepo;
$this->airportRepo = $airportRepo;
$this->flightRepo = $flightRepo;
$this->subfleetRepo = $subfleetRepo;
}
@@ -51,8 +53,8 @@ class FlightController extends BaseController
*/
public function index(Request $request)
{
$this->flightRepository->pushCriteria(new RequestCriteria($request));
$flights = $this->flightRepository->all();
$this->flightRepo->pushCriteria(new RequestCriteria($request));
$flights = $this->flightRepo->paginate(10);
return view('admin.flights.index', [
'flights' => $flights,
]);
@@ -79,7 +81,7 @@ class FlightController extends BaseController
{
$input = $request->all();
$flight = $this->flightRepository->create($input);
$flight = $this->flightRepo->create($input);
Flash::success('Flight saved successfully.');
return redirect(route('admin.flights.index'));
@@ -94,7 +96,7 @@ class FlightController extends BaseController
*/
public function show($id)
{
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
@@ -117,7 +119,7 @@ class FlightController extends BaseController
*/
public function edit($id)
{
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
@@ -127,8 +129,8 @@ class FlightController extends BaseController
$avail_subfleets = $this->getAvailSubfleets($flight);
return view('admin.flights.edit', [
'flight' => $flight,
'airlines' => Airline::all()->pluck('name', 'id'),
'airports' => Airport::all()->pluck('icao', 'id'),
'airlines' => $this->airlineRepo->all()->pluck('name', 'id'),
'airports' => $this->airportRepo->all()->pluck('icao', 'icao'),
'avail_subfleets' => $avail_subfleets,
]);
}
@@ -143,14 +145,14 @@ class FlightController extends BaseController
*/
public function update($id, UpdateFlightRequest $request)
{
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
return redirect(route('admin.flights.index'));
}
$flight = $this->flightRepository->update($request->all(), $id);
$flight = $this->flightRepo->update($request->all(), $id);
Flash::success('Flight updated successfully.');
return redirect(route('admin.flights.index'));
@@ -165,14 +167,14 @@ class FlightController extends BaseController
*/
public function destroy($id)
{
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
return redirect(route('admin.flights.index'));
}
$this->flightRepository->delete($id);
$this->flightRepo->delete($id);
Flash::success('Flight deleted successfully.');
return redirect(route('admin.flights.index'));
@@ -190,7 +192,7 @@ class FlightController extends BaseController
{
$id = $request->id;
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
return redirect(route('admin.flights.index'));
@@ -233,7 +235,7 @@ class FlightController extends BaseController
{
$id = $request->id;
$flight = $this->flightRepository->findWithoutFail($id);
$flight = $this->flightRepo->findWithoutFail($id);
if (empty($flight)) {
Flash::error('Flight not found');
return redirect(route('admin.flights.index'));

View File

@@ -5,15 +5,15 @@ namespace App\Http\Controllers\Frontend;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Models\Airline;
use App\Models\Airport;
use App\Models\Pirep;
use App\Models\PirepField;
use App\Http\Controllers\Controller;
use App\Repositories\AirlineRepository;
use App\Repositories\AircraftRepository;
use App\Repositories\AirportRepository;
use App\Repositories\PirepRepository;
use App\Repositories\PirepFieldRepository;
class PirepController extends Controller
@@ -21,20 +21,25 @@ class PirepController extends Controller
public function __construct(
AirlineRepository $airlineRepo,
PirepRepository $pirepRepo,
AircraftRepository $aircraftRepo)
{
AircraftRepository $aircraftRepo,
AirportRepository $airportRepo,
PirepFieldRepository $pirepFieldRepo
) {
parent::__construct();
$this->airlineRepo = $airlineRepo;
$this->aircraftRepo = $aircraftRepo;
$this->pirepRepo = $pirepRepo;
$this->airportRepo = $airportRepo;
$this->pirepFieldRepo = $pirepFieldRepo;
}
public function airportList()
{
# TODO: Cache
$retval = [];
$airports = Airport::all();
$airports = $this->airportRepo->all();
foreach($airports as $airport) {
$retval[$airport->id] = $airport->icao.' - '.$airport->name;
$retval[$airport->icao] = $airport->icao.' - '.$airport->name;
}
return $retval;
@@ -55,9 +60,10 @@ class PirepController extends Controller
public function index(Request $request)
{
$user = Auth::user();
$pireps = Pirep::where('user_id', $user->id)
->orderBy('created_at', 'desc')
->get();
$pireps = $this->pirepRepo
->where('user_id', $user->id)
->orderBy('created_at', 'desc')
->get();
return $this->view('pireps.index', [
'user' => $user,
@@ -72,9 +78,9 @@ class PirepController extends Controller
return $this->view('pireps.create', [
'airports' => $airports,
'airlines' => Airline::all()->pluck('name', 'id'),
'airlines' => $this->airlineRepo->all()->pluck('name', 'id'),
'aircraft' => $aircraft,
'pirepfields' => PirepField::all(),
'pirepfields' => $this->pirepFieldRepo->all(),
'fieldvalues' => [],
]);
}

View File

@@ -11,9 +11,10 @@ use Eloquent as Model;
class Airport extends Model
{
public $table = 'airports';
protected $dates = ['deleted_at'];
public $timestamps = false;
public $fillable = [
'id',
'icao',
'name',
'location',
@@ -24,30 +25,28 @@ class Airport extends Model
'fuel_mogas_cost',
];
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
];
/**
* Validation rules
*
* @var array
*/
public static $rules = [
'icao' => 'required|unique:airports'
#'icao' => 'required|unique:airports'
];
public function save(array $options = [])
{
if(in_array('icao', $options)) {
$options['icao'] = strtoupper($options['icao']);
}
/**
* Some fancy callbacks
*/
protected static function boot() {
return parent::save($options);
parent::boot();
/**
* Make sure the ID is set to the ICAO
*/
static::creating(function (Airport $model) {
$model->icao = strtoupper($model->icao);
$model->id = $model->icao;
});
}
}

View File

@@ -3,9 +3,13 @@
namespace App\Repositories;
use App\Models\Aircraft;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class AircraftRepository extends BaseRepository
class AircraftRepository extends BaseRepository implements CacheableInterface
{
use CacheableRepository;
/**
* @var array
*/

View File

@@ -3,9 +3,14 @@
namespace App\Repositories;
use App\Models\Airline;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class AirlineRepository extends BaseRepository
class AirlineRepository extends BaseRepository implements CacheableInterface
{
use CacheableRepository;
/**
* @var array
*/

View File

@@ -3,10 +3,14 @@
namespace App\Repositories;
use App\Models\Airport;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class AirportRepository extends BaseRepository
class AirportRepository extends BaseRepository implements CacheableInterface
{
use CacheableRepository;
/**
* @var array
*/
@@ -21,4 +25,10 @@ class AirportRepository extends BaseRepository
{
return Airport::class;
}
public function create(array $attributes)
{
//$attributes['id'] = $attributes['icao'];
return parent::create($attributes);
}
}

View File

@@ -3,15 +3,22 @@
namespace App\Repositories;
use App\Models\Flight;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class FlightRepository extends BaseRepository
class FlightRepository extends BaseRepository implements CacheableInterface
{
use CacheableRepository;
/**
* @var array
*/
protected $fieldSearchable = [
'arr_airport_id',
'dpt_airport_id',
'arr_airport_id'
'flight_number' => 'like',
'route' => 'like',
'notes' => 'like',
];
/**

View File

@@ -3,9 +3,13 @@
namespace App\Repositories;
use App\Models\Rank;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class RankRepository extends BaseRepository
class RankRepository extends BaseRepository implements CacheableInterface
{
use CacheableRepository;
/**
* @var array
*/