From 57c695e976957d5598c3b4a9354fa1b7dacf76fa Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Sun, 3 Dec 2023 15:02:48 +0100 Subject: [PATCH] Flush cache on subscription changes --- app/Models/Billing/Subscription.php | 21 +++++++++++++++++++++ app/Models/License.php | 14 ++++++++++++++ app/Models/User.php | 19 ++++++++++++++++--- app/Policies/FormPolicy.php | 10 +++++----- app/Policies/WorkspacePolicy.php | 2 +- app/Providers/AppServiceProvider.php | 2 ++ 6 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 app/Models/Billing/Subscription.php diff --git a/app/Models/Billing/Subscription.php b/app/Models/Billing/Subscription.php new file mode 100644 index 0000000..e20d613 --- /dev/null +++ b/app/Models/Billing/Subscription.php @@ -0,0 +1,21 @@ +user->flushCache(); + }); + static::deleted(function (Subscription $sub) { + $sub->user->flushCache(); + }); + } +} diff --git a/app/Models/License.php b/app/Models/License.php index 5102737..c0e55dc 100644 --- a/app/Models/License.php +++ b/app/Models/License.php @@ -51,4 +51,18 @@ class License extends Model 3 => null, ][$this->meta['tier']]; } + + public static function booted(): void + { + static::saved(function (License $license) { + if ($license->user) { + $license->user->flushCache(); + } + }); + static::deleted(function (License $license) { + if ($license->user) { + $license->user->flushCache(); + } + }); + } } diff --git a/app/Models/User.php b/app/Models/User.php index a7c3127..492aa1b 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,9 +2,7 @@ namespace App\Models; -use App\Http\Controllers\SubscriptionController; use App\Models\Forms\Form; -use App\Models\Template; use App\Notifications\ResetPassword; use App\Notifications\VerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -61,7 +59,12 @@ class User extends Authenticatable implements JWTSubject public function ownsForm(Form $form) { - return $this->workspaces()->find($form->workspace_id) !== null; + return $this->workspaces()->whereUserId($form->workspace_id)->exists(); + } + + public function ownsWorkspace(Workspace $workspace) + { + return $this->workspaces()->whereUserId($workspace->id)->exists(); } /** @@ -203,6 +206,16 @@ class User extends Authenticatable implements JWTSubject })->first()?->onTrial(); } + public function flushCache() + { + $this->workspaces()->with('forms')->get()->each(function (Workspace $workspace) { + $workspace->flush(); + $workspace->forms->each(function (Form $form) { + $form->flush(); + }); + }); + } + public static function boot() { parent::boot(); diff --git a/app/Policies/FormPolicy.php b/app/Policies/FormPolicy.php index 5a06b39..359d324 100644 --- a/app/Policies/FormPolicy.php +++ b/app/Policies/FormPolicy.php @@ -30,7 +30,7 @@ class FormPolicy */ public function view(User $user, Form $form) { - return $user->workspaces()->find($form->workspace_id) !== null; + return $user->ownsForm($form); } /** @@ -53,7 +53,7 @@ class FormPolicy */ public function update(User $user, Form $form) { - return $user->workspaces()->find($form->workspace_id) !== null; + return $user->ownsForm($form); } /** @@ -65,7 +65,7 @@ class FormPolicy */ public function delete(User $user, Form $form) { - return $user->workspaces()->find($form->workspace_id) !== null; + return $user->ownsForm($form); } /** @@ -77,7 +77,7 @@ class FormPolicy */ public function restore(User $user, Form $form) { - return $user->workspaces()->find($form->workspace_id) !== null; + return $user->ownsForm($form); } /** @@ -89,6 +89,6 @@ class FormPolicy */ public function forceDelete(User $user, Form $form) { - return $user->workspaces()->find($form->workspace_id) !== null; + return $user->ownsForm($form); } } diff --git a/app/Policies/WorkspacePolicy.php b/app/Policies/WorkspacePolicy.php index 4a237d8..23b6f13 100644 --- a/app/Policies/WorkspacePolicy.php +++ b/app/Policies/WorkspacePolicy.php @@ -30,7 +30,7 @@ class WorkspacePolicy */ public function view(User $user, Workspace $workspace) { - return $workspace->users()->find($user->id)!==null; + return $user->ownsWorkspace($workspace); } /** diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index dd0a30f..3fa5d1a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Models\Billing\Subscription; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; @@ -31,6 +32,7 @@ class AppServiceProvider extends ServiceProvider JsonResource::withoutWrapping(); Cashier::calculateTaxes(); + Cashier::useSubscriptionModel(Subscription::class); if ($this->app->runningUnitTests()) { Schema::defaultStringLength(191);