package request import ( "bytes" "fmt" "io" "net/http" "strings" ) type RequestService struct { api string apiKey string } func NewRequestService(api, apiKey string) RequestService { return RequestService{ api: api, apiKey: apiKey, } } func getPayload(employeeIDList []string) (string, error) { employees := strings.Builder{} _, err := employees.Write([]byte(``)) if err != nil { return "", fmt.Errorf("error while write headers: %s", err) } for _, employeeID := range employeeIDList { employees.Write([]byte("" + employeeID + "")) } _, err = employees.Write([]byte("")) if err != nil { return "", fmt.Errorf("error while write footer: %s", err) } return employees.String(), nil } func (r RequestService) EmployeeWorkInformation(employeeIDList []string, from, to string) (io.Reader, error) { url := r.api + "/EmployeeWorkInformation/Search/" + from + "/" + to + "/" method := "POST" stringPayload, err := getPayload(employeeIDList) if err != nil { return nil, fmt.Errorf("getPayload: %s", err) } payload := strings.NewReader(stringPayload) client := &http.Client{} req, err := http.NewRequest(method, url, payload) if err != nil { return nil, fmt.Errorf("http.NewRequest: %s", err) } req.Header.Add("Cache-Control", "no-cache") req.Header.Add("Authorization", r.apiKey) req.Header.Add("Content-Type", "application/xml") res, err := client.Do(req) if err != nil { return nil, fmt.Errorf("client.Do: %s", err) } defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { return nil, fmt.Errorf("ioutil.ReadAll: %s", err) } //log.Println("readed", string(body)) return bytes.NewReader(body), nil }