@@ -8,15 +8,13 @@ import (
88 "time"
99
1010 "github.com/google/uuid"
11- "gorm.io/gorm"
12- "gorm.io/gorm/clause"
1311)
1412
1513type hisController struct {
16- db * gorm. DB
14+ store historyStore
1715}
1816
19- // GET /his /:pointId?start=...&end=...
17+ // GET /recs /:pointId/history ?start=...&end=...
2018// Note that start and end are in seconds since epoch (1970-01-01T00:00:00Z)
2119func (h hisController ) getHis (w http.ResponseWriter , request * http.Request ) {
2220 pointIdString := request .PathValue ("pointId" )
@@ -34,41 +32,38 @@ func (h hisController) getHis(w http.ResponseWriter, request *http.Request) {
3432 }
3533 params := request .Form
3634
37- var sqlResult []his
38- query := h .db .Where (& his {PointId : pointId })
3935 // TODO: Change start/end to ISO8601
36+ var start * time.Time
4037 if params ["start" ] != nil {
4138 startStr := params ["start" ][0 ]
42- start , err := strconv .ParseInt (startStr , 0 , 64 )
39+ startUnix , err := strconv .ParseInt (startStr , 0 , 64 )
4340 if err != nil {
4441 log .Printf ("Cannot parse time: %s" , startStr )
4542 w .WriteHeader (http .StatusBadRequest )
4643 return
4744 }
48- query .Where ("ts >= ?" , time .Unix (start , 0 ))
45+ startTime := time .Unix (startUnix , 0 )
46+ start = & startTime
4947 }
48+ var end * time.Time
5049 if params ["end" ] != nil {
5150 endStr := params ["end" ][0 ]
52- end , err := strconv .ParseInt (endStr , 0 , 64 )
51+ endUnix , err := strconv .ParseInt (endStr , 0 , 64 )
5352 if err != nil {
5453 log .Printf ("Cannot parse time: %s" , endStr )
5554 w .WriteHeader (http .StatusBadRequest )
5655 return
5756 }
58- query .Where ("ts < ?" , time .Unix (end , 0 ))
57+ endTime := time .Unix (endUnix , 0 )
58+ end = & endTime
5959 }
60- err = query . Order ( "ts asc" ). Find ( & sqlResult ). Error
60+ httpResult , err := h . store . readHistory ( pointId , start , end )
6161 if err != nil {
62- log .Printf ("SQL Error: %s" , err )
62+ log .Printf ("Storage Error: %s" , err )
6363 w .WriteHeader (http .StatusInternalServerError )
6464 return
6565 }
6666
67- httpResult := []apiHis {}
68- for _ , sqlRow := range sqlResult {
69- httpResult = append (httpResult , apiHis (sqlRow ))
70- }
71-
7267 httpJson , err := json .Marshal (httpResult )
7368 if err != nil {
7469 log .Printf ("Cannot encode response JSON" )
@@ -80,7 +75,7 @@ func (h hisController) getHis(w http.ResponseWriter, request *http.Request) {
8075 w .Write (httpJson )
8176}
8277
83- // POST /his /:pointId
78+ // POST /recs /:pointId/history
8479// Note that start and end are in seconds since epoch (1970-01-01T00:00:00Z)
8580func (h hisController ) postHis (writer http.ResponseWriter , request * http.Request ) {
8681 pointIdString := request .PathValue ("pointId" )
@@ -98,27 +93,16 @@ func (h hisController) postHis(writer http.ResponseWriter, request *http.Request
9893 writer .WriteHeader (http .StatusBadRequest )
9994 return
10095 }
101-
102- his := his {
103- PointId : pointId ,
104- Ts : hisItem .Ts ,
105- Value : hisItem .Value ,
106- }
107-
108- err = h .db .Clauses (clause.OnConflict {
109- Columns : []clause.Column {{Name : "pointId" }, {Name : "ts" }},
110- DoUpdates : clause .AssignmentColumns ([]string {"value" }),
111- }).Create (& his ).Error
96+ err = h .store .writeHistory (pointId , hisItem )
11297 if err != nil {
113- log .Printf ("SQL Error: %s" , err )
98+ log .Printf ("Storage Error: %s" , err )
11499 writer .WriteHeader (http .StatusInternalServerError )
115100 return
116101 }
117-
118102 writer .WriteHeader (http .StatusOK )
119103}
120104
121- // DELETE /his /:pointId?start=...&end=...
105+ // DELETE /recs /:pointId/history ?start=...&end=...
122106// Note that start and end are in seconds since epoch (1970-01-01T00:00:00Z)
123107func (h hisController ) deleteHis (writer http.ResponseWriter , request * http.Request ) {
124108 pointIdString := request .PathValue ("pointId" )
@@ -136,30 +120,32 @@ func (h hisController) deleteHis(writer http.ResponseWriter, request *http.Reque
136120 }
137121 params := request .Form
138122
139- var sqlResult []his
140- query := h .db .Where (& his {PointId : pointId })
141123 // TODO: Change start/end to ISO8601
124+ var start * time.Time
142125 if params ["start" ] != nil {
143126 startStr := params ["start" ][0 ]
144- start , err := strconv .ParseInt (startStr , 0 , 64 )
127+ startUnix , err := strconv .ParseInt (startStr , 0 , 64 )
145128 if err != nil {
146129 log .Printf ("Cannot parse time: %s" , startStr )
147130 writer .WriteHeader (http .StatusBadRequest )
148131 return
149132 }
150- query .Where ("ts >= ?" , time .Unix (start , 0 ))
133+ startTime := time .Unix (startUnix , 0 )
134+ start = & startTime
151135 }
136+ var end * time.Time
152137 if params ["end" ] != nil {
153138 endStr := params ["end" ][0 ]
154- end , err := strconv .ParseInt (endStr , 0 , 64 )
139+ endUnix , err := strconv .ParseInt (endStr , 0 , 64 )
155140 if err != nil {
156141 log .Printf ("Cannot parse time: %s" , endStr )
157142 writer .WriteHeader (http .StatusBadRequest )
158143 return
159144 }
160- query .Where ("ts < ?" , time .Unix (end , 0 ))
145+ endTime := time .Unix (endUnix , 0 )
146+ end = & endTime
161147 }
162- err = query . Delete ( & sqlResult ). Error
148+ err = h . store . deleteHistory ( pointId , start , end )
163149 if err != nil {
164150 log .Printf ("SQL Error: %s" , err )
165151 writer .WriteHeader (http .StatusInternalServerError )
0 commit comments