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

Method CreateWorksheet

backend/api/v1/worksheet_service.go:37–101  ·  view source on GitHub ↗

CreateWorksheet creates a new worksheet.

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

Source from the content-addressed store, hash-verified

35
36// CreateWorksheet creates a new worksheet.
37func (s *WorksheetService) CreateWorksheet(
38 ctx context.Context,
39 req *connect.Request[v1pb.CreateWorksheetRequest],
40) (*connect.Response[v1pb.Worksheet], error) {
41 request := req.Msg
42 if request.Worksheet == nil {
43 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("worksheet must be set"))
44 }
45 user, ok := GetUserFromContext(ctx)
46 if !ok {
47 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("user not found"))
48 }
49
50 projectResourceID, err := common.GetProjectID(request.Parent)
51 if err != nil {
52 return nil, connect.NewError(connect.CodeInvalidArgument, err)
53 }
54 project, err := s.store.GetProject(ctx, &store.FindProjectMessage{
55 Workspace: common.GetWorkspaceIDFromContext(ctx),
56 ResourceID: &projectResourceID,
57 })
58 if err != nil {
59 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to get project with resource id %q, err: %v", projectResourceID, err))
60 }
61 if project == nil {
62 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("project with resource id %q not found", projectResourceID))
63 }
64 if project.Deleted {
65 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("project with resource id %q had deleted", projectResourceID))
66 }
67
68 var database *store.DatabaseMessage
69 if request.Worksheet.Database != "" {
70 instanceID, databaseName, err := common.GetInstanceDatabaseID(request.Worksheet.Database)
71 if err != nil {
72 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", request.Worksheet.Database))
73 }
74 db, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
75 Workspace: common.GetWorkspaceIDFromContext(ctx),
76 InstanceID: &instanceID,
77 DatabaseName: &databaseName,
78 })
79 if err != nil {
80 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get database"))
81 }
82 if db == nil {
83 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found", request.Worksheet.Database))
84 }
85 // Verify the database belongs to the specified project
86 if db.ProjectID != projectResourceID {
87 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found in project %q", request.Worksheet.Database, projectResourceID))
88 }
89 database = db
90 }
91 storeWorksheetCreate, err := convertToStoreWorksheetMessage(project, database, user.Email, request.Worksheet)
92 if err != nil {
93 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("failed to convert worksheet: %v", err))
94 }

Callers

nothing calls this directly

Calls 10

GetProjectIDFunction · 0.92
GetInstanceDatabaseIDFunction · 0.92
GetUserFromContextFunction · 0.85
ErrorfMethod · 0.80
CreateWorkSheetMethod · 0.80
GetProjectMethod · 0.65
GetDatabaseMethod · 0.65

Tested by

no test coverage detected