diff --git a/app/Livewire/Server/Create.php b/app/Livewire/Server/Create.php index 147128457..2f30caf0e 100644 --- a/app/Livewire/Server/Create.php +++ b/app/Livewire/Server/Create.php @@ -3,6 +3,7 @@ namespace App\Livewire\Server; use App\Models\PrivateKey; +use App\Models\Team; use Livewire\Component; class Create extends Component @@ -16,11 +17,7 @@ class Create extends Component $this->limit_reached = false; return; } - $team = currentTeam(); - $servers = $team->servers->count(); - ['serverLimit' => $serverLimit] = $team->limits; - - $this->limit_reached = $servers >= $serverLimit; + $this->limit_reached = Team::serverLimitReached(); } public function render() { diff --git a/app/Livewire/Server/New/ByIp.php b/app/Livewire/Server/New/ByIp.php index cd0166c54..9799443c7 100644 --- a/app/Livewire/Server/New/ByIp.php +++ b/app/Livewire/Server/New/ByIp.php @@ -5,6 +5,7 @@ namespace App\Livewire\Server\New; use App\Enums\ProxyStatus; use App\Enums\ProxyTypes; use App\Models\Server; +use App\Models\Team; use Livewire\Component; class ByIp extends Component @@ -76,6 +77,9 @@ class ByIp extends Component if (is_null($this->private_key_id)) { return $this->dispatch('error', 'You must select a private key'); } + if (Team::serverLimitReached()) { + return $this->dispatch('error', 'You have reached the server limit for your subscription.'); + } $payload = [ 'name' => $this->name, 'description' => $this->description, diff --git a/app/Livewire/Subscription/Actions.php b/app/Livewire/Subscription/Actions.php index 3050e38ab..90643e01a 100644 --- a/app/Livewire/Subscription/Actions.php +++ b/app/Livewire/Subscription/Actions.php @@ -2,6 +2,7 @@ namespace App\Livewire\Subscription; +use App\Models\Team; use Illuminate\Support\Facades\Http; use Livewire\Component; @@ -10,9 +11,7 @@ class Actions extends Component public $server_limits = 0; public function mount() { - $limits = currentTeam()->limits; - $this->server_limits = data_get($limits, 'serverLimit', 0); - + $this->server_limits = Team::serverLimit(); } public function cancel() { diff --git a/app/Models/Team.php b/app/Models/Team.php index 042f74789..17e5e9ac6 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -49,6 +49,16 @@ class Team extends Model implements SendsDiscord, SendsEmail return explode(',', $recipients); } + static public function serverLimitReached() { + $serverLimit = Team::serverLimit(); + $team = currentTeam(); + $servers = $team->servers->count(); + return $servers >= $serverLimit; + } + static public function serverLimit() + { + return data_get(Team::find(currentTeam()->id), 'limits.serverLimit', 0); + } public function limits(): Attribute { return Attribute::make( @@ -63,14 +73,19 @@ class Team extends Model implements SendsDiscord, SendsEmail $subscription = $subscription->type(); } } - $serverLimit = config('constants.limits.server')[strtolower($subscription)]; + if ($this->custom_server_limit) { + $serverLimit = $this->custom_server_limit; + } else { + $serverLimit = config('constants.limits.server')[strtolower($subscription)]; + } $sharedEmailEnabled = config('constants.limits.email')[strtolower($subscription)]; return ['serverLimit' => $serverLimit, 'sharedEmailEnabled' => $sharedEmailEnabled]; } ); } - public function environment_variables() { + public function environment_variables() + { return $this->hasMany(SharedEnvironmentVariable::class)->whereNull('project_id')->whereNull('environment_id'); } public function members() @@ -130,7 +145,8 @@ class Team extends Model implements SendsDiscord, SendsEmail { return $this->hasMany(S3Storage::class)->where('is_usable', true); } - public function trialEnded() { + public function trialEnded() + { foreach ($this->servers as $server) { $server->settings()->update([ 'is_usable' => false, @@ -138,7 +154,8 @@ class Team extends Model implements SendsDiscord, SendsEmail ]); } } - public function trialEndedButSubscribed() { + public function trialEndedButSubscribed() + { foreach ($this->servers as $server) { $server->settings()->update([ 'is_usable' => true, diff --git a/database/migrations/2024_02_23_143119_add_custom_server_limits_to_teams_ultimate.php b/database/migrations/2024_02_23_143119_add_custom_server_limits_to_teams_ultimate.php new file mode 100644 index 000000000..7e1fe67f5 --- /dev/null +++ b/database/migrations/2024_02_23_143119_add_custom_server_limits_to_teams_ultimate.php @@ -0,0 +1,28 @@ +integer('custom_server_limit')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('teams', function (Blueprint $table) { + $table->dropColumn('custom_server_limit'); + }); + } +}; diff --git a/resources/views/components/limit-reached.blade.php b/resources/views/components/limit-reached.blade.php index f5477cff2..4d44b4328 100644 --- a/resources/views/components/limit-reached.blade.php +++ b/resources/views/components/limit-reached.blade.php @@ -1,6 +1,6 @@
You have reached the limit of {{ $name }} you can create. - Please upgrade your + Please upgrade your subscription to create more {{ $name }}.