Skip to content

Commit 7843c72

Browse files
committed
fixes
1 parent ca88d0c commit 7843c72

20 files changed

Lines changed: 221 additions & 28 deletions

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
},
3838
"autoload-dev": {
3939
"psr-4": {
40-
"Yuges\\Package\\Tests\\": "tests/src"
40+
"Yuges\\Subscribable\\Tests\\": "tests/src"
4141
}
4242
},
4343
"scripts": {

database/migrations/0000_00_00_000000_create_subscriptions_table.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public function up(): void
2424
Schema::create($this->table, function (Blueprint $table) {
2525
$table->key(Config::getSubscriptionKeyType(KeyType::BigInteger));
2626

27-
$table->morphs('subscriber');
28-
$table->morphs('subscribable');
27+
$table->keyMorphs(Config::getSubscriberKeyType(KeyType::BigInteger), 'subscriber');
28+
$table->keyMorphs(Config::getSubscribableKeyType(KeyType::BigInteger), 'subscribable');
2929
$table
3030
->foreignIdFor(Config::getPlanClass(Plan::class))
3131
->nullable()

src/Actions/CreateSubscriptionAction.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ public function execute(?Subscriber $subscriber = null, ?Plan $plan = null): Sub
4040
];
4141

4242
$subscription = $this->subscribable
43-
->subscriptions()
43+
->subscribableSubscriptions()
4444
->getQuery()
4545
->whereMorphedTo('subscriber', $subscriber)
4646
->first();
4747

48-
return $subscription ?? $this->subscribable->subscriptions()->create($attributes);
48+
return $subscription ?? $this->subscribable->subscribableSubscriptions()->create($attributes);
4949
}
5050

5151
public function validateSubscriber(?Subscriber $subscriber = null): void

src/Actions/DeleteSubscriptionAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function execute(?Subscriber $subscriber = null, ?Plan $plan = null): mix
3333
}
3434

3535
return $this->subscribable
36-
->subscriptions()
36+
->subscribableSubscriptions()
3737
->getQuery()
3838
->whereMorphedTo('subscriber', $subscriber)
3939
->where('plan_id', '=', $plan?->getKey() ?? null)

src/Actions/ToggleSubscriptionAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function execute(?Subscriber $subscriber = null, ?Plan $plan = null): ?Su
3434
}
3535

3636
$subscription = $this->subscribable
37-
->subscriptions()
37+
->subscribableSubscriptions()
3838
->getQuery()
3939
->whereMorphedTo('subscriber', $subscriber)
4040
->where('plan_id', '=', $plan?->getKey() ?? null)

src/Config/Config.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public static function getSubscriptionKeyType(mixed $default = null): KeyType
5353
/** @return class-string<Subscriber> */
5454
public static function getSubscriberDefaultClass(mixed $default = null): string
5555
{
56-
return self::get('models.subscriber.default', $default);
56+
return self::get('models.subscriber.default.class', $default);
5757
}
5858

5959
/** @return Collection<array-key, class-string<Subscriber>> */
@@ -72,7 +72,7 @@ public static function getSubscriberKeyType(mixed $default = null): KeyType
7272
/** @return class-string<Subscribable> */
7373
public static function getSubscribableDefaultClass(mixed $default = null): string
7474
{
75-
return self::get('models.subscribable.default', $default);
75+
return self::get('models.subscribable.default.class', $default);
7676
}
7777

7878
/** @return Collection<array-key, class-string<Subscribable>> */

