Skip to content

Commit

Permalink
Add more API resources; user bid management and tests #35 #36
Browse files Browse the repository at this point in the history
  • Loading branch information
nabeelio committed Dec 12, 2017
1 parent 5b25a46 commit 248a8d1
Show file tree
Hide file tree
Showing 27 changed files with 470 additions and 166 deletions.
1 change: 1 addition & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion app/Facades/Utils.php
Expand Up @@ -6,12 +6,21 @@

class Utils extends Facade
{

protected static function getFacadeAccessor()
{
return 'utils';
}

/**
* Returns a 40 character API key that a user can use
* @return string
*/
public static function generateApiKey()
{
$key = sha1(time() . mt_rand());
return $key;
}

/**
* Convert seconds to an array of hours, minutes, seconds
* @param $seconds
Expand Down
5 changes: 5 additions & 0 deletions app/Http/Controllers/Api/FlightController.php
Expand Up @@ -2,6 +2,7 @@

namespace App\Http\Controllers\Api;

use Log;
use Illuminate\Http\Request;

use App\Http\Controllers\AppBaseController;
Expand All @@ -25,6 +26,10 @@ public function get($id)
return new FlightResource($flight);
}

/**
* @param Request $request
* @return mixed
*/
public function search(Request $request)
{
try {
Expand Down
55 changes: 55 additions & 0 deletions app/Http/Controllers/Api/UserController.php
@@ -0,0 +1,55 @@
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;

use App\Http\Controllers\AppBaseController;
use App\Repositories\UserRepository;

use App\Models\UserBid;

use App\Http\Resources\Flight as FlightResource;
use App\Http\Resources\User as UserResource;
use App\Http\Resources\UserBid as UserBidResource;


class UserController extends AppBaseController
{
protected $userRepo;

public function __construct(UserRepository $userRepo)
{
$this->userRepo = $userRepo;
}

/**
* Return the profile for the currently auth'd user
*/
public function index(Request $request)
{
UserResource::withoutWrapping();
return new UserResource($request->user);
}

/**
* Get the profile for the passed-in user
*/
public function get($id)
{
UserResource::withoutWrapping();
return new UserResource($this->userRepo->find($id));
}

/**
* Return all of the bids for the passed-in user
*/
public function bids($id)
{
$flights = UserBid::where(['user_id' => $id])->get()
->pluck('flight');

return FlightResource::collection($flights);
}

}
13 changes: 2 additions & 11 deletions app/Http/Middleware/ApiAuth.php
Expand Up @@ -6,7 +6,6 @@
namespace App\Http\Middleware;

use Auth;
use Cache;
use Closure;
use App\Models\User;

Expand All @@ -28,16 +27,8 @@ public function handle($request, Closure $next)

// Try to find the user via API key. Cache this lookup
$api_key = $request->header('Authorization');
$user = User::where('apikey', $api_key)->first();
/*$user = Cache::remember(
config('cache.keys.USER_API_KEY.key') . $api_key,
config('cache.keys.USER_API_KEY.time'),
function () use ($api_key) {
return User::where('apikey', $api_key)->first();
}
);*/

if(!$user) {
$user = User::where('api_key', $api_key)->first();
if($user === null) {
return $this->unauthorized();
}

Expand Down
13 changes: 13 additions & 0 deletions app/Http/Resources/Aircraft.php
@@ -0,0 +1,13 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Aircraft extends Resource
{
public function toArray($request)
{
return parent::toArray($request);
}
}
23 changes: 23 additions & 0 deletions app/Http/Resources/Airline.php
@@ -0,0 +1,23 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Airline extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'icao' => $this->icao,
'iata' => $this->iata,
'name' => $this->name,
'country' => $this->country,
'logo' => $this->logo,
#'active' => $this->active,
#'created_at' => $this->created_at,
#'updated_at' => $this->updated_at,
];
}
}
6 changes: 0 additions & 6 deletions app/Http/Resources/Airport.php
Expand Up @@ -6,12 +6,6 @@

class Airport extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
Expand Down
12 changes: 4 additions & 8 deletions app/Http/Resources/Flight.php
Expand Up @@ -6,12 +6,6 @@

class Flight extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
Expand All @@ -29,8 +23,10 @@ public function toArray($request)
'flight_time' => $this->flight_time,
'notes' => $this->notes,
'active' => $this->active,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,

'subfleet' => Subfleet::collection($this->subfleets),
#'created_at' => $this->created_at,
#'updated_at' => $this->updated_at,
];
}
}
26 changes: 26 additions & 0 deletions app/Http/Resources/Rank.php
@@ -0,0 +1,26 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Rank extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
#'auto_approve_acars' => $this->auto_approve_acars,
#'auto_approve_manual' => $this->auto_approve_manual,
#'auto_promote' => $this->auto_promote,
#'created_at' => $this->created_at,
#'updated_at' => $this->updated_at,
];
}
}
24 changes: 24 additions & 0 deletions app/Http/Resources/Subfleet.php
@@ -0,0 +1,24 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Subfleet extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'airline_id' => $this->airline_id,
'name' => $this->name,
'type' => $this->type,
'fuel_type' => $this->fuel_type,
'cargo_capacity' => $this->cargo_capacity,
'fuel_capacity' => $this->fuel_capacity,
'gross_weight' => $this->gross_weight,

'aircraft' => Aircraft::collection($this->aircraft),
];
}
}
31 changes: 31 additions & 0 deletions app/Http/Resources/User.php
@@ -0,0 +1,31 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class User extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'apikey' => $this->apikey,
'rank_id' => $this->rank_id,
'home_airport' => $this->home_airport_id,
'curr_airport' => $this->curr_airport_id,
'last_pirep_id' => $this->last_pirep_id,
'flights' => $this->flight,
'flight_time' => $this->flight_time,
'balance' => $this->balance,
'timezone' => $this->timezone,
'active' => $this->active,

'airline' => Airline::make($this->airline),
'bids' => UserBid::collection($this->bids),
'rank' => Rank::make($this->rank),
];
}
}
20 changes: 20 additions & 0 deletions app/Http/Resources/UserBid.php
@@ -0,0 +1,20 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class UserBid extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'user_id' => $this->user_id,
'flight_id' => $this->flight_id,
'flight' => Flight::collection($this->whenLoaded('flight'))
#'created_at' => $this->created_at,
#'updated_at' => $this->updated_at,
];
}
}
41 changes: 14 additions & 27 deletions app/Models/Aircraft.php
Expand Up @@ -4,51 +4,38 @@

use Eloquent as Model;

/**
* Class Aircraft
*
* @package App\Models
* @version June 9, 2017, 1:06 am UTC
*/
class Aircraft extends Model
{
public $table = 'aircraft';

protected $dates = ['deleted_at'];

public $fillable
= [
'subfleet_id',
'airport_id',
'name',
'registration',
'tail_number',
'active',
];
public $fillable = [
'subfleet_id',
'airport_id',
'name',
'registration',
'tail_number',
'active',
];

/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts
= [
'subfleet_id' => 'string',
'name' => 'string',
'registration' => 'string',
'active' => 'boolean',
];
protected $casts = [
'active' => 'boolean',
];

/**
* Validation rules
*
* @var array
*/
public static $rules
= [
'name' => 'required',
'active' => '',
];
public static $rules = [
'name' => 'required',
];

/**
* foreign keys
Expand Down

0 comments on commit 248a8d1

Please sign in to comment.