84 lines
1.7 KiB
Go
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
|
||
|
}
|