MCPcopy Index your code
hub / github.com/bytebase/bytebase / CreateProject

Method CreateProject

backend/api/v1/project_service.go:209–256  ·  view source on GitHub ↗

CreateProject creates a project.

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

Source from the content-addressed store, hash-verified

207
208// CreateProject creates a project.
209func (s *ProjectService) CreateProject(ctx context.Context, req *connect.Request[v1pb.CreateProjectRequest]) (*connect.Response[v1pb.Project], error) {
210 if !isValidResourceID(req.Msg.ProjectId) {
211 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("invalid project ID %v", req.Msg.ProjectId))
212 }
213 if req.Msg.ProjectId == "default" || strings.HasPrefix(req.Msg.ProjectId, "default-") {
214 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("project ID %q is reserved", req.Msg.ProjectId))
215 }
216
217 if req.Msg.Project != nil && req.Msg.Project.Labels != nil {
218 if err := validateLabels(req.Msg.Project.Labels); err != nil {
219 return nil, connect.NewError(connect.CodeInvalidArgument, err)
220 }
221 }
222 if req.Msg.Project != nil {
223 if err := validateIssueLabels(req.Msg.Project.IssueLabels); err != nil {
224 return nil, connect.NewError(connect.CodeInvalidArgument, err)
225 }
226 }
227
228 projectMessage := convertToProjectMessage(req.Msg.ProjectId, req.Msg.Project)
229
230 workspaceID := common.GetWorkspaceIDFromContext(ctx)
231 projectMessage.Workspace = workspaceID
232
233 setting, err := s.store.GetDataClassificationSetting(ctx, workspaceID)
234 if err != nil {
235 slog.Error("failed to find classification setting", log.BBError(err))
236 }
237 if setting != nil && len(setting.Configs) != 0 {
238 projectMessage.Setting.DataClassificationConfigId = setting.Configs[0].Id
239 }
240
241 user, ok := GetUserFromContext(ctx)
242 if !ok {
243 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("user not found"))
244 }
245 project, err := s.store.CreateProject(ctx,
246 projectMessage,
247 user,
248 )
249 if err != nil {
250 if strings.Contains(err.Error(), "duplicate key") {
251 return nil, connect.NewError(connect.CodeAlreadyExists, errors.Errorf("project ID %q already exists", req.Msg.ProjectId))
252 }
253 return nil, connect.NewError(connect.CodeInternal, err)
254 }
255 return connect.NewResponse(convertToProject(project)), nil
256}
257
258// UpdateProject updates a project.
259func (s *ProjectService) UpdateProject(ctx context.Context, req *connect.Request[v1pb.UpdateProjectRequest]) (*connect.Response[v1pb.Project], error) {

Callers 1

UpdateProjectMethod · 0.95

Calls 12

BBErrorFunction · 0.92
isValidResourceIDFunction · 0.85
validateLabelsFunction · 0.85
validateIssueLabelsFunction · 0.85
convertToProjectMessageFunction · 0.85
GetUserFromContextFunction · 0.85
convertToProjectFunction · 0.85
ErrorfMethod · 0.80
CreateProjectMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected