fix: should note delete personal teams

This commit is contained in:
Andras Bacsai 2024-03-05 09:19:15 +01:00
parent f3a279be26
commit 2ffc3f497b
7 changed files with 76 additions and 50 deletions

View File

@ -12,6 +12,10 @@ class DecideWhatToDoWithUser
{ {
public function handle(Request $request, Closure $next): Response public function handle(Request $request, Closure $next): Response
{ {
if (auth()?->user()?->teams?->count() === 0) {
$currentTeam = auth()->user()?->recreate_personal_team();
refreshSession($currentTeam);
}
if(auth()?->user()?->currentTeam()){ if(auth()?->user()?->currentTeam()){
refreshSession(auth()->user()->currentTeam()); refreshSession(auth()->user()->currentTeam());
} }

View File

@ -45,6 +45,7 @@ class Logs extends Component
} }
public function mount() public function mount()
{ {
try {
$this->containers = collect(); $this->containers = collect();
$this->servers = collect(); $this->servers = collect();
$this->parameters = get_route_parameters(); $this->parameters = get_route_parameters();
@ -100,6 +101,9 @@ class Logs extends Component
$this->servers = $this->servers->push($this->resource->server); $this->servers = $this->servers->push($this->resource->server);
} }
} }
} catch (\Exception $e) {
return handleError($e, $this);
}
} }
public function render() public function render()

View File

@ -144,7 +144,6 @@ class Team extends Model implements SendsDiscord, SendsEmail
$sources = collect([]); $sources = collect([]);
$github_apps = $this->hasMany(GithubApp::class)->whereisPublic(false)->get(); $github_apps = $this->hasMany(GithubApp::class)->whereisPublic(false)->get();
$gitlab_apps = $this->hasMany(GitlabApp::class)->whereisPublic(false)->get(); $gitlab_apps = $this->hasMany(GitlabApp::class)->whereisPublic(false)->get();
// $bitbucket_apps = $this->hasMany(BitbucketApp::class)->get();
$sources = $sources->merge($github_apps)->merge($gitlab_apps); $sources = $sources->merge($github_apps)->merge($gitlab_apps);
return $sources; return $sources;
} }

View File

@ -26,6 +26,7 @@ class TeamInvitation extends Model
return true; return true;
} else { } else {
$this->delete(); $this->delete();
return false;
} }
} }
} }

View File

@ -50,6 +50,21 @@ class User extends Authenticatable implements SendsEmail
$user->teams()->attach($new_team, ['role' => 'owner']); $user->teams()->attach($new_team, ['role' => 'owner']);
}); });
} }
public function recreate_personal_team()
{
$team = [
'name' => $this->name . "'s Team",
'personal_team' => true,
'show_boarding' => true
];
if ($this->id === 0) {
$team['id'] = 0;
$team['name'] = 'Root Team';
}
$new_team = Team::create($team);
$this->teams()->attach($new_team, ['role' => 'owner']);
return $new_team;
}
public function createToken(string $name, array $abilities = ['*'], DateTimeInterface $expiresAt = null) public function createToken(string $name, array $abilities = ['*'], DateTimeInterface $expiresAt = null)
{ {
$plainTextToken = sprintf( $plainTextToken = sprintf(

View File

@ -8,14 +8,12 @@ use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation; use App\Actions\Fortify\UpdateUserProfileInformation;
use App\Models\InstanceSettings; use App\Models\InstanceSettings;
use App\Models\User; use App\Models\User;
use App\Models\Waitlist;
use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Laravel\Fortify\Contracts\RegisterResponse; use Laravel\Fortify\Contracts\RegisterResponse;
use Laravel\Fortify\Features;
use Laravel\Fortify\Fortify; use Laravel\Fortify\Fortify;
class FortifyServiceProvider extends ServiceProvider class FortifyServiceProvider extends ServiceProvider
@ -76,7 +74,11 @@ class FortifyServiceProvider extends ServiceProvider
) { ) {
$user->updated_at = now(); $user->updated_at = now();
$user->save(); $user->save();
session(['currentTeam' => $user->currentTeam = $user->teams->firstWhere('personal_team', true)]); $user->currentTeam = $user->teams->firstWhere('personal_team', true);
if (!$user->currentTeam) {
$user->currentTeam = $user->recreate_personal_team();
}
session(['currentTeam' => $user->currentTeam]);
return $user; return $user;
} }
}); });

View File

@ -20,10 +20,11 @@
<h4 class="pb-4">Delete Team</h4> <h4 class="pb-4">Delete Team</h4>
@if (session('currentTeam.id') === 0) @if (session('currentTeam.id') === 0)
<div>This is the default team. You can't delete it.</div> <div>This is the default team. You can't delete it.</div>
@elseif(auth()->user()->teams()->get()->count() === 1) @elseif(auth()->user()->teams()->get()->count() === 1 || auth()->user()->currentTeam()->personal_team)
<div>You can't delete your last team.</div> <div>You can't delete your last / personal team.</div>
@elseif(currentTeam()->subscription && currentTeam()->subscription?->lemon_status !== 'cancelled') @elseif(currentTeam()->subscription && currentTeam()->subscription?->lemon_status !== 'cancelled')
<div>Please cancel your subscription <a class="text-white underline" href="{{route('subscription.show')}}">here</a> before delete this team.</div> <div>Please cancel your subscription <a class="text-white underline"
href="{{ route('subscription.show') }}">here</a> before delete this team.</div>
@else @else
@if (currentTeam()->isEmpty()) @if (currentTeam()->isEmpty())
<div class="pb-4">This will delete your team. Beware! There is no coming back!</div> <div class="pb-4">This will delete your team. Beware! There is no coming back!</div>