Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
105
services/ota_update_go/handlers/sms_send.go
Normal file
105
services/ota_update_go/handlers/sms_send.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"otaupdate/services"
|
||||
"strings"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/grpc/sms"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
"github.com/fiskerinc/cloud-services/pkg/loggerdataresp"
|
||||
)
|
||||
|
||||
// HandleSMSSend godoc
|
||||
// @Summary Send SMS
|
||||
// @Description Send SMS using SMS service
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param Authorization header string false "Bearer <ID token>"
|
||||
// @Param Api-Key header string false "<API token>"
|
||||
// @Param config body sms.SendSMSRequest true "SMS data"
|
||||
// @Success 200 {object} sms.SMSDetailsResponse
|
||||
// @Failure 400 {object} common.JSONError "Bad request"
|
||||
// @Failure 401 {object} common.JSONError "Unauthorized"
|
||||
// @Failure 408 {object} common.JSONError "Request timeout"
|
||||
// @Failure 503 {object} common.JSONError "Service unavailable"
|
||||
// @Router /sms [post]
|
||||
func HandleSMSSend(w http.ResponseWriter, r *http.Request) {
|
||||
var smsReq sms.SendSMSRequest
|
||||
if err := json.NewDecoder(r.Body).Decode(&smsReq); err != nil {
|
||||
loggerdataresp.BadDataErrorResp(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
res, err := services.GetSMSClient().HandleSMSSend(r.Context(), &smsReq)
|
||||
if err != nil {
|
||||
s, ok := status.FromError(err)
|
||||
if !ok {
|
||||
loggerdataresp.BadDataErrorResp(w, err, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
errMsg, httpCode := grpcErrToHttpErr(s)
|
||||
loggerdataresp.BadDataErrorResp(w, errors.New(errMsg), httpCode)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
||||
tow, err := protojson.Marshal(res)
|
||||
if loggerdataresp.BadDataErrorResp(w, err, http.StatusBadRequest) {
|
||||
return
|
||||
}
|
||||
|
||||
w.Write(tow)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func grpcErrToHttpErr(s *status.Status) (string, int) {
|
||||
switch s.Code() {
|
||||
case codes.Canceled:
|
||||
return s.Message(), 499
|
||||
case codes.Unknown:
|
||||
return s.Message(), http.StatusInternalServerError
|
||||
case codes.InvalidArgument:
|
||||
return s.Message(), http.StatusBadRequest
|
||||
case codes.DeadlineExceeded:
|
||||
return s.Message(), http.StatusRequestTimeout
|
||||
case codes.NotFound:
|
||||
return s.Message(), http.StatusNotFound
|
||||
case codes.AlreadyExists:
|
||||
return s.Message(), http.StatusConflict
|
||||
case codes.PermissionDenied:
|
||||
return s.Message(), http.StatusForbidden
|
||||
case codes.ResourceExhausted:
|
||||
return s.Message(), http.StatusTooManyRequests
|
||||
case codes.FailedPrecondition:
|
||||
return s.Message(), http.StatusPreconditionFailed
|
||||
case codes.Aborted:
|
||||
return s.Message(), http.StatusConflict
|
||||
case codes.OutOfRange:
|
||||
return s.Message(), http.StatusBadRequest
|
||||
case codes.Unimplemented:
|
||||
return s.Message(), http.StatusNotImplemented
|
||||
case codes.Unavailable:
|
||||
return s.Message(), http.StatusServiceUnavailable
|
||||
case codes.DataLoss:
|
||||
return s.Message(), http.StatusInternalServerError
|
||||
case codes.Unauthenticated:
|
||||
return s.Message(), http.StatusUnauthorized
|
||||
case codes.Internal:
|
||||
if strings.Contains(s.Message(), "bad message status") {
|
||||
return s.Message(), http.StatusExpectationFailed
|
||||
}
|
||||
|
||||
return s.Message(), http.StatusInternalServerError
|
||||
default:
|
||||
return s.Message(), http.StatusInternalServerError
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user