59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package application
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
func (h *ApplicationHandler) SendSMS(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "POST" {
|
|
w.WriteHeader(http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
referer := r.Referer()
|
|
|
|
if err := r.ParseForm(); err != nil {
|
|
log.Error().Err(err).Msg("Bad request")
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
message := r.PostFormValue("message")
|
|
beneficiaryid := r.PostFormValue("beneficiaryid")
|
|
|
|
h.GenerateSMS(beneficiaryid, message)
|
|
|
|
http.Redirect(w, r, referer, http.StatusFound)
|
|
}
|
|
|
|
func (h *ApplicationHandler) GenerateSMS(recipientid string, message string) error {
|
|
recipient, err := h.services.GetAccount(recipientid)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("user not found")
|
|
return err
|
|
}
|
|
|
|
pn, ok := recipient.Data["phone_number"]
|
|
if !ok {
|
|
log.Error().Msg("Beneficiary doesn't have a phone number")
|
|
return errors.New("missing phone number")
|
|
}
|
|
phoneNumber, ok := pn.(string)
|
|
if !ok {
|
|
log.Error().Msg("phone number type error")
|
|
return errors.New("phone number type error")
|
|
}
|
|
|
|
sender := h.config.GetString("service_name")
|
|
|
|
err = h.services.SMS.Send(phoneNumber, message, sender)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("cannot send SMS")
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|