Skip to content

Commit

Permalink
Merge branch 'feat/wpp-buttons' of https://github.com/weni-ai/courier
Browse files Browse the repository at this point in the history
…into HEAD
  • Loading branch information
paulobernardoaf committed Nov 27, 2024
2 parents 88ee357 + 1b009f2 commit 9d2ab9a
Show file tree
Hide file tree
Showing 9 changed files with 505 additions and 381 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: CI
on: [push, pull_request]
env:
go-version: '1.17.x'
go-version: '1.23.x'
redis-version: '3.2.4'
jobs:
test:
Expand Down
203 changes: 121 additions & 82 deletions backends/rapidpro/msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -920,104 +920,143 @@ func (m *DBMsg) OrderDetailsMessage() *courier.OrderDetailsMessage {
return nil
}

if interactionType, ok := metadata["interaction_type"].(string); ok && interactionType == "order_details" {
if orderDetailsMessageData, ok := metadata["order_details_message"].(map[string]interface{}); ok {
orderDetailsMessage := &courier.OrderDetailsMessage{}
if referenceID, ok := orderDetailsMessageData["reference_id"].(string); ok {
orderDetailsMessage.ReferenceID = referenceID
if orderDetailsMessageData, ok := metadata["order_details_message"].(map[string]interface{}); ok {
orderDetailsMessage := &courier.OrderDetailsMessage{}
if referenceID, ok := orderDetailsMessageData["reference_id"].(string); ok {
orderDetailsMessage.ReferenceID = referenceID
}
if paymentSettings, ok := orderDetailsMessageData["payment_settings"].(map[string]interface{}); ok {
orderDetailsMessage.PaymentSettings = courier.OrderPaymentSettings{}
if payment_type, ok := paymentSettings["type"].(string); ok {
orderDetailsMessage.PaymentSettings.Type = payment_type
}
if payment_link, ok := paymentSettings["payment_link"].(string); ok {
orderDetailsMessage.PaymentSettings.PaymentLink = payment_link
}
if paymentSettings, ok := orderDetailsMessageData["payment_settings"].(map[string]interface{}); ok {
orderDetailsMessage.PaymentSettings = courier.OrderPaymentSettings{}
if payment_type, ok := paymentSettings["type"].(string); ok {
orderDetailsMessage.PaymentSettings.Type = payment_type
if pix_config, ok := paymentSettings["pix_config"].(map[string]interface{}); ok {
orderDetailsMessage.PaymentSettings.PixConfig = courier.OrderPixConfig{}
if pix_config_key, ok := pix_config["key"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.Key = pix_config_key
}
if payment_link, ok := paymentSettings["payment_link"].(string); ok {
orderDetailsMessage.PaymentSettings.PaymentLink = payment_link
if pix_config_key_type, ok := pix_config["key_type"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.KeyType = pix_config_key_type
}
if pix_config, ok := paymentSettings["pix_config"].(map[string]interface{}); ok {
orderDetailsMessage.PaymentSettings.PixConfig = courier.OrderPixConfig{}
if pix_config_key, ok := pix_config["key"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.Key = pix_config_key
}
if pix_config_key_type, ok := pix_config["key_type"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.KeyType = pix_config_key_type
}
if pix_config_merchant_name, ok := pix_config["merchant_name"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.MerchantName = pix_config_merchant_name
}
if pix_config_code, ok := pix_config["code"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.Code = pix_config_code
}
if pix_config_merchant_name, ok := pix_config["merchant_name"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.MerchantName = pix_config_merchant_name
}
if pix_config_code, ok := pix_config["code"].(string); ok {
orderDetailsMessage.PaymentSettings.PixConfig.Code = pix_config_code
}
}
if totalAmount, ok := orderDetailsMessageData["total_amount"].(float64); ok {
orderDetailsMessage.TotalAmount = int(totalAmount)
}
if orderData, ok := orderDetailsMessageData["order"].(map[string]interface{}); ok {
orderDetailsMessage.Order = courier.Order{}
if itemsData, ok := orderData["items"].([]interface{}); ok {
orderDetailsMessage.Order.Items = make([]courier.OrderItem, len(itemsData))
for i, item := range itemsData {
if itemMap, ok := item.(map[string]interface{}); ok {
itemAmount := itemMap["amount"].(map[string]interface{})
item := courier.OrderItem{
RetailerID: itemMap["retailer_id"].(string),
Name: itemMap["name"].(string),
Quantity: int(itemMap["quantity"].(float64)),
Amount: courier.OrderAmountWithOffset{
Value: int(itemAmount["value"].(float64)),
Offset: int(itemAmount["offset"].(float64)),
},
}
}
if totalAmount, ok := orderDetailsMessageData["total_amount"].(float64); ok {
orderDetailsMessage.TotalAmount = int(totalAmount)
}
if orderData, ok := orderDetailsMessageData["order"].(map[string]interface{}); ok {
orderDetailsMessage.Order = courier.Order{}
if itemsData, ok := orderData["items"].([]interface{}); ok {
orderDetailsMessage.Order.Items = make([]courier.OrderItem, len(itemsData))
for i, item := range itemsData {
if itemMap, ok := item.(map[string]interface{}); ok {
itemAmount := itemMap["amount"].(map[string]interface{})
item := courier.OrderItem{
RetailerID: itemMap["retailer_id"].(string),
Name: itemMap["name"].(string),
Quantity: int(itemMap["quantity"].(float64)),
Amount: courier.OrderAmountWithOffset{
Value: int(itemAmount["value"].(float64)),
Offset: int(itemAmount["offset"].(float64)),
},
}

if itemMap["sale_amount"] != nil {
saleAmount := itemMap["sale_amount"].(map[string]interface{})
item.SaleAmount = &courier.OrderAmountWithOffset{
Value: int(saleAmount["value"].(float64)),
Offset: int(saleAmount["offset"].(float64)),
}
if itemMap["sale_amount"] != nil {
saleAmount := itemMap["sale_amount"].(map[string]interface{})
item.SaleAmount = &courier.OrderAmountWithOffset{
Value: int(saleAmount["value"].(float64)),
Offset: int(saleAmount["offset"].(float64)),
}

orderDetailsMessage.Order.Items[i] = item
}

orderDetailsMessage.Order.Items[i] = item
}
}
if subtotal, ok := orderData["subtotal"].(float64); ok {
orderDetailsMessage.Order.Subtotal = int(subtotal)
}
if subtotal, ok := orderData["subtotal"].(float64); ok {
orderDetailsMessage.Order.Subtotal = int(subtotal)
}
if taxData, ok := orderData["tax"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Tax = courier.OrderAmountWithDescription{}
if value, ok := taxData["value"].(float64); ok {
orderDetailsMessage.Order.Tax.Value = int(value)
}
if taxData, ok := orderData["tax"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Tax = courier.OrderAmountWithDescription{}
if value, ok := taxData["value"].(float64); ok {
orderDetailsMessage.Order.Tax.Value = int(value)
}
if description, ok := taxData["description"].(string); ok {
orderDetailsMessage.Order.Tax.Description = description
}
if description, ok := taxData["description"].(string); ok {
orderDetailsMessage.Order.Tax.Description = description
}
if shippingData, ok := orderData["shipping"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Shipping = courier.OrderAmountWithDescription{}
if value, ok := shippingData["value"].(float64); ok {
orderDetailsMessage.Order.Shipping.Value = int(value)
}
if description, ok := shippingData["description"].(string); ok {
orderDetailsMessage.Order.Shipping.Description = description
}
}
if shippingData, ok := orderData["shipping"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Shipping = courier.OrderAmountWithDescription{}
if value, ok := shippingData["value"].(float64); ok {
orderDetailsMessage.Order.Shipping.Value = int(value)
}
if discountData, ok := orderData["discount"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Discount = courier.OrderDiscount{}
if value, ok := discountData["value"].(float64); ok {
orderDetailsMessage.Order.Discount.Value = int(value)
}
if description, ok := discountData["description"].(string); ok {
orderDetailsMessage.Order.Discount.Description = description
}
if programName, ok := discountData["program_name"].(string); ok {
orderDetailsMessage.Order.Discount.ProgramName = programName
}
if description, ok := shippingData["description"].(string); ok {
orderDetailsMessage.Order.Shipping.Description = description
}
}
if discountData, ok := orderData["discount"].(map[string]interface{}); ok {
orderDetailsMessage.Order.Discount = courier.OrderDiscount{}
if value, ok := discountData["value"].(float64); ok {
orderDetailsMessage.Order.Discount.Value = int(value)
}
if description, ok := discountData["description"].(string); ok {
orderDetailsMessage.Order.Discount.Description = description
}
if programName, ok := discountData["program_name"].(string); ok {
orderDetailsMessage.Order.Discount.ProgramName = programName
}
}
}
return orderDetailsMessage
}

return nil
}

func (m *DBMsg) Buttons() []courier.ButtonComponent {
if m.Metadata_ == nil {
return nil
}

var metadata map[string]interface{}
err := json.Unmarshal(m.Metadata_, &metadata)
if err != nil {
return nil
}

if metadata == nil {
return nil
}

if buttonsData, ok := metadata["buttons"].([]interface{}); ok {
buttons := make([]courier.ButtonComponent, len(buttonsData))
for i, button := range buttonsData {
buttonMap := button.(map[string]interface{})
buttons[i] = courier.ButtonComponent{
SubType: buttonMap["sub_type"].(string),
Parameters: []courier.ButtonParam{},
}

if buttonMap["parameters"] != nil {
parameters := buttonMap["parameters"].([]interface{})
for _, parameter := range parameters {
parameterMap := parameter.(map[string]interface{})
buttons[i].Parameters = append(buttons[i].Parameters, courier.ButtonParam{
Type: parameterMap["type"].(string),
Text: parameterMap["text"].(string),
})
}
}
return orderDetailsMessage
}
return buttons
}

return nil
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ require (
github.com/antchfx/xmlquery v0.0.0-20181223105952-355641961c92
github.com/antchfx/xpath v0.0.0-20181208024549-4bbdf6db12aa // indirect
github.com/aws/aws-sdk-go v1.40.56
github.com/buger/jsonparser v0.0.0-20180318095312-2cac668e8456
github.com/buger/jsonparser v1.1.1
github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261 // indirect
github.com/dghubble/oauth1 v0.4.0
github.com/evalphobia/logrus_sentry v0.4.6
Expand Down Expand Up @@ -72,6 +72,6 @@ require (
gopkg.in/yaml.v3 v3.0.1 // indirect
)

go 1.17
go 1.23

replace github.com/nyaruka/gocommon => github.com/Ilhasoft/gocommon v1.16.2-weni
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ github.com/antchfx/xpath v0.0.0-20181208024549-4bbdf6db12aa h1:lL66YnJWy1tHlhjSx
github.com/antchfx/xpath v0.0.0-20181208024549-4bbdf6db12aa/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
github.com/aws/aws-sdk-go v1.40.56 h1:FM2yjR0UUYFzDTMx+mH9Vyw1k1EUUxsAFzk+BjkzANA=
github.com/aws/aws-sdk-go v1.40.56/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
github.com/buger/jsonparser v0.0.0-20180318095312-2cac668e8456 h1:SnUWpAH4lEUoS86woR12h21VMUbDe+DYp88V646wwMI=
github.com/buger/jsonparser v0.0.0-20180318095312-2cac668e8456/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261 h1:6/yVvBsKeAw05IUj4AzvrxaCnDjN4nUqKjW9+w5wixg=
github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down
Loading

0 comments on commit 9d2ab9a

Please sign in to comment.