api-cds-search/cmd/api/api.go
2025-03-24 08:50:01 +01:00

84 lines
1.7 KiB
Go

package api
import (
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"sap-cds-search/cmd/database/table"
"time"
)
type CDSViewFieldJSON struct {
Fields []table.CDSViewField `json:"fields"`
}
func GetCDSViewField(CDSViewTechnicalName string) error {
var json CDSViewFieldJSON
path := "https://api.sap.com/odata/1.0/catalog.svc/CdsViewsContent.CdsViews('" + CDSViewTechnicalName + "')/$value"
fmt.Println("Getting: ", CDSViewTechnicalName)
err := RequestJSON(path, &json)
if err != nil {
return err
}
for _, field := range json.Fields {
field.CDSViewTechnicalName = CDSViewTechnicalName
err := table.InsertOrReplaceCDSViewField(field)
if err != nil {
fmt.Println(err)
continue
}
}
return nil
}
func GetCDSViewFields() {
cdsViews, _ := table.QueryAllCDSViewTechnicalNames()
for _, cdsView := range *cdsViews {
var json CDSViewFieldJSON
path := "https://api.sap.com/odata/1.0/catalog.svc/CdsViewsContent.CdsViews('" + cdsView + "')/$value"
fmt.Println("Getting: ", cdsView)
err := RequestJSON(path, &json)
if err != nil {
fmt.Println(cdsView, err)
continue
}
for _, field := range json.Fields {
field.CDSViewTechnicalName = cdsView
err := table.InsertOrReplaceCDSViewField(field)
if err != nil {
fmt.Println(field.CDSViewTechnicalName, field.FieldName, err)
}
}
time.Sleep(200 * time.Millisecond)
}
}
func RequestJSON(url string, v any) error {
response, err := http.Get(url)
if err != nil {
return err
}
responseData, err := io.ReadAll(response.Body)
if err != nil {
return err
}
if len(responseData) == 0 {
return errors.New("empty response")
}
err = json.Unmarshal(responseData, v)
if err != nil {
return err
}
return nil
}