37 lines
802 B
Go
37 lines
802 B
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
"strings"
|
|
"unicode"
|
|
"unicode/utf8"
|
|
|
|
"payouts/internal/models"
|
|
)
|
|
|
|
func Reason(reason string, params ...any) slog.Attr {
|
|
return slog.String("reason", fmt.Sprintf(reason, params...))
|
|
}
|
|
|
|
func ErrorResponse(w http.ResponseWriter, message string, err error, status int, logOpts ...any) {
|
|
r, size := utf8.DecodeRuneInString(message)
|
|
errorMsg := string(unicode.ToUpper(r)) + strings.ToLower(message[size:])
|
|
|
|
logFields := logOpts
|
|
if err != nil {
|
|
logFields = append([]any{slog.String("error", err.Error())}, logOpts...)
|
|
}
|
|
|
|
slog.Error(errorMsg, logFields...)
|
|
w.Header().Set("Content-type", "application/json")
|
|
w.WriteHeader(status)
|
|
|
|
json.NewEncoder(w).Encode(&models.ErrorResp{
|
|
Message: errorMsg,
|
|
Status: status,
|
|
})
|
|
}
|