X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Finternal%2Fpublishservice%2Fpublishservice.go;h=d85f0770a1e5128ec11f59825b0f2948038def62;hb=refs%2Ftags%2F1.0.0;hp=17f4b28823a336e6cf6a68bdebbef13f6d4323ba;hpb=5d6fcc57a9d02080f1e9b5c18c39fd1245aeaad8;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index 17f4b28..d85f077 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -296,6 +296,11 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI go ps.sendEvent(publishedService, eventsapi.CAPIFEventSERVICEAPIUPDATE) } + pos, shouldReturn, returnValue = ps.updateProfiles(pos, apfId, updatedServiceDescription, publishedService, ctx) + if shouldReturn { + return returnValue + } + err := ctx.JSON(http.StatusOK, ps.publishedServices[apfId][pos]) if err != nil { // Something really bad happened, tell Echo that our handler failed @@ -330,6 +335,28 @@ func getServiceFromRequest(ctx echo.Context) (publishapi.ServiceAPIDescription, return updatedServiceDescription, false, nil } +func (ps *PublishService) updateProfiles(pos int, apfId string, updatedServiceDescription publishapi.ServiceAPIDescription, publishedService publishapi.ServiceAPIDescription, ctx echo.Context) (int, bool, error) { + registeredFuncs := ps.serviceRegister.GetAefsForPublisher(apfId) + for _, profile := range *updatedServiceDescription.AefProfiles { + if !slices.Contains(registeredFuncs, profile.AefId) { + return 0, false, sendCoreError(ctx, http.StatusNotFound, fmt.Sprintf("Function %s not registered", profile.AefId)) + } + if ps.checkIfProfileIsNew(profile.AefId, *publishedService.AefProfiles) { + + publishedService.AefProfiles = ps.addProfile(profile, publishedService) + ps.publishedServices[apfId][pos] = publishedService + + } else { + pos, shouldReturn, returnValue := ps.updateProfile(profile, publishedService, ctx) + if shouldReturn { + return pos, true, returnValue + } + } + + } + return 0, false, nil +} + func (ps *PublishService) sendEvent(service publishapi.ServiceAPIDescription, eventType eventsapi.CAPIFEvent) { apiIds := []string{*service.ApiId} apis := []publishapi.ServiceAPIDescription{service} @@ -343,6 +370,43 @@ func (ps *PublishService) sendEvent(service publishapi.ServiceAPIDescription, ev ps.eventChannel <- event } +func (ps *PublishService) checkIfProfileIsNew(aefId string, publishedPofiles []publishapi.AefProfile) bool { + for _, profile := range publishedPofiles { + if profile.AefId == aefId { + return false + } + } + return true +} +func (ps *PublishService) addProfile(profile publishapi.AefProfile, publishedService publishapi.ServiceAPIDescription) *[]publishapi.AefProfile { + registeredProfiles := *publishedService.AefProfiles + newProfiles := append(registeredProfiles, profile) + publishedService.AefProfiles = &newProfiles + return &newProfiles + +} + +func (*PublishService) updateProfile(profile publishapi.AefProfile, publishedService publishapi.ServiceAPIDescription, ctx echo.Context) (int, bool, error) { + pos, registeredProfile, err := getProfile(profile.AefId, publishedService.AefProfiles) + if err != nil { + return pos, true, sendCoreError(ctx, http.StatusBadRequest, "Unable to update service due to: "+err.Error()) + } + if profile.DomainName != nil { + registeredProfile.DomainName = profile.DomainName + (*publishedService.AefProfiles)[pos] = registeredProfile + } + return -1, false, nil +} + +func getProfile(profileId string, apiProfiles *[]publishapi.AefProfile) (int, publishapi.AefProfile, error) { + for pos, profile := range *apiProfiles { + if profile.AefId == profileId { + return pos, profile, nil + } + } + return 0, publishapi.AefProfile{}, fmt.Errorf("profile with ID %s is not registered for the service", profileId) +} + // This function wraps sending of an error in the Error format, and // handling the failure to marshal that. func sendCoreError(ctx echo.Context, code int, message string) error {