Spaces:
Sleeping
Sleeping
package stock | |
import ( | |
"fmt" | |
"bytes" | |
"context" | |
"net/http" | |
"encoding/json" | |
helpers "tebakaja_lb_proxy/proxy/helpers" | |
) | |
/* | |
* --- Stock Prediction Service --- | |
*/ | |
func (s *StockServiceImpl) StockPredictionService(ctx context.Context, req PredictionRequest) (ApiResponse, error) { | |
reqBody, err := json.Marshal(req) | |
if err != nil { | |
return ApiResponse{ | |
Message: fmt.Sprintf("Failed to marshal request body: %v", err), | |
StatusCode: http.StatusInternalServerError, | |
}, err | |
} | |
endpoint := fmt.Sprintf("%s/prediction", helpers.GetEndpointService("stock")) | |
httpReq, err := http.NewRequestWithContext(ctx, "POST", endpoint, bytes.NewBuffer(reqBody)) | |
if err != nil { | |
return ApiResponse{ | |
Message: fmt.Sprintf("Failed to make request: %v", err), | |
StatusCode: http.StatusInternalServerError, | |
}, err | |
} | |
httpReq.Header.Set("Content-Type", "application/json") | |
resp, err := http.DefaultClient.Do(httpReq) | |
if err != nil { | |
return ApiResponse{ | |
Message: fmt.Sprintf("Failed to make request: %v", err), | |
StatusCode: http.StatusInternalServerError, | |
}, err | |
} | |
defer resp.Body.Close() | |
if resp.StatusCode != http.StatusOK { | |
return ApiResponse{ | |
Message: fmt.Sprintf("Request failed: %d", resp.StatusCode), | |
StatusCode: resp.StatusCode, | |
}, fmt.Errorf("request failed: %d", resp.StatusCode) | |
} | |
var apiResponse PredictionResponse | |
if err := json.NewDecoder(resp.Body).Decode(&apiResponse); err != nil { | |
return ApiResponse{ | |
Message: fmt.Sprintf("Failed to parse JSON response: %v", err), | |
StatusCode: http.StatusInternalServerError, | |
}, err | |
} | |
return ApiResponse{ | |
Message: apiResponse.Message, | |
StatusCode: apiResponse.StatusCode, | |
Data: apiResponse.Data, | |
}, nil | |
} | |