Files
backend/main.go

71 lines
1.9 KiB
Go

package main
import (
"bytes"
"git.siteworxpro.com/packages/golang/email-api/client"
"github.com/go-playground/validator"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"html/template"
"net/http"
)
type Message struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
Phone string `json:"phone"`
Message string `json:"message"`
}
type CustomValidator struct {
validator *validator.Validate
}
func (cv *CustomValidator) Validate(i interface{}) error {
if err := cv.validator.Struct(i); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
}
return nil
}
func main() {
e := echo.New()
e.Validator = &CustomValidator{validator: validator.New()}
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{"http://localhost:5173", "https://bacfrederick.com"},
AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
}))
e.POST("/email-request", func(c echo.Context) error {
config := client.ConfigFromEnv()
apiClient := client.NewClient(config)
request := new(client.EmailRequest)
request.Source = "no-reply@bacfrederick.com"
request.Message.Subject.Data = "New Request"
request.Destination.ToAddresses = append(request.Destination.ToAddresses, "membership@bacfrederick.com")
t, err := template.ParseFiles("templates/request.gohtml")
message := new(Message)
if err = c.Bind(message); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
}
if err = c.Validate(message); err != nil {
return err
}
messageContent := bytes.NewBuffer(make([]byte, 0))
_ = t.Execute(messageContent, message)
request.Message.Body.Html.Data = messageContent.String()
email, err := apiClient.SendEmail(request)
if err != nil {
return err
}
return c.String(http.StatusOK, email.Id)
})
e.Logger.Fatal(e.Start(":8080"))
}