MCPcopy Create free account
hub / github.com/bytebase/bytebase / ListDatabases

Method ListDatabases

backend/api/v1/database_service.go:176–275  ·  view source on GitHub ↗

ListDatabases lists all databases.

(ctx context.Context, req *connect.Request[v1pb.ListDatabasesRequest])

Source from the content-addressed store, hash-verified

174
175// ListDatabases lists all databases.
176func (s *DatabaseService) ListDatabases(ctx context.Context, req *connect.Request[v1pb.ListDatabasesRequest]) (*connect.Response[v1pb.ListDatabasesResponse], error) {
177 user, ok := GetUserFromContext(ctx)
178 if !ok {
179 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("user not found"))
180 }
181
182 offset, err := parseLimitAndOffset(&pageSize{
183 token: req.Msg.PageToken,
184 limit: int(req.Msg.PageSize),
185 maximum: 1000,
186 })
187 if err != nil {
188 return nil, err
189 }
190 limitPlusOne := offset.limit + 1
191
192 find := &store.FindDatabaseMessage{
193 Workspace: common.GetWorkspaceIDFromContext(ctx),
194 Limit: &limitPlusOne,
195 Offset: &offset.offset,
196 ShowDeleted: req.Msg.ShowDeleted,
197 }
198
199 orderByKeys, err := store.GetDatabaseOrders(req.Msg.OrderBy)
200 if err != nil {
201 return nil, connect.NewError(connect.CodeInvalidArgument, err)
202 }
203 find.OrderByKeys = orderByKeys
204
205 filterQ, err := store.GetListDatabaseFilter(common.GetWorkspaceIDFromContext(ctx), req.Msg.Filter)
206 if err != nil {
207 return nil, connect.NewError(connect.CodeInvalidArgument, err)
208 }
209 find.FilterQ = filterQ
210
211 switch {
212 case strings.HasPrefix(req.Msg.Parent, common.ProjectNamePrefix):
213 p, err := common.GetProjectID(req.Msg.Parent)
214 if err != nil {
215 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("invalid parent %q", req.Msg.Parent))
216 }
217 ok, err := s.iamManager.CheckPermission(ctx, permission.ProjectsGet, user, common.GetWorkspaceIDFromContext(ctx), p)
218 if err != nil {
219 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to check permission with error: %v", err.Error()))
220 }
221 if !ok {
222 return nil, connect.NewError(connect.CodePermissionDenied, errors.Errorf("user does not have permission %q in %q", permission.ProjectsGet, req.Msg.Parent))
223 }
224 find.ProjectID = &p
225 case strings.HasPrefix(req.Msg.Parent, common.WorkspacePrefix):
226 ok, err := s.iamManager.CheckPermission(ctx, permission.DatabasesList, user, common.GetWorkspaceIDFromContext(ctx))
227 if err != nil {
228 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to check permission with error: %v", err.Error()))
229 }
230 if !ok {
231 return nil, connect.NewError(connect.CodePermissionDenied, errors.Errorf("user does not have permission %q", permission.DatabasesList))
232 }
233 case strings.HasPrefix(req.Msg.Parent, common.InstanceNamePrefix):

Callers

nothing calls this directly

Calls 13

convertToDatabaseMethod · 0.95
GetDatabaseOrdersFunction · 0.92
GetListDatabaseFilterFunction · 0.92
GetProjectIDFunction · 0.92
GetInstanceIDFunction · 0.92
GetUserFromContextFunction · 0.85
parseLimitAndOffsetFunction · 0.85
ErrorfMethod · 0.80
CheckPermissionMethod · 0.80
getNextPageTokenMethod · 0.80
ListDatabasesMethod · 0.65

Tested by

no test coverage detected