/
ui_water.go
114 lines (86 loc) · 2.33 KB
/
ui_water.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"code.google.com/p/gorilla/mux"
"database/sql"
"net/http"
"html/template"
"watercooler/models"
"fmt"
"time"
"io/ioutil"
"encoding/json"
"math"
)
func UiWater(db *sql.DB, w http.ResponseWriter, r *http.Request) error {
vars := mux.Vars(r)
userId := vars["user"]
user, err := models.UserById(db, userId)
if err != nil {
return err
}
var water [3]map[string]interface{}
water[0] = map[string]interface{}{
"Name" : "8oz",
"Avatar" : "/img/8oz.png",
"Size" : 8,}
water[1] = map[string]interface{}{
"Name" : "12oz",
"Avatar" : "/img/12oz.png",
"Size" : 12,}
water[2] = map[string]interface{}{
"Name" : "16.9oz",
"Avatar" : "/img/169oz.png",
"Size" : 16.9}
tmpls, _ := template.ParseGlob("./public/tpl/*.tmpl")
tmpls.New("content").Parse(`{{template "begin"}}{{template "water" .}}{{template "end"}}`)
args := map[string]interface{}{
"User" : user,
"Water" : water,
}
tmpls.ExecuteTemplate(w, "content", args)
return nil
}
func UiAddWater(db *sql.DB, w http.ResponseWriter, r *http.Request) error {
vars := mux.Vars(r)
userId := vars["user"]
user, err := models.UserById(db, userId)
if err != nil {
return err
}
o := LoadOAuth(user.AccessToken, user.AccessSecret)
date := time.Now().Format("2006-01-02")
data := map[string]string {
"amount" : vars["size"],
"date" : date,
"unit" : "fl oz",
}
response, err := o.Post("http://api.fitbit.com/1/user/-/foods/log/water.json", data)
if err != nil {
return err
}
waterUrl := fmt.Sprintf("http://api.fitbit.com/1/user/-/foods/log/water/date/%s.json", date)
response, err = o.Get(waterUrl, map[string]string{})
if err != nil {
return err
}
bodyBytes, _ := ioutil.ReadAll(response.Body)
var f interface{}
err = json.Unmarshal(bodyBytes, &f)
if err != nil {
return err
}
m := f.(map[string]interface{})
m = m["summary"].(map[string]interface{})
if total, ok := m["water"].(float64) ; ok {
percent := int64(math.Min((total / 1419.53) * 100, 100))
tmpls, _ := template.ParseGlob("./public/tpl/*.tmpl")
tmpls.New("content").Parse(`{{template "begin"}}{{template "waterfill" .}}{{template "end"}}`)
args := map[string]interface{}{
"User" : user,
"Percent" : percent ,
}
tmpls.ExecuteTemplate(w, "content", args)
return nil
}
return nil
}