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

Method UpdateWorkspace

backend/api/v1/workspace_service.go:145–192  ·  view source on GitHub ↗
(ctx context.Context, req *connect.Request[v1pb.UpdateWorkspaceRequest])

Source from the content-addressed store, hash-verified

143}
144
145func (s *WorkspaceService) UpdateWorkspace(ctx context.Context, req *connect.Request[v1pb.UpdateWorkspaceRequest]) (*connect.Response[v1pb.Workspace], error) {
146 ws := req.Msg.Workspace
147 if ws == nil {
148 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("workspace is required"))
149 }
150 if req.Msg.UpdateMask == nil {
151 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("update_mask must be set"))
152 }
153 if len(req.Msg.UpdateMask.GetPaths()) == 0 {
154 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("update_mask is required"))
155 }
156
157 workspaceID := common.GetWorkspaceIDFromContext(ctx)
158 patch := &store.UpdateWorkspaceMessage{
159 ResourceID: workspaceID,
160 }
161 for _, path := range req.Msg.UpdateMask.GetPaths() {
162 switch path {
163 case "title":
164 if ws.Title == "" {
165 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("title cannot be empty"))
166 }
167 patch.Title = &ws.Title
168 case "logo":
169 if err := s.licenseService.IsFeatureEnabled(ctx, workspaceID, v1pb.PlanFeature_FEATURE_CUSTOM_LOGO); err != nil {
170 return nil, connect.NewError(connect.CodePermissionDenied, err)
171 }
172 patch.Logo = &ws.Logo
173 default:
174 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("unsupported field: %q", path))
175 }
176 }
177
178 if err := s.store.UpdateWorkspace(ctx, patch); err != nil {
179 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to update workspace"))
180 }
181
182 // Read back the updated workspace to return the full state.
183 updated, err := s.store.GetWorkspaceByID(ctx, patch.ResourceID)
184 if err != nil {
185 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to get updated workspace"))
186 }
187 return connect.NewResponse(&v1pb.Workspace{
188 Name: ws.Name,
189 Title: updated.Payload.GetTitle(),
190 Logo: updated.Payload.GetLogo(),
191 }), nil
192}
193
194func (s *WorkspaceService) GetIamPolicy(ctx context.Context, _ *connect.Request[v1pb.GetIamPolicyRequest]) (*connect.Response[v1pb.IamPolicy], error) {
195 policy, err := s.store.GetWorkspaceIamPolicy(ctx, common.GetWorkspaceIDFromContext(ctx))

Callers

nothing calls this directly

Calls 7

ErrorfMethod · 0.80
IsFeatureEnabledMethod · 0.80
GetWorkspaceByIDMethod · 0.80
UpdateWorkspaceMethod · 0.65
GetTitleMethod · 0.45
GetLogoMethod · 0.45

Tested by

no test coverage detected