( ctx context.Context, req *connect.Request[v1pb.BatchCreateRevisionsRequest], )
| 125 | } |
| 126 | |
| 127 | func (s *RevisionService) BatchCreateRevisions( |
| 128 | ctx context.Context, |
| 129 | req *connect.Request[v1pb.BatchCreateRevisionsRequest], |
| 130 | ) (*connect.Response[v1pb.BatchCreateRevisionsResponse], error) { |
| 131 | request := req.Msg |
| 132 | instanceID, databaseName, err := common.GetInstanceDatabaseID(request.Parent) |
| 133 | if err != nil { |
| 134 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", request.Parent)) |
| 135 | } |
| 136 | database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{ |
| 137 | Workspace: common.GetWorkspaceIDFromContext(ctx), |
| 138 | InstanceID: &instanceID, |
| 139 | DatabaseName: &databaseName, |
| 140 | }) |
| 141 | if err != nil { |
| 142 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get database")) |
| 143 | } |
| 144 | if database == nil { |
| 145 | return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %v not found", request.Parent)) |
| 146 | } |
| 147 | |
| 148 | var revisions []*v1pb.Revision |
| 149 | for _, r := range request.Requests { |
| 150 | // Validate parent matches |
| 151 | if r.Parent != request.Parent { |
| 152 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("request parent %q does not match batch parent %q", r.Parent, request.Parent)) |
| 153 | } |
| 154 | revisions = append(revisions, r.Revision) |
| 155 | } |
| 156 | |
| 157 | createdRevisions, err := s.createRevisions(ctx, request.Parent, revisions, database) |
| 158 | if err != nil { |
| 159 | return nil, err |
| 160 | } |
| 161 | |
| 162 | return connect.NewResponse(&v1pb.BatchCreateRevisionsResponse{ |
| 163 | Revisions: createdRevisions, |
| 164 | }), nil |
| 165 | } |
| 166 | |
| 167 | func (s *RevisionService) createRevisions( |
| 168 | ctx context.Context, |
nothing calls this directly
no test coverage detected