trypost/app/Http/Controllers/Auth/AcceptInviteController.php
Paulo Castellano 8689e54e55 refactor: restructure to Actions, subdomain routes (app/api), API tokens
- Extract business logic from controllers into Action classes:
  Post/, Workspace/, Hashtag/, Label/, Invite/, ApiKey/
- Create subdomain routing: app.trypost.test (Inertia dashboard),
  api.trypost.test (REST API with token auth)
- Add ApiToken model with tp_ prefix, token_lookup/hash auth
- Add AuthenticateApiToken middleware for API authentication
- Create Api controllers with JSON Resources for all entities
- Create App controllers that use Actions + Inertia responses
- Organize Form Requests into Api/ and App/ directories
- Add api_tokens migration
- Update all route names with app. prefix
- Update all tests to use new route names (684 passing)
2026-03-29 19:24:28 -03:00

97 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\WorkspaceInvite;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Inertia\Response;
class AcceptInviteController extends Controller
{
/**
* Display the invite view.
*/
public function show(WorkspaceInvite $invite): Response
{
$invite->load('workspace');
return Inertia::render('auth/AcceptInvite', [
'invite' => [
'id' => $invite->id,
'email' => $invite->email,
'role' => [
'value' => $invite->role->value,
'label' => $invite->role->label(),
],
'workspace' => [
'id' => $invite->workspace->id,
'name' => $invite->workspace->name,
],
],
]);
}
/**
* Accept the invite.
*/
public function accept(Request $request, WorkspaceInvite $invite): RedirectResponse
{
$user = $request->user();
// Verify the invite is for this user
if ($invite->email !== $user->email) {
session()->flash('flash.banner', __('settings.members.flash.wrong_email'));
session()->flash('flash.bannerStyle', 'danger');
return redirect()->route('app.calendar');
}
// Check if already a member
if ($invite->workspace->hasMember($user)) {
$invite->delete();
session()->flash('flash.banner', __('settings.members.flash.already_member'));
session()->flash('flash.bannerStyle', 'info');
return redirect()->route('app.calendar');
}
// Accept the invite
$workspaceId = $invite->workspace_id;
$invite->accept($user);
$user->update(['current_workspace_id' => $workspaceId]);
session()->flash('flash.banner', __('settings.members.flash.invite_accepted'));
session()->flash('flash.bannerStyle', 'success');
return redirect()->route('app.calendar');
}
/**
* Decline the invite.
*/
public function decline(Request $request, WorkspaceInvite $invite): RedirectResponse
{
$user = $request->user();
// Verify the invite is for this user
if ($invite->email !== $user->email) {
session()->flash('flash.banner', __('settings.members.flash.wrong_email'));
session()->flash('flash.bannerStyle', 'danger');
return redirect()->route('app.calendar');
}
$invite->delete();
session()->flash('flash.banner', __('settings.members.flash.invite_declined'));
session()->flash('flash.bannerStyle', 'info');
return redirect()->route('app.calendar');
}
}