src/Interfaces/Subscribable.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ interface Subscribable
1111
{
1212
public function subscriptions(): MorphMany;
1313

14+
public function subscribableSubscriptions(): MorphMany;
15+
1416
public function latestSubscription(): MorphOne;
1517

18+
public function latestSubscribableSubscription(): MorphOne;
19+
1620
public function oldestSubscription(): MorphOne;
1721

22+
public function oldestSubscribableSubscription(): MorphOne;
23+
1824
public function subscribe(?Subscriber $subscriber = null, ?Plan $plan = null): Subscription;
1925

2026
public function unsubscribe(?Subscriber $subscriber = null, ?Plan $plan = null): Subscription;

src/Traits/CanSubscribe.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Yuges\Subscribable\Traits;
4+
5+
use Yuges\Subscribable\Config\Config;
6+
use Yuges\Subscribable\Models\Subscription;
7+
use Illuminate\Database\Eloquent\Collection;
8+
use Illuminate\Database\Eloquent\Relations\MorphOne;
9+
use Illuminate\Database\Eloquent\Relations\MorphMany;
10+
11+
/**
12+
* @property Collection<array-key, Subscription> $subscriptions
13+
* @property Collection<array-key, Subscription> $subscriberSubscriptions
14+
* @property ?Subscription $latestSubscription
15+
* @property ?Subscription $latestSubscriberSubscriptions
16+
* @property ?Subscription $oldestSubscription
17+
* @property ?Subscription $oldestSubscriberSubscriptions
18+
*/
19+
trait CanSubscribe
20+
{
21+
public function subscriptions(): MorphMany
22+
{
23+
return $this->subscriberSubscriptions();
24+
}
25+
26+
public function subscriberSubscriptions(): MorphMany
27+
{
28+
return $this->morphMany(Config::getSubscriptionClass(Subscription::class), 'subscriber');
29+
}
30+
31+
public function latestSubscription(): MorphOne
32+
{
33+
return $this->latestSubscriberSubscriptions();
34+
}
35+
36+
public function latestSubscriberSubscriptions(): MorphOne
37+
{
38+
return $this->subscriberSubscriptions()->one()->latestOfMany();
39+
}
40+
41+
public function oldestSubscription(): MorphOne
42+
{
43+
return $this->oldestSubscriberSubscriptions();
44+
}
45+
46+
public function oldestSubscriberSubscriptions(): MorphOne
47+
{
48+
return $this->subscriberSubscriptions()->one()->oldestOfMany();
49+
}
50+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace Yuges\Subscribable\Traits;
4+
5+
trait CanSubscribeAndHasSubscriptions
6+
{
7+
use CanSubscribe, HasSubscriptions {
8+
CanSubscribe::subscriptions insteadof HasSubscriptions;
9+
CanSubscribe::latestSubscription insteadof HasSubscriptions;
10+
CanSubscribe::oldestSubscription insteadof HasSubscriptions;
11+
}
12+
}

src/Traits/HasSubscriptions.php

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,43 @@
1212
use Illuminate\Database\Eloquent\Relations\MorphMany;
1313

1414
/**
15-
* @property Collection<array-key, Subscription> $subscription
15+
* @property Collection<array-key, Subscription> $subscriptions
16+
* @property Collection<array-key, Subscription> $subscribableSubscriptions
1617
* @property ?Subscription $latestSubscription
18+
* @property ?Subscription $latestSubscribableSubscription
1719
* @property ?Subscription $oldestSubscription
20+
* @property ?Subscription $oldestSubscribableSubscription
1821
*/
1922
trait HasSubscriptions
2023
{
2124
public function subscriptions(): MorphMany
25+
{
26+
return $this->subscribableSubscriptions();
27+
}
28+
29+
public function subscribableSubscriptions(): MorphMany
2230
{
2331
return $this->morphMany(Config::getSubscriptionClass(), 'subscribable');
2432
}
2533

2634
public function latestSubscription(): MorphOne
2735
{
28-
return $this->subscriptions()->one()->latestOfMany();
36+
return $this->latestSubscribableSubscription();
37+
}
38+
39+
public function latestSubscribableSubscription(): MorphOne
40+
{
41+
return $this->subscribableSubscriptions()->one()->latestOfMany();
2942
}
3043

3144
public function oldestSubscription(): MorphOne
3245
{
33-
return $this->subscriptions()->one()->oldestOfMany();
46+
return $this->oldestSubscribableSubscription();
47+
}
48+
49+
public function oldestSubscribableSubscription(): MorphOne
50+
{
51+
return $this->subscribableSubscriptions()->one()->oldestOfMany();
3452
}
3553

3654
public function subscribe(?Subscriber $subscriber = null, ?Plan $plan = null): Subscription

0 commit comments

Comments
 (0)