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

Method UpdateWorksheet

backend/api/v1/worksheet_service.go:181–282  ·  view source on GitHub ↗

UpdateWorksheet updates a worksheet.

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

Source from the content-addressed store, hash-verified

179
180// UpdateWorksheet updates a worksheet.
181func (s *WorksheetService) UpdateWorksheet(
182 ctx context.Context,
183 req *connect.Request[v1pb.UpdateWorksheetRequest],
184) (*connect.Response[v1pb.Worksheet], error) {
185 request := req.Msg
186 if request.Worksheet == nil {
187 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("worksheet cannot be empty"))
188 }
189 if request.UpdateMask == nil {
190 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("update mask cannot be empty"))
191 }
192 if request.Worksheet.Name == "" {
193 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("worksheet name cannot be empty"))
194 }
195
196 projectID, worksheetID, err := common.GetProjectIDWorksheetID(request.Worksheet.Name)
197 if err != nil {
198 return nil, connect.NewError(connect.CodeInvalidArgument, err)
199 }
200
201 user, ok := GetUserFromContext(ctx)
202 if !ok {
203 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("user not found"))
204 }
205 worksheet, err := s.findWorksheet(ctx, projectID, worksheetID, false /* loadFull */)
206 if err != nil {
207 return nil, err
208 }
209 ok, err = s.canWriteWorksheet(ctx, worksheet)
210 if err != nil {
211 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to check access with error: %v", err))
212 }
213 if !ok {
214 return nil, connect.NewError(connect.CodePermissionDenied, errors.Errorf("cannot write worksheet %s", worksheet.Title))
215 }
216
217 worksheetPatch := &store.PatchWorkSheetMessage{
218 ResourceID: worksheet.ResourceID,
219 }
220 for _, path := range request.UpdateMask.Paths {
221 switch path {
222 case "title":
223 worksheetPatch.Title = &request.Worksheet.Title
224 case "content":
225 statement := string(request.Worksheet.Content)
226 worksheetPatch.Statement = &statement
227 case "visibility":
228 visibility, err := convertToStoreWorksheetVisibility(request.Worksheet.Visibility)
229 if err != nil {
230 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("invalid visibility %q", request.Worksheet.Visibility))
231 }
232 stringVisibility := string(visibility)
233 worksheetPatch.Visibility = &stringVisibility
234 case "database":
235 if request.Worksheet.Database != "" {
236 instanceID, databaseName, err := common.GetInstanceDatabaseID(request.Worksheet.Database)
237 if err != nil {
238 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", request.Worksheet.Database))

Callers

nothing calls this directly

Calls 12

findWorksheetMethod · 0.95
canWriteWorksheetMethod · 0.95
GetProjectIDWorksheetIDFunction · 0.92
GetInstanceDatabaseIDFunction · 0.92
GetUserFromContextFunction · 0.85
ErrorfMethod · 0.80
PatchWorkSheetMethod · 0.80
GetWorkSheetMethod · 0.80
GetDatabaseMethod · 0.65

Tested by

no test coverage detected