Refactor Inertia responses to use resources
linter / quality (pull_request) Successful in 1m15s
tests / ci (8.4) (pull_request) Successful in 1m29s

This commit is contained in:
Eric Peters
2026-04-15 18:09:08 +02:00
parent 5a7972df7c
commit 017cff5437
38 changed files with 1125 additions and 382 deletions
@@ -5,6 +5,8 @@ namespace App\Http\Controllers\Admin;
use App\Actions\Permissions\PermissionService;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\SyncUserGlobalPermissionsRequest;
use App\Http\Resources\PermissionOptionResource;
use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Arr;
@@ -21,11 +23,15 @@ class UserManagementController extends Controller
{
return Inertia::render('admin/users/Index', [
'directPermissions' => $this->permissionService->assignmentMap(User::class),
'permissionOptions' => $this->permissionService->permissionOptions(User::class, null),
'permissionOptions' => PermissionOptionResource::collection(
$this->permissionService->permissionOptions(User::class, null),
)->resolve(),
'status' => session('status'),
'users' => User::query()
->orderBy('name')
->get(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}
@@ -3,11 +3,12 @@
namespace App\Http\Controllers;
use App\Actions\Permissions\PermissionService;
use App\Actions\Projects\BuildProjectBoardPageProps;
use App\Actions\Tickets\CreateTicketWorklogEntry;
use App\Enums\Permission;
use App\Enums\TicketWorklogEntryType;
use App\Http\Requests\MoveProjectTicketRequest;
use App\Http\Resources\BoardColumnResource;
use App\Http\Resources\ProjectResource;
use App\Models\Project;
use App\Models\Ticket;
use App\Models\TicketStatus;
@@ -20,7 +21,6 @@ use Inertia\Response;
class ProjectBoardController extends Controller
{
public function __construct(
private readonly BuildProjectBoardPageProps $buildProjectBoardPageProps,
private readonly CreateTicketWorklogEntry $createTicketWorklogEntry,
private readonly PermissionService $permissionService,
) {}
@@ -34,12 +34,28 @@ class ProjectBoardController extends Controller
403,
);
return Inertia::render('projects/Board', $this->buildProjectBoardPageProps->handle(
$project,
$this->permissionService->allows($user, Permission::ProjectWrite, $project),
$this->permissionService->allows($user, Permission::ProjectWrite, $project),
session('status'),
));
$canManageTickets = $this->permissionService->allows($user, Permission::ProjectWrite, $project);
return Inertia::render('projects/Board', [
'boardColumns' => BoardColumnResource::collection(
$project->boardColumns()
->with([
'ticketStatuses',
'tickets' => fn ($query) => $query
->with([
'ticketPriority',
'ticketStatus.allowedTargetStatuses.boardColumn',
'ticketStatus.boardColumn',
'ticketType',
]),
])
->get(),
)->resolve(),
'canCreateTickets' => $canManageTickets,
'canEditTickets' => $canManageTickets,
'project' => ProjectResource::make($project)->resolve(),
'status' => session('status'),
]);
}
public function move(
@@ -9,6 +9,9 @@ use App\Http\Requests\StoreTicketStatusRequest;
use App\Http\Requests\UpdateBoardColumnRequest;
use App\Http\Requests\UpdateTicketStatusRequest;
use App\Http\Requests\UpdateTicketStatusTransitionsRequest;
use App\Http\Resources\BoardColumnResource;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\TicketStatusResource;
use App\Models\BoardColumn;
use App\Models\Project;
use App\Models\TicketStatus;
@@ -35,17 +38,23 @@ class ProjectBoardSettingsController extends Controller
);
return Inertia::render('projects/settings/Board', [
'backlogTicketStatuses' => $project->ticketStatuses()
->whereNull('board_column_id')
->get(),
'boardColumns' => $project->boardColumns()
->with('ticketStatuses')
->get(),
'project' => $project,
'backlogTicketStatuses' => TicketStatusResource::collection(
$project->ticketStatuses()
->whereNull('board_column_id')
->get(),
)->resolve(),
'boardColumns' => BoardColumnResource::collection(
$project->boardColumns()
->with('ticketStatuses')
->get(),
)->resolve(),
'project' => ProjectResource::make($project)->resolve(),
'status' => session('status'),
'ticketStatuses' => $project->ticketStatuses()
->with(['allowedTargetStatuses.boardColumn', 'boardColumn'])
->get(),
'ticketStatuses' => TicketStatusResource::collection(
$project->ticketStatuses()
->with(['allowedTargetStatuses.boardColumn', 'boardColumn'])
->get(),
)->resolve(),
]);
}
+66 -30
View File
@@ -3,14 +3,22 @@
namespace App\Http\Controllers;
use App\Actions\Permissions\PermissionService;
use App\Actions\Projects\BuildProjectBacklogPageProps;
use App\Actions\ProjectTicketMetadata\InitializeProjectTicketMetadata;
use App\Enums\Permission;
use App\Http\Requests\DeleteProjectRequest;
use App\Http\Requests\StoreProjectRequest;
use App\Http\Requests\SyncProjectPermissionsRequest;
use App\Http\Resources\PermissionOptionResource;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\TeamResource;
use App\Http\Resources\TicketPriorityResource;
use App\Http\Resources\TicketResource;
use App\Http\Resources\TicketStatusResource;
use App\Http\Resources\TicketTypeResource;
use App\Http\Resources\UserResource;
use App\Models\Project;
use App\Models\Team;
use App\Models\Ticket;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -21,7 +29,6 @@ use Inertia\Response;
class ProjectController extends Controller
{
public function __construct(
private readonly BuildProjectBacklogPageProps $buildProjectBacklogPageProps,
private readonly InitializeProjectTicketMetadata $initializeProjectTicketMetadata,
private readonly PermissionService $permissionService,
) {}
@@ -38,7 +45,7 @@ class ProjectController extends Controller
if ($viewableProjectIds === []) {
return Inertia::render('projects/Index', [
'projects' => [],
'projects' => ProjectResource::collection(collect())->resolve(),
'status' => session('status'),
]);
}
@@ -47,8 +54,7 @@ class ProjectController extends Controller
}
return Inertia::render('projects/Index', [
'projects' => $projectQuery
->get(),
'projects' => ProjectResource::collection($projectQuery->get())->resolve(),
'status' => session('status'),
]);
}
@@ -83,7 +89,7 @@ class ProjectController extends Controller
return Inertia::render('projects/Show', [
'canManageAccess' => $this->permissionService->allows($user, Permission::ProjectAdmin, $project),
'project' => $project,
'project' => ProjectResource::make($project)->resolve(),
]);
}
@@ -96,18 +102,50 @@ class ProjectController extends Controller
403,
);
return Inertia::render('projects/Backlog', $this->buildProjectBacklogPageProps->handle(
$project,
$this->permissionService->allows($user, Permission::ProjectWrite, $project),
$this->permissionService->allows($user, Permission::ProjectWrite, $project),
session('status'),
));
$canManageTickets = $this->permissionService->allows($user, Permission::ProjectWrite, $project);
return Inertia::render('projects/Backlog', [
'backlogTicketStatuses' => TicketStatusResource::collection(
$project->ticketStatuses()
->whereNull('board_column_id')
->get(),
)->resolve(),
'canCreateTickets' => $canManageTickets,
'canEditTickets' => $canManageTickets,
'project' => ProjectResource::make($project)->resolve(),
'status' => session('status'),
'ticketStatusOptions' => TicketStatusResource::collection(
$project->ticketStatuses()
->with('boardColumn')
->get(),
)->resolve(),
'ticketPriorities' => TicketPriorityResource::collection($project->ticketPriorities()->get())->resolve(),
'ticketTypes' => TicketTypeResource::collection($project->ticketTypes()->get())->resolve(),
'tickets' => TicketResource::collection(
Ticket::query()
->with([
'ticketPriority',
'ticketStatus.allowedTargetStatuses.boardColumn',
'ticketStatus.boardColumn',
'ticketType',
])
->where('project_id', $project->id)
->whereHas('ticketStatus', fn ($query) => $query->whereNull('board_column_id'))
->orderByDesc('sequence_number')
->get(),
)->resolve(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}
public function general(Request $request, Project $project): Response
{
return Inertia::render('projects/settings/General', [
'project' => $project,
'project' => ProjectResource::make($project)->resolve(),
'status' => session('status'),
]);
}
@@ -122,25 +160,23 @@ class ProjectController extends Controller
return Inertia::render('projects/Access', [
'directPermissions' => $this->permissionService->assignmentMap(User::class, $project),
'permissionOptions' => $this->permissionService->permissionOptions(User::class, Project::class),
'project' => $project,
'permissionOptions' => PermissionOptionResource::collection(
$this->permissionService->permissionOptions(User::class, Project::class),
)->resolve(),
'project' => ProjectResource::make($project)->resolve(),
'status' => session('status'),
'teamPermissions' => $this->permissionService->assignmentMap(Team::class, $project),
'teams' => Team::query()
->with('users')
->orderBy('name')
->get()
->map(fn (Team $team): array => [
'id' => $team->id,
'name' => $team->name,
'created_at' => $team->created_at?->toISOString(),
'updated_at' => $team->updated_at?->toISOString(),
'user_ids' => $team->users->modelKeys(),
'users' => $team->users->values(),
]),
'users' => User::query()
->orderBy('name')
->get(),
'teams' => TeamResource::collection(
Team::query()
->with('users')
->orderBy('name')
->get(),
)->resolve(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}
@@ -8,6 +8,9 @@ use App\Actions\Permissions\PermissionService;
use App\Enums\Permission;
use App\Http\Requests\StoreRepositoryConnectionRequest;
use App\Http\Requests\UpdateRepositoryConnectionRequest;
use App\Http\Resources\AvailableGitRepositorySourceResource;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\RepositoryConnectionResource;
use App\Models\Project;
use App\Models\RepositoryConnection;
use App\Models\User;
@@ -36,27 +39,21 @@ class ProjectRepositorySettingsController extends Controller
403,
);
$repositoryConnections = $project->repositoryConnections()
->get()
->each(function (RepositoryConnection $repositoryConnection) use ($user): void {
$repositoryConnection->setAttribute(
'has_personal_access',
$this->hasPersonalAccess($user, $repositoryConnection),
);
});
return Inertia::render('projects/settings/Repositories', [
'availableRepositorySources' => $this->availableRepositorySources($user),
'project' => $project,
'repositoryConnections' => $project->repositoryConnections()
->get()
->map(fn (RepositoryConnection $repositoryConnection): array => [
'base_url' => $repositoryConnection->base_url,
'created_at' => $repositoryConnection->created_at?->toISOString(),
'has_personal_access' => $this->hasPersonalAccess($user, $repositoryConnection),
'id' => $repositoryConnection->id,
'owner_name' => $repositoryConnection->owner_name,
'project_id' => $repositoryConnection->project_id,
'provider' => $repositoryConnection->provider->value,
'provider_label' => $repositoryConnection->provider->label(),
'provider_repository_id' => $repositoryConnection->provider_repository_id,
'repository_full_name' => $repositoryConnection->repository_full_name,
'repository_name' => $repositoryConnection->repository_name,
'repository_url' => $repositoryConnection->repository_url,
'updated_at' => $repositoryConnection->updated_at?->toISOString(),
])
->values(),
'availableRepositorySources' => AvailableGitRepositorySourceResource::collection(
$this->availableRepositorySources($user),
)->resolve(),
'project' => ProjectResource::make($project)->resolve(),
'repositoryConnections' => RepositoryConnectionResource::collection($repositoryConnections)->resolve(),
'status' => session('status'),
]);
}
+84 -127
View File
@@ -6,12 +6,24 @@ use App\Actions\Git\BuildSuggestedTicketBranchName;
use App\Actions\Git\ResolveTicketBranchMatches;
use App\Actions\Git\ResolveTicketPullRequestMatches;
use App\Actions\Permissions\PermissionService;
use App\Actions\Tickets\BuildProjectTicketUpdateAttributes;
use App\Actions\Tickets\CreateProjectTicket;
use App\Actions\Tickets\UpdateProjectTicket;
use App\Enums\Permission;
use App\Http\Requests\StoreProjectTicketRequest;
use App\Http\Requests\UpdateProjectTicketRequest;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\TicketFieldDefinitionResource;
use App\Http\Resources\TicketLinkResource;
use App\Http\Resources\TicketLinkTypeResource;
use App\Http\Resources\TicketPriorityResource;
use App\Http\Resources\TicketReferenceResource;
use App\Http\Resources\TicketRepositoryBranchResource;
use App\Http\Resources\TicketRepositoryPullRequestResource;
use App\Http\Resources\TicketResource;
use App\Http\Resources\TicketStatusResource;
use App\Http\Resources\TicketTreeNodeResource;
use App\Http\Resources\TicketTypeResource;
use App\Http\Resources\UserResource;
use App\Models\Project;
use App\Models\Ticket;
use App\Models\TicketLink;
@@ -25,7 +37,6 @@ use Inertia\Response;
class ProjectTicketController extends Controller
{
public function __construct(
private readonly BuildProjectTicketUpdateAttributes $buildProjectTicketUpdateAttributes,
private readonly BuildSuggestedTicketBranchName $buildSuggestedTicketBranchName,
private readonly CreateProjectTicket $createProjectTicket,
private readonly PermissionService $permissionService,
@@ -54,17 +65,21 @@ class ProjectTicketController extends Controller
return Inertia::render('projects/TicketCreate', [
'defaultTicketStatusId' => $defaultTicketStatus?->id,
'project' => $project,
'project' => ProjectResource::make($project)->resolve(),
'source' => $source,
'status' => session('status'),
'ticketPriorities' => $project->ticketPriorities()->get(),
'ticketStatusOptions' => $project->ticketStatuses()
->with('boardColumn')
->get(),
'ticketTypes' => $project->ticketTypes()->get(),
'users' => User::query()
->orderBy('name')
->get(),
'ticketPriorities' => TicketPriorityResource::collection($project->ticketPriorities()->get())->resolve(),
'ticketStatusOptions' => TicketStatusResource::collection(
$project->ticketStatuses()
->with('boardColumn')
->get(),
)->resolve(),
'ticketTypes' => TicketTypeResource::collection($project->ticketTypes()->get())->resolve(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}
@@ -118,50 +133,65 @@ class ProjectTicketController extends Controller
return Inertia::render('projects/Ticket', [
'canEditTicket' => $canEditTicket,
'canManageProject' => $canManageProject,
'childTicketTree' => $this->buildChildTicketTree($ticket),
'linkedTickets' => $this->linkedTickets($ticket),
'parentTicketOptions' => Ticket::query()
->where('project_id', $project->id)
->whereKeyNot($ticket->id)
->whereHas('ticketType', fn ($query) => $query->where('is_parent', true))
->orderByDesc('sequence_number')
->get()
->map(fn (Ticket $parentTicket): array => [
'id' => $parentTicket->id,
'ticket_key' => $parentTicket->ticket_key,
'title' => $parentTicket->title,
]),
'project' => $project,
'repositoryBranches' => $this->resolveTicketBranchMatches->handle(
$user,
$project,
$ticket,
),
'repositoryPullRequests' => $this->resolveTicketPullRequestMatches->handle(
$user,
$project,
$ticket,
),
'childTicketTree' => TicketTreeNodeResource::collection(
$ticket->childTickets()
->with('ticketType')
->get(),
)->resolve(),
'linkedTickets' => TicketLinkResource::collection(
TicketLink::query()
->with(['sourceTicket', 'targetTicket', 'ticketLinkType'])
->where(function ($query) use ($ticket): void {
$query
->where('source_ticket_id', $ticket->id)
->orWhere('target_ticket_id', $ticket->id);
})
->orderBy('id')
->get()
->each(fn (TicketLink $ticketLink) => $ticketLink->setAttribute('current_ticket_id', $ticket->id)),
)->resolve(),
'parentTicketOptions' => TicketReferenceResource::collection(
Ticket::query()
->where('project_id', $project->id)
->whereKeyNot($ticket->id)
->whereHas('ticketType', fn ($query) => $query->where('is_parent', true))
->orderByDesc('sequence_number')
->get(),
)->resolve(),
'project' => ProjectResource::make($project)->resolve(),
'repositoryBranches' => TicketRepositoryBranchResource::collection(
$this->resolveTicketBranchMatches->handle(
$user,
$project,
$ticket,
),
)->resolve(),
'repositoryPullRequests' => TicketRepositoryPullRequestResource::collection(
$this->resolveTicketPullRequestMatches->handle(
$user,
$project,
$ticket,
),
)->resolve(),
'status' => session('status'),
'suggestedBranchName' => $this->buildSuggestedTicketBranchName->handle($ticket),
'ticket' => $displayTicket,
'ticketFieldDefinitions' => $project->ticketFieldDefinitions()->get(),
'ticketLinkOptions' => Ticket::query()
->where('project_id', $project->id)
->whereKeyNot($ticket->id)
->orderByDesc('sequence_number')
->get()
->map(fn (Ticket $linkedTicket): array => [
'id' => $linkedTicket->id,
'ticket_key' => $linkedTicket->ticket_key,
'title' => $linkedTicket->title,
]),
'ticketLinkTypes' => $project->ticketLinkTypes()->get(),
'ticketPriorities' => $project->ticketPriorities()->get(),
'ticketTypes' => $project->ticketTypes()->get(),
'users' => User::query()
->orderBy('name')
->get(),
'ticket' => TicketResource::make($displayTicket)->resolve(),
'ticketFieldDefinitions' => TicketFieldDefinitionResource::collection($project->ticketFieldDefinitions()->get())->resolve(),
'ticketLinkOptions' => TicketReferenceResource::collection(
Ticket::query()
->where('project_id', $project->id)
->whereKeyNot($ticket->id)
->orderByDesc('sequence_number')
->get(),
)->resolve(),
'ticketLinkTypes' => TicketLinkTypeResource::collection($project->ticketLinkTypes()->get())->resolve(),
'ticketPriorities' => TicketPriorityResource::collection($project->ticketPriorities()->get())->resolve(),
'ticketTypes' => TicketTypeResource::collection($project->ticketTypes()->get())->resolve(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}
@@ -178,14 +208,11 @@ class ProjectTicketController extends Controller
);
$validated = $request->validated();
$fieldValues = Arr::get($validated, 'field_values', []);
$ticketAttributes = $this->buildProjectTicketUpdateAttributes->handle($ticket, $validated);
$wasUpdated = $this->updateProjectTicket->handle(
$ticket,
$user,
$ticketAttributes,
$fieldValues,
$validated,
);
$statusMessage = $wasUpdated
@@ -195,74 +222,4 @@ class ProjectTicketController extends Controller
return to_route('projects.tickets.show', [$project, $ticket])
->with('status', $statusMessage);
}
/**
* @return array<int, array{
* children: array<int, mixed>,
* id: int,
* ticket_key: string,
* ticket_type_name: string|null,
* title: string
* }>
*/
private function buildChildTicketTree(Ticket $ticket): array
{
return $ticket->childTickets()
->with('ticketType')
->get()
->map(fn (Ticket $childTicket): array => [
'children' => $this->buildChildTicketTree($childTicket),
'id' => $childTicket->id,
'ticket_key' => $childTicket->ticket_key,
'ticket_type_name' => $childTicket->ticketType?->name,
'title' => $childTicket->title,
])
->all();
}
/**
* @return array<int, array{
* created_at: string|null,
* id: int,
* linked_ticket: array{id: int, ticket_key: string, title: string},
* source_ticket_id: int,
* target_ticket_id: int,
* ticket_link_type: mixed,
* ticket_link_type_id: int,
* updated_at: string|null
* }>
*/
private function linkedTickets(Ticket $ticket): array
{
return TicketLink::query()
->with(['sourceTicket', 'targetTicket', 'ticketLinkType'])
->where(function ($query) use ($ticket): void {
$query
->where('source_ticket_id', $ticket->id)
->orWhere('target_ticket_id', $ticket->id);
})
->orderBy('id')
->get()
->map(function (TicketLink $ticketLink) use ($ticket): array {
$linkedTicket = $ticketLink->source_ticket_id === $ticket->id
? $ticketLink->targetTicket
: $ticketLink->sourceTicket;
return [
'created_at' => $ticketLink->created_at?->toISOString(),
'id' => $ticketLink->id,
'linked_ticket' => [
'id' => $linkedTicket->id,
'ticket_key' => $linkedTicket->ticket_key,
'title' => $linkedTicket->title,
],
'source_ticket_id' => $ticketLink->source_ticket_id,
'target_ticket_id' => $ticketLink->target_ticket_id,
'ticket_link_type' => $ticketLink->ticketLinkType,
'ticket_link_type_id' => $ticketLink->ticket_link_type_id,
'updated_at' => $ticketLink->updated_at?->toISOString(),
];
})
->all();
}
}
@@ -14,6 +14,12 @@ use App\Http\Requests\UpdateProjectNamedSettingRequest;
use App\Http\Requests\UpdateProjectTicketMetadataSettings;
use App\Http\Requests\UpdateProjectTicketTypeRequest;
use App\Http\Requests\UpdateTicketFieldDefinitionRequest;
use App\Http\Resources\FieldTypeOptionResource;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\TicketFieldDefinitionResource;
use App\Http\Resources\TicketLinkTypeResource;
use App\Http\Resources\TicketPriorityResource;
use App\Http\Resources\TicketTypeResource;
use App\Models\Project;
use App\Models\Ticket;
use App\Models\TicketFieldDefinition;
@@ -41,19 +47,14 @@ class ProjectTicketMetadataSettingsController extends Controller
$this->abortUnlessCanManage($request, $project);
return Inertia::render('projects/settings/Metadata', [
'fieldTypeOptions' => collect(TicketFieldDefinition::FIELD_TYPES)
->map(fn (string $fieldType): array => [
'label' => ucfirst($fieldType),
'value' => $fieldType,
])
->all(),
'project' => $project,
'fieldTypeOptions' => FieldTypeOptionResource::collection(collect(TicketFieldDefinition::FIELD_TYPES))->resolve(),
'project' => ProjectResource::make($project)->resolve(),
'error' => session('error'),
'status' => session('status'),
'ticketFieldDefinitions' => $project->ticketFieldDefinitions()->get(),
'ticketLinkTypes' => $project->ticketLinkTypes()->get(),
'ticketPriorities' => $project->ticketPriorities()->get(),
'ticketTypes' => $project->ticketTypes()->withCount('tickets')->get(),
'ticketFieldDefinitions' => TicketFieldDefinitionResource::collection($project->ticketFieldDefinitions()->get())->resolve(),
'ticketLinkTypes' => TicketLinkTypeResource::collection($project->ticketLinkTypes()->get())->resolve(),
'ticketPriorities' => TicketPriorityResource::collection($project->ticketPriorities()->get())->resolve(),
'ticketTypes' => TicketTypeResource::collection($project->ticketTypes()->withCount('tickets')->get())->resolve(),
]);
}
@@ -7,6 +7,7 @@ use App\Actions\Git\GitProviderManager;
use App\Http\Controllers\Controller;
use App\Http\Requests\Settings\StoreUserGitConnectionRequest;
use App\Http\Requests\Settings\UpdateUserGitConnectionRequest;
use App\Http\Resources\UserGitConnectionResource;
use App\Models\UserGitConnection;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -25,20 +26,7 @@ class GitConnectionController extends Controller
{
return Inertia::render('settings/GitConnections', [
'gitConnections' => $request->user()->gitConnections
->map(fn (UserGitConnection $gitConnection): array => [
'account_login' => $gitConnection->account_login,
'account_name' => $gitConnection->account_name,
'base_url' => $gitConnection->base_url,
'created_at' => $gitConnection->created_at?->toISOString(),
'id' => $gitConnection->id,
'provider' => $gitConnection->provider->value,
'provider_label' => $gitConnection->provider->label(),
'provider_user_id' => $gitConnection->provider_user_id,
'updated_at' => $gitConnection->updated_at?->toISOString(),
'user_id' => $gitConnection->user_id,
])
->values(),
'gitConnections' => UserGitConnectionResource::collection($request->user()->gitConnections)->resolve(),
'status' => $request->session()->get('status'),
]);
}
+12 -13
View File
@@ -7,6 +7,9 @@ use App\Enums\Permission;
use App\Http\Requests\StoreTeamRequest;
use App\Http\Requests\SyncTeamUserPermissionsRequest;
use App\Http\Requests\UpdateTeamMembersRequest;
use App\Http\Resources\PermissionOptionResource;
use App\Http\Resources\TeamResource;
use App\Http\Resources\UserResource;
use App\Models\Team;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
@@ -37,25 +40,21 @@ class TeamController extends Controller
return Inertia::render('teams/Index', [
'canCreateTeams' => $canCreateTeams,
'permissionOptions' => $this->permissionService->permissionOptions(User::class, Team::class),
'permissionOptions' => PermissionOptionResource::collection(
$this->permissionService->permissionOptions(User::class, Team::class),
)->resolve(),
'status' => session('status'),
'teamPermissions' => $teams
->mapWithKeys(fn (Team $team): array => [
$team->id => $this->permissionService->assignmentMap(User::class, $team),
])
->all(),
'teams' => $teams
->map(fn (Team $team): array => [
'id' => $team->id,
'name' => $team->name,
'created_at' => $team->created_at?->toISOString(),
'updated_at' => $team->updated_at?->toISOString(),
'user_ids' => $team->users->modelKeys(),
'users' => $team->users->values(),
]),
'users' => User::query()
->orderBy('name')
->get(),
'teams' => TeamResource::collection($teams)->resolve(),
'users' => UserResource::collection(
User::query()
->orderBy('name')
->get(),
)->resolve(),
]);
}