aboutsummaryrefslogtreecommitdiff
path: root/backend/handlers/logs.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-02 11:09:42 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-02 11:09:42 +0300
commit69c5423f7954b641109166e03ad0ab174b3d55c6 (patch)
treec53539e4b0ee17620422de3761dba70277c417c9 /backend/handlers/logs.go
parentdocs: added privacy policy (diff)
downloadlphub-69c5423f7954b641109166e03ad0ab174b3d55c6.tar.gz
lphub-69c5423f7954b641109166e03ad0ab174b3d55c6.tar.bz2
lphub-69c5423f7954b641109166e03ad0ab174b3d55c6.zip
feat: testing logging system (#55)
Former-commit-id: d8c5fda30ab08b42218aead1febdf83200948763
Diffstat (limited to 'backend/handlers/logs.go')
-rw-r--r--backend/handlers/logs.go114
1 files changed, 114 insertions, 0 deletions
diff --git a/backend/handlers/logs.go b/backend/handlers/logs.go
new file mode 100644
index 0000000..2b5713d
--- /dev/null
+++ b/backend/handlers/logs.go
@@ -0,0 +1,114 @@
1package handlers
2
3import (
4 "fmt"
5 "net/http"
6
7 "github.com/gin-gonic/gin"
8 "github.com/pektezol/leastportalshub/backend/database"
9 "github.com/pektezol/leastportalshub/backend/models"
10)
11
12const (
13 LogTypeMod string = "Mod"
14 LogTypeScore string = "Score"
15 LogTypeLogin string = "Login"
16
17 LogDescriptionLoginSuccess string = "Success"
18 LogDescriptionLoginFailToken string = "TokenFail"
19 LogDescriptionLoginFailValidate string = "ValidateFail"
20 LogDescriptionLoginFailSummary string = "SummaryFail"
21)
22
23type Log struct {
24 User models.UserShort `json:"user"`
25 Type string `json:"type"`
26 Description string `json:"description"`
27}
28
29type LogsResponse struct {
30 Logs []LogsResponseDetails `json:"logs"`
31}
32
33type LogsResponseDetails struct {
34 User models.UserShort `json:"user"`
35 Log string `json:"detail"`
36}
37
38func ModLogs(c *gin.Context) {
39 mod, exists := c.Get("mod")
40 if !exists || !mod.(bool) {
41 c.JSON(http.StatusUnauthorized, models.ErrorResponse("Insufficient permissions."))
42 return
43 }
44 response := LogsResponse{Logs: []LogsResponseDetails{}}
45 sql := `SELECT u.user_name, l.user_id, l.type, l.description
46 FROM logs l INNER JOIN users u ON l.user_id = u.steam_id WHERE type != 'Score'`
47 rows, err := database.DB.Query(sql)
48 if err != nil {
49 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
50 return
51 }
52 for rows.Next() {
53 log := Log{}
54 err = rows.Scan(log.User.UserName, log.User.SteamID, log.Type, log.Description)
55 if err != nil {
56 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
57 return
58 }
59 detail := fmt.Sprintf("%s.%s", log.Type, log.Description)
60 response.Logs = append(response.Logs, LogsResponseDetails{
61 User: models.UserShort{
62 SteamID: log.User.SteamID,
63 UserName: log.User.UserName,
64 },
65 Log: detail,
66 })
67 }
68 c.JSON(http.StatusOK, models.Response{
69 Success: true,
70 Message: "Successfully retrieved logs.",
71 Data: response,
72 })
73}
74
75func ScoreLogs(c *gin.Context) {
76 response := LogsResponse{Logs: []LogsResponseDetails{}}
77 sql := `SELECT u.user_name, l.user_id, l.type, l.description
78 FROM logs l INNER JOIN users u ON l.user_id = u.steam_id WHERE type = 'Score'`
79 rows, err := database.DB.Query(sql)
80 if err != nil {
81 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
82 return
83 }
84 for rows.Next() {
85 log := Log{}
86 err = rows.Scan(log.User.UserName, log.User.SteamID, log.Type, log.Description)
87 if err != nil {
88 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
89 return
90 }
91 detail := fmt.Sprintf("%s.%s", log.Type, log.Description)
92 response.Logs = append(response.Logs, LogsResponseDetails{
93 User: models.UserShort{
94 SteamID: log.User.SteamID,
95 UserName: log.User.UserName,
96 },
97 Log: detail,
98 })
99 }
100 c.JSON(http.StatusOK, models.Response{
101 Success: true,
102 Message: "Successfully retrieved score logs.",
103 Data: response,
104 })
105}
106
107func CreateLog(user_id string, log_type string, log_description string) (err error) {
108 sql := `INSERT INTO logs (user_id, "type", description) VALUES($1, $2, $3)`
109 _, err = database.DB.Exec(sql)
110 if err != nil {
111 return err
112 }
113 return nil
114}