Saving transaction & customer info
This commit is contained in:
@ -3,10 +3,12 @@ package main
|
||||
import (
|
||||
"encoding/json"
|
||||
"myapp/internal/cards"
|
||||
"myapp/internal/models"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/stripe/stripe-go/v79"
|
||||
)
|
||||
|
||||
type stripePayload struct {
|
||||
@ -14,8 +16,14 @@ type stripePayload struct {
|
||||
Amount string `json:"amount"`
|
||||
PaymentMethod string `json:"payment_method"`
|
||||
Email string `json:"email"`
|
||||
CardBrand string `json:"card_brand"`
|
||||
ExpiryMonth int `json:"expiry_month"`
|
||||
ExpiryYear int `json:"expiry_year"`
|
||||
LastFour string `json:"last_four"`
|
||||
Plan string `json:"plan"`
|
||||
ProductID string `json:"product_id"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
}
|
||||
|
||||
type jsonResponse struct {
|
||||
@ -105,30 +113,77 @@ func (app *application) CreateCustomerAndSubscribeToPlan(w http.ResponseWriter,
|
||||
Currency: data.Currency,
|
||||
}
|
||||
|
||||
okay := true
|
||||
var subscription *stripe.Subscription
|
||||
txnMsg := "Transaction successful"
|
||||
|
||||
stripeCustomer, msg, err := card.CreateCustomer(data.PaymentMethod, data.Email)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return
|
||||
okay = false
|
||||
txnMsg = msg
|
||||
}
|
||||
|
||||
subscriptionID, err := card.SubscribeToPlan(
|
||||
stripeCustomer,
|
||||
data.Plan,
|
||||
data.Email,
|
||||
data.LastFour,
|
||||
"",
|
||||
)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return
|
||||
if okay {
|
||||
subscription, err = card.SubscribeToPlan(
|
||||
stripeCustomer,
|
||||
data.Plan,
|
||||
data.Email,
|
||||
data.LastFour,
|
||||
"",
|
||||
)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
okay = false
|
||||
txnMsg = "Error subscribing customer"
|
||||
}
|
||||
app.infoLog.Println("subscription id is", subscription.ID)
|
||||
}
|
||||
|
||||
app.infoLog.Println("subscription id is", subscriptionID)
|
||||
if okay {
|
||||
productID, _ := strconv.Atoi(data.ProductID)
|
||||
customerID, err := app.SaveCustomer(data.FirstName, data.LastName, data.Email)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
// create a new txn
|
||||
amount, _ := strconv.Atoi(data.Amount)
|
||||
txn := models.Transaction{
|
||||
Amount: amount,
|
||||
Currency: "eur",
|
||||
LastFour: data.LastFour,
|
||||
ExpiryMonth: data.ExpiryMonth,
|
||||
ExpiryYear: data.ExpiryYear,
|
||||
TransactionStatusID: 2,
|
||||
}
|
||||
txnID, err := app.SaveTransaction(txn)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
// create order
|
||||
order := models.Order{
|
||||
WidgetID: productID,
|
||||
TransactionID: txnID,
|
||||
CustomerID: customerID,
|
||||
StatusID: 1,
|
||||
Quantity: 1,
|
||||
Amount: amount,
|
||||
}
|
||||
|
||||
_, err = app.SaveOrder(order)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
okay := true
|
||||
resp := jsonResponse{
|
||||
OK: okay,
|
||||
Message: msg,
|
||||
Message: txnMsg,
|
||||
}
|
||||
|
||||
out, err := json.MarshalIndent(resp, "", " ")
|
||||
@ -140,3 +195,38 @@ func (app *application) CreateCustomerAndSubscribeToPlan(w http.ResponseWriter,
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Write(out)
|
||||
}
|
||||
|
||||
func (app *application) SaveCustomer(firstName, lastName, email string) (int, error) {
|
||||
customer := models.Customer{
|
||||
FirstName: firstName,
|
||||
LastName: lastName,
|
||||
Email: email,
|
||||
}
|
||||
|
||||
id, err := app.DB.InsertCustomer(customer)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (app *application) SaveTransaction(txn models.Transaction) (int, error) {
|
||||
txnID, err := app.DB.InsertTransaction(txn)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return txnID, nil
|
||||
}
|
||||
|
||||
func (app *application) SaveOrder(order models.Order) (int, error) {
|
||||
id, err := app.DB.InsertOrder(order)
|
||||
if err != nil {
|
||||
app.errorLog.Println(err)
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user