in datasource/mongo/ms.go [735:781]
func (ds *MetadataManager) modifySchema(ctx context.Context, serviceID string, schema *discovery.Schema) *errsvc.Error {
domain := util.ParseDomain(ctx)
project := util.ParseProject(ctx)
svc, err := GetServiceByID(ctx, serviceID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
return discovery.NewError(discovery.ErrServiceNotExists, "Service does not exist.")
}
return discovery.NewError(discovery.ErrInternal, err.Error())
}
microservice := svc.Service
var isExist bool
for _, sid := range microservice.Schemas {
if sid == schema.SchemaId {
isExist = true
break
}
}
var newSchemas []string
if !isExist {
newSchemas = append(microservice.Schemas, schema.SchemaId)
}
if len(newSchemas) != 0 {
filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(serviceID))
setFilter := mutil.NewFilter(
mutil.ServiceSchemas(newSchemas),
)
updateFilter := mutil.NewFilter(
mutil.Set(setFilter),
)
err = dao.UpdateService(ctx, filter, updateFilter)
if err != nil {
return discovery.NewError(discovery.ErrInternal, err.Error())
}
}
filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
setFilter := mutil.NewFilter(
mutil.Schema(schema.Schema),
mutil.SchemaSummary(schema.Summary),
)
updateFilter := mutil.NewFilter(mutil.Set(setFilter))
err = dao.UpdateSchema(ctx, filter, updateFilter, options.Update().SetUpsert(true))
if err != nil {
return discovery.NewError(discovery.ErrInternal, err.Error())
}
return nil
}