diff --git a/app/Database/migrations/2018_01_28_180522_create_awards_table.php b/app/Database/migrations/2018_01_28_180522_create_awards_table.php index b0c951fd..0f3b5803 100644 --- a/app/Database/migrations/2018_01_28_180522_create_awards_table.php +++ b/app/Database/migrations/2018_01_28_180522_create_awards_table.php @@ -16,9 +16,17 @@ class CreateAwardsTable extends Migration Schema::create('awards', function (Blueprint $table) { $table->increments('id'); $table->string('title', 50); - $table->text('description', 50)->nullable(); - $table->string('image', 255)->nullable(); + $table->text('description')->nullable(); + $table->text('image_url')->nullable(); + + # ref fields are expenses tied to some model object + # EG, the airports has an internal expense for gate costs + $table->string('ref_class')->nullable(); + $table->string('ref_class_id', 36)->nullable(); + $table->timestamps(); + + $table->index(['ref_class', 'ref_class_id']); }); } diff --git a/app/Interfaces/AwardInterface.php b/app/Interfaces/AwardInterface.php index 9ad942e8..ab732477 100644 --- a/app/Interfaces/AwardInterface.php +++ b/app/Interfaces/AwardInterface.php @@ -2,6 +2,7 @@ namespace App\Interfaces; +use App\Models\Award; use App\Models\User; use App\Models\UserAward; @@ -22,42 +23,50 @@ class AwardInterface protected $award; /** - * AwardInterface constructor. - * @param $award + * @var User */ - public function __construct($award) + protected $user; + + /** + * AwardInterface constructor. + * @param Award $award + * @param User $user + */ + public function __construct(Award $award, User $user) { $this->award = $award; + $this->user = $user; } /** * Add the award to this user, if they don't already have it - * @param User $user - * @return bool + * @return bool|UserAward */ - public function addAward(User $user) + public function addAward() { $w = [ - 'user_id' => $user->id, + 'user_id' => $this->user->id, 'award_id' => $this->award->id ]; $found = UserAward::where($w)->count('id'); - if($found > 0) { + if ($found > 0) { return true; } // Associate this award to the user now $award = new UserAward($w); $award->save(); + + return $award; } /** - * Each award class just needs to award - * @param User $user - * @return mixed + * Each award class just needs to return true or false + * if it should actually be awarded to a user + * @return boolean */ - public function check(User $user) + public function check() { return false; } diff --git a/app/Models/Award.php b/app/Models/Award.php index 078303be..ec44d341 100755 --- a/app/Models/Award.php +++ b/app/Models/Award.php @@ -3,8 +3,10 @@ namespace App\Models; /** - * Class Award - * + * The Award model + * @property mixed id + * @property mixed ref_class + * @property mixed|null ref_class_id * @package Award\Models */ class Award extends BaseModel @@ -14,25 +16,32 @@ class Award extends BaseModel public $fillable = [ 'title', 'description', - 'image', - ]; - - protected $casts = [ - + 'image_url', + 'ref_class', + 'ref_class_id', ]; public static $rules = [ - 'title' => 'required', + 'title' => 'required', + 'description' => 'nullable', + 'image_url' => 'nullable', ]; - /** - * any foreign keys + * Get the referring object */ - /* - public function subfleets() { - return $this->belongsToMany(Subfleet::class, 'subfleet_fare') - ->withPivot('price', 'cost', 'capacity'); + public function getReference() + { + if (!$this->ref_class) { + return null; } - */ + + try { + return new $this->ref_class; + # return $klass; + # return $klass->find($this->ref_class_id); + } catch (\Exception $e) { + return null; + } + } } diff --git a/app/Models/User.php b/app/Models/User.php index d5a32865..22317ce1 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -147,6 +147,11 @@ class User extends Authenticatable return $this->belongsTo(Airline::class, 'airline_id'); } + public function awards() + { + return $this->hasMany(UserAward::class, 'user_id'); + } + public function home_airport() { return $this->belongsTo(Airport::class, 'home_airport_id'); diff --git a/app/Models/UserAward.php b/app/Models/UserAward.php index 2dcae944..fec2c55d 100644 --- a/app/Models/UserAward.php +++ b/app/Models/UserAward.php @@ -14,4 +14,20 @@ class UserAward extends BaseModel 'user_id', 'award_id' ]; + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function award() + { + return $this->belongsTo(Award::class, 'award_id'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } }