forked from aws-samples/ecs-refarch-cloudformation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
74 lines (60 loc) · 1.27 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"encoding/json"
"html/template"
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
const VERSION string = "1.0.0"
type Product struct {
ID string
Title string
Description string
Price float64
}
func main() {
// Products template
html := `
<html>
<head>
<title>Product Listing</title>
</head>
<body>
<h1>Product Listing</h1>
{{range .}}
<h2>{{.Title}}</h2>
<p><b>ID</b>: {{.ID}}</p>
<p><b>Description</b>: {{.Description}}</p>
<p><b>Price</b>: {{.Price}}</p>
{{end}}
</body>
</html>
`
tmpl, err := template.New("product-listing").Parse(html)
if err != nil {
log.Fatalf("Error parsing product listing template: %s", err)
}
router := gin.Default()
router.SetHTMLTemplate(tmpl)
// Router handlers
router.GET("/", func(c *gin.Context) {
product := os.Getenv("PRODUCT_SERVICE_URL")
resp, err := http.Get("http://" + product)
if err != nil {
c.IndentedJSON(500, gin.H{
"status": "error",
"message": "Could not connect to product service",
"detailed": err.Error(),
})
return
}
defer resp.Body.Close()
var products []Product
json.NewDecoder(resp.Body).Decode(&products)
c.HTML(200, "product-listing", products)
})
// Lets go...
router.Run(":8000")
}