diff --git a/src/app/Domain.php b/src/app/Domain.php --- a/src/app/Domain.php +++ b/src/app/Domain.php @@ -54,19 +54,19 @@ /** * Assign a package to a domain. The domain should not belong to any existing entitlements. * - * @param \App\Package $package The package to assign. + * @param \App\Package $package The package to assign. + * @param \App\User $user The wallet owner. * - * @return \App\Domain + * @return \App\Domain Self */ public function assignPackage($package, $user) { - $wallet_id = $user->wallets()->get()[0]->id; + $wallet_id = $user->wallets()->first()->id; foreach ($package->skus as $sku) { for ($i = $sku->pivot->qty; $i > 0; $i--) { \App\Entitlement::create( [ - 'owner_id' => $user->id, 'wallet_id' => $wallet_id, 'sku_id' => $sku->id, 'cost' => $sku->pivot->cost(), diff --git a/src/app/Entitlement.php b/src/app/Entitlement.php --- a/src/app/Entitlement.php +++ b/src/app/Entitlement.php @@ -41,7 +41,6 @@ */ protected $fillable = [ 'sku_id', - 'owner_id', 'wallet_id', 'entitleable_id', 'entitleable_type', @@ -74,16 +73,6 @@ } /** - * The owner of this entitlement. - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function owner() - { - return $this->belongsTo('App\User', 'owner_id', 'id'); - } - - /** * The wallet this entitlement is being billed to * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo diff --git a/src/app/Observers/EntitlementObserver.php b/src/app/Observers/EntitlementObserver.php --- a/src/app/Observers/EntitlementObserver.php +++ b/src/app/Observers/EntitlementObserver.php @@ -35,30 +35,19 @@ // can't dispatch job here because it'll fail serialization // Make sure the owner is at least a controller on the wallet - $owner = \App\User::find($entitlement->owner_id); $wallet = \App\Wallet::find($entitlement->wallet_id); - if (!$owner) { + if (!$wallet || !$wallet->owner) { return false; } - if (!$wallet) { - return false; - } - - if (!$wallet->owner() == $owner) { - if (!$wallet->controllers->contains($owner)) { - return false; - } - } - $sku = \App\Sku::find($entitlement->sku_id); if (!$sku) { return false; } - $result = $sku->handler_class::preReq($entitlement, $owner); + $result = $sku->handler_class::preReq($entitlement, $wallet->owner); if (!$result) { return false; diff --git a/src/app/User.php b/src/app/User.php --- a/src/app/User.php +++ b/src/app/User.php @@ -135,7 +135,6 @@ for ($i = $sku->pivot->qty; $i > 0; $i--) { \App\Entitlement::create( [ - 'owner_id' => $this->id, 'wallet_id' => $wallet_id, 'sku_id' => $sku->id, 'cost' => $sku->pivot->cost(), @@ -185,7 +184,6 @@ { // TODO: I guess wallet could be parametrized in future $wallet = $this->wallet(); - $owner = $wallet->owner; $exists = $this->entitlements()->where('sku_id', $sku->id)->count(); // TODO: Sanity check, this probably should be in preReq() on handlers @@ -196,7 +194,6 @@ while ($count > 0) { \App\Entitlement::create([ - 'owner_id' => $owner->id, 'wallet_id' => $wallet->id, 'sku_id' => $sku->id, 'cost' => $sku->units_free >= $exists ? $sku->cost : 0, @@ -295,10 +292,9 @@ $domains[] = $dbdomain; } - $entitlements = Entitlement::where('owner_id', $this->id)->get(); - - foreach ($entitlements as $entitlement) { - if ($entitlement->entitleable instanceof Domain) { + foreach ($this->wallets as $wallet) { + $entitlements = $wallet->entitlements()->where('entitleable_type', Domain::class)->get(); + foreach ($entitlements as $entitlement) { $domain = $entitlement->entitleable; \Log::info("Found domain for {$this->email}: {$domain->namespace} (owned)"); $domains[] = $domain; @@ -306,12 +302,11 @@ } foreach ($this->accounts as $wallet) { - foreach ($wallet->entitlements as $entitlement) { - if ($entitlement->entitleable instanceof Domain) { - $domain = $entitlement->entitleable; - \Log::info("Found domain {$this->email}: {$domain->namespace} (charged)"); - $domains[] = $domain; - } + $entitlements = $wallet->entitlements()->where('entitleable_type', Domain::class)->get(); + foreach ($entitlements as $entitlement) { + $domain = $entitlement->entitleable; + \Log::info("Found domain {$this->email}: {$domain->namespace} (charged)"); + $domains[] = $domain; } } diff --git a/src/database/migrations/2019_09_17_102628_create_sku_entitlements.php b/src/database/migrations/2019_09_17_102628_create_sku_entitlements.php --- a/src/database/migrations/2019_09_17_102628_create_sku_entitlements.php +++ b/src/database/migrations/2019_09_17_102628_create_sku_entitlements.php @@ -34,7 +34,6 @@ 'entitlements', function (Blueprint $table) { $table->string('id', 36)->primary(); - $table->bigInteger('owner_id'); $table->bigInteger('entitleable_id'); $table->string('entitleable_type'); $table->integer('cost')->default(0)->nullable(); @@ -44,7 +43,6 @@ $table->timestamps(); $table->foreign('sku_id')->references('id')->on('skus')->onDelete('cascade'); - $table->foreign('owner_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('wallet_id')->references('id')->on('wallets')->onDelete('cascade'); } ); diff --git a/src/tests/Feature/BillingTest.php b/src/tests/Feature/BillingTest.php --- a/src/tests/Feature/BillingTest.php +++ b/src/tests/Feature/BillingTest.php @@ -117,7 +117,6 @@ $entitlement = \App\Entitlement::create( [ - 'owner_id' => $this->user->id, 'wallet_id' => $this->wallet_id, 'sku_id' => $sku->id, 'cost' => $sku->cost, @@ -148,7 +147,6 @@ $entitlement = \App\Entitlement::create( [ - 'owner_id' => $this->user->id, 'wallet_id' => $this->wallet_id, 'sku_id' => $sku->id, 'cost' => $sku->cost, @@ -193,7 +191,6 @@ $entitlement = \App\Entitlement::create( [ - 'owner_id' => $this->user->id, 'entitleable_id' => $this->user->id, 'entitleable_type' => \App\User::class, 'cost' => $sku->cost, diff --git a/src/tests/Feature/Controller/DomainsTest.php b/src/tests/Feature/Controller/DomainsTest.php --- a/src/tests/Feature/Controller/DomainsTest.php +++ b/src/tests/Feature/Controller/DomainsTest.php @@ -47,7 +47,6 @@ ]); Entitlement::create([ - 'owner_id' => $user->id, 'wallet_id' => $user->wallets()->first()->id, 'sku_id' => $sku_domain->id, 'entitleable_id' => $domain->id, @@ -130,7 +129,6 @@ ]); Entitlement::create([ - 'owner_id' => $user->id, 'wallet_id' => $user->wallets()->first()->id, 'sku_id' => $sku_domain->id, 'entitleable_id' => $domain->id, diff --git a/src/tests/Feature/EntitlementTest.php b/src/tests/Feature/EntitlementTest.php --- a/src/tests/Feature/EntitlementTest.php +++ b/src/tests/Feature/EntitlementTest.php @@ -61,8 +61,8 @@ $wallet = $owner->wallets->first(); $this->assertCount(4, $owner->entitlements()->get()); - $this->assertCount(1, $sku_domain->entitlements()->where('owner_id', $owner->id)->get()); - $this->assertCount(2, $sku_mailbox->entitlements()->where('owner_id', $owner->id)->get()); + $this->assertCount(1, $sku_domain->entitlements()->where('wallet_id', $wallet->id)->get()); + $this->assertCount(2, $sku_mailbox->entitlements()->where('wallet_id', $wallet->id)->get()); $this->assertCount(9, $wallet->entitlements); $this->backdateEntitlements($owner->entitlements, Carbon::now()->subMonths(1)); @@ -91,7 +91,7 @@ $sku = \App\Sku::where('title', 'mailbox')->first(); $this->assertNotNull($sku); - $entitlement = Entitlement::where('owner_id', $user->id)->where('sku_id', $sku->id)->first(); + $entitlement = Entitlement::where('wallet_id', $wallet->id)->where('sku_id', $sku->id)->first(); $this->assertNotNull($entitlement); $e_sku = $entitlement->sku; @@ -100,9 +100,6 @@ $e_wallet = $entitlement->wallet; $this->assertSame($wallet->id, $e_wallet->id); - $e_owner = $entitlement->owner; - $this->assertEquals($user->id, $e_owner->id); - $e_entitleable = $entitlement->entitleable; $this->assertEquals($user->id, $e_entitleable->id); $this->assertTrue($e_entitleable instanceof \App\User); diff --git a/src/tests/Feature/UserTest.php b/src/tests/Feature/UserTest.php --- a/src/tests/Feature/UserTest.php +++ b/src/tests/Feature/UserTest.php @@ -197,13 +197,11 @@ $id = $user->id; - $entitlements = \App\Entitlement::where('owner_id', $id)->get(); - $this->assertCount(4, $entitlements); + $this->assertCount(4, $user->entitlements()->get()); $user->delete(); - $entitlements = \App\Entitlement::where('owner_id', $id)->get(); - $this->assertCount(0, $entitlements); + $this->assertCount(0, $user->entitlements()->get()); $this->assertTrue($user->fresh()->trashed()); $this->assertFalse($user->fresh()->isDeleted());