order.go (1097B)
1 package main 2 3 import ( 4 "github.com/gin-gonic/gin" 5 ) 6 7 type order struct { 8 // May have more fields in the future 9 Prices []string `json:"prices"` 10 } 11 12 func (e *Env) GetServices(c *gin.Context) { 13 if services, err := e.backend.Services(); err != nil { 14 RespondError(c, 500, "Unable to get services: %s", err.Error()) 15 } else { 16 Respond(c, 200, services) 17 } 18 } 19 20 func (e *Env) CreateCheckout(c *gin.Context) { 21 user := c.Param("user") 22 23 var order order 24 if err := c.ShouldBind(&order); err != nil { 25 RespondError(c, 400, "Invalid order: %s", err.Error()) 26 return 27 } 28 if len(order.Prices) != 1 { 29 RespondError(c, 400, "Must contain one and only one price") 30 return 31 } 32 33 if portal, err := e.backend.CreateCheckout(user, order.Prices[0]); err != nil { 34 RespondError(c, 500, "Unable to create order: %s", err.Error()) 35 } else { 36 Respond(c, 200, portal) 37 } 38 } 39 40 func (e *Env) CreatePortal(c *gin.Context) { 41 user := c.Param("user") 42 43 if portal, err := e.backend.CreatePortal(user); err != nil { 44 RespondError(c, 500, "Unable to create order: %s", err.Error()) 45 } else { 46 Respond(c, 200, portal) 47 } 48 }