MCPcopy Index your code
hub / github.com/rilldata/rill / ListProjectsForOrganizationAndUser

Method ListProjectsForOrganizationAndUser

admin/server/projects.go:101–159  ·  view source on GitHub ↗
(ctx context.Context, req *adminv1.ListProjectsForOrganizationAndUserRequest)

Source from the content-addressed store, hash-verified

99}
100
101func (s *Server) ListProjectsForOrganizationAndUser(ctx context.Context, req *adminv1.ListProjectsForOrganizationAndUserRequest) (*adminv1.ListProjectsForOrganizationAndUserResponse, error) {
102 observability.AddRequestAttributes(ctx,
103 attribute.String("args.organization", req.Org),
104 attribute.String("args.user_id", req.UserId),
105 )
106
107 org, err := s.admin.DB.FindOrganizationByName(ctx, req.Org)
108 if err != nil {
109 return nil, err
110 }
111
112 claims := auth.GetClaims(ctx)
113 if !claims.OrganizationPermissions(ctx, org.ID).ReadOrgMembers {
114 return nil, status.Error(codes.PermissionDenied, "does not have permission to read org members")
115 }
116
117 pageToken, err := unmarshalPageToken(req.PageToken)
118 if err != nil {
119 return nil, err
120 }
121 pageSize := validPageSize(req.PageSize)
122
123 projects, err := s.admin.DB.FindProjectsForOrgAndUser(ctx, org.ID, req.UserId, false, !req.Direct, pageToken.Val, pageSize)
124 if err != nil {
125 return nil, err
126 }
127
128 nextToken := ""
129 if len(projects) >= pageSize {
130 nextToken = marshalPageToken(projects[len(projects)-1].Name)
131 }
132
133 dtos := make([]*adminv1.Project, len(projects))
134 for i, p := range projects {
135 dtos[i] = s.projToDTO(p, org.Name)
136 }
137
138 var projectRoles map[string]*adminv1.ProjectMemberUser
139 if req.IncludeRoles && len(projects) > 0 {
140 ids := make([]string, len(projects))
141 for i, p := range projects {
142 ids[i] = p.ID
143 }
144 members, err := s.admin.DB.FindProjectMemberUsersForUserAndProjects(ctx, req.UserId, ids)
145 if err != nil {
146 return nil, err
147 }
148 projectRoles = make(map[string]*adminv1.ProjectMemberUser, len(members))
149 for projectID, m := range members {
150 projectRoles[projectID] = projMemberUserToPB(m)
151 }
152 }
153
154 return &adminv1.ListProjectsForOrganizationAndUserResponse{
155 Projects: dtos,
156 NextPageToken: nextToken,
157 ProjectRoles: projectRoles,
158 }, nil

Callers

nothing calls this directly

Calls 13

projToDTOMethod · 0.95
AddRequestAttributesFunction · 0.92
GetClaimsFunction · 0.92
unmarshalPageTokenFunction · 0.85
validPageSizeFunction · 0.85
marshalPageTokenFunction · 0.85
projMemberUserToPBFunction · 0.85
StringMethod · 0.65

Tested by

no test coverage detected