aboutsummaryrefslogtreecommitdiff
path: root/api/internal/controllers/stats.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/internal/controllers/stats.go')
-rw-r--r--api/internal/controllers/stats.go164
1 files changed, 164 insertions, 0 deletions
diff --git a/api/internal/controllers/stats.go b/api/internal/controllers/stats.go
new file mode 100644
index 0000000..9808ace
--- /dev/null
+++ b/api/internal/controllers/stats.go
@@ -0,0 +1,164 @@
1package controllers
2
3import (
4 "database/sql"
5 "github.com/gin-gonic/gin"
6 "net/http"
7 "water/api/database"
8 "water/api/models"
9)
10
11func GetAllStatistics(c *gin.Context) {
12 db := database.EstablishDBConnection()
13 defer func(db *sql.DB) {
14 err := db.Close()
15 if err != nil {
16 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
17 return
18 }
19 }(db)
20
21 rows, err := db.Query("SELECT s.date, s.quantity, u.uuid, u.name FROM Statistics s INNER JOIN Users u ON u.id = s.user_id")
22 if err != nil {
23 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
24 return
25 }
26 defer func(rows *sql.Rows) {
27 err := rows.Close()
28 if err != nil {
29 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
30 return
31 }
32 }(rows)
33
34 var data []models.Statistic
35
36 for rows.Next() {
37 var stat models.Statistic
38 var user models.User
39 if err := rows.Scan(&stat.Date, &stat.Quantity, &user.UUID, &user.Name); err != nil {
40 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
41 return
42 }
43 stat.User = user
44 data = append(data, stat)
45 }
46
47 c.JSON(http.StatusOK, data)
48}
49
50func PostNewStatistic(c *gin.Context) {
51 var stat models.StatisticPost
52
53 if err := c.BindJSON(&stat); err != nil {
54 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
55 return
56 }
57
58 db := database.EstablishDBConnection()
59 defer func(db *sql.DB) {
60 err := db.Close()
61 if err != nil {
62 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
63 return
64 }
65 }(db)
66
67 result, err := db.Exec("INSERT INTO statistics (date, user_id, quantity) values (?, ?, ?)", stat.Date, stat.UserID, stat.Quantity)
68
69 if err != nil {
70 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
71 }
72
73 id, err := result.LastInsertId()
74 if err != nil {
75 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
76 }
77
78 c.JSON(http.StatusCreated, gin.H{"status": "created", "id": id})
79}
80
81func GetWeeklyStatistics (c *gin.Context) {
82 db := database.EstablishDBConnection()
83 defer func(db *sql.DB) {
84 err := db.Close()
85 if err != nil {
86 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
87 return
88 }
89 }(db)
90
91 rows, err := db.Query("SELECT date, total FROM `WeeklyStatisticsView`")
92 if err != nil {
93 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
94 return
95 }
96 defer func(rows *sql.Rows) {
97 err := rows.Close()
98 if err != nil {
99 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
100 return
101 }
102 }(rows)
103
104 var data []models.WeeklyStatistic
105 for rows.Next() {
106 var weeklyStat models.WeeklyStatistic
107 if err := rows.Scan(&weeklyStat.Date, &weeklyStat.Total); err != nil {
108 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
109 }
110 data = append(data, weeklyStat)
111 }
112
113 c.JSON(http.StatusOK, data)
114}
115
116func GetDailyUserStatistics(c *gin.Context) {
117 db := database.EstablishDBConnection()
118 defer func(db *sql.DB) {
119 err := db.Close()
120 if err != nil {
121 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
122 return
123 }
124 }(db)
125
126 rows, err := db.Query("SELECT name, total FROM DailyUserStatistics")
127
128 if err != nil {
129 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
130 return
131 }
132 defer func(rows *sql.Rows) {
133 err := rows.Close()
134 if err != nil {
135 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
136 return
137 }
138 }(rows)
139
140 var data []models.DailyUserTotals
141 for rows.Next() {
142 var stat models.DailyUserTotals
143 if err := rows.Scan(&stat.Name, &stat.Total); err != nil {
144 c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
145 return
146 }
147 data = append(data, stat)
148 }
149
150 c.JSON(http.StatusOK, data)
151
152}
153
154func GetUserStatistics(c *gin.Context) {
155 c.JSON(http.StatusOK, gin.H{"status": "ok", "uuid": c.Param("uuid")})
156}
157
158func UpdateUserStatistic(c *gin.Context) {
159 c.JSON(http.StatusNoContent, gin.H{"status": "No Content"})
160}
161
162func DeleteUserStatistic(c *gin.Context) {
163 c.JSON(http.StatusNoContent, gin.H{"status": "No Content"})
164}