From b37e49da3698a3c92b214931a23dcdb1ac41587c Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 28 Sep 2023 18:40:58 +0300 Subject: feat: improve logs and mod log endpoint (#55) Former-commit-id: 7f2d9100cc4bd78c27544909fe7215913d6a2dfe --- backend/database/init.sql | 4 ++-- backend/handlers/logs.go | 28 ++++++++++++++++------------ backend/handlers/mod.go | 39 +++++++++++++++++++++------------------ backend/handlers/record.go | 8 ++++---- backend/handlers/user.go | 2 +- 5 files changed, 44 insertions(+), 37 deletions(-) (limited to 'backend') diff --git a/backend/database/init.sql b/backend/database/init.sql index 92ddb07..17a0ce5 100644 --- a/backend/database/init.sql +++ b/backend/database/init.sql @@ -50,7 +50,7 @@ CREATE TABLE map_routes ( category_id SMALLINT NOT NULL, score_count SMALLINT NOT NULL, description TEXT NOT NULL, - showcase TEXT NOT NULL DEFAULT '-', + showcase TEXT NOT NULL DEFAULT, PRIMARY KEY (id), FOREIGN KEY (map_id) REFERENCES maps(id), FOREIGN KEY (category_id) REFERENCES categories(id), @@ -181,7 +181,7 @@ CREATE TABLE logs ( user_id TEXT NOT NULL, type TEXT NOT NULL, description TEXT NOT NULL, - message TEXT NOT NULL DEFAULT '-', + message TEXT NOT NULL DEFAULT, date TIMESTAMP NOT NULL DEFAULT now(), PRIMARY KEY (id), FOREIGN KEY (user_id) REFERENCES users(steam_id) diff --git a/backend/handlers/logs.go b/backend/handlers/logs.go index 0a0b6be..23c4a39 100644 --- a/backend/handlers/logs.go +++ b/backend/handlers/logs.go @@ -25,13 +25,14 @@ const ( LogDescriptionUserUpdateCountrySuccess string = "UpdateCountrySuccess" LogDescriptionUserUpdateCountryFail string = "UpdateCountryFail" - LogDescriptionMapSummaryCreateSuccess string = "MapSummaryCreateSuccess" - LogDescriptionMapSummaryCreateFail string = "MapSummaryCreateFail" - LogDescriptionMapSummaryEditSuccess string = "MapSummaryEditSuccess" - LogDescriptionMapSummaryEditFail string = "MapSummaryEditFail" - LogDescriptionMapSummaryEditImage string = "MapSummaryEditImage" - LogDescriptionMapSummaryDeleteSuccess string = "MapSummaryDeleteSuccess" - LogDescriptionMapSummaryDeleteFail string = "MapSummaryDeleteFail" + LogDescriptionMapSummaryCreateSuccess string = "MapSummaryCreateSuccess" + LogDescriptionMapSummaryCreateFail string = "MapSummaryCreateFail" + LogDescriptionMapSummaryEditSuccess string = "MapSummaryEditSuccess" + LogDescriptionMapSummaryEditFail string = "MapSummaryEditFail" + LogDescriptionMapSummaryEditImageSuccess string = "MapSummaryEditImageSuccess" + LogDescriptionMapSummaryEditImageFail string = "MapSummaryEditImageFail" + LogDescriptionMapSummaryDeleteSuccess string = "MapSummaryDeleteSuccess" + LogDescriptionMapSummaryDeleteFail string = "MapSummaryDeleteFail" LogDescriptionCreateRecordSuccess string = "CreateRecordSuccess" LogDescriptionCreateRecordInsertRecordFail string = "InsertRecordFail" @@ -49,6 +50,7 @@ type Log struct { User models.UserShort `json:"user"` Type string `json:"type"` Description string `json:"description"` + Message string `json:"message"` Date time.Time `json:"date"` } @@ -57,9 +59,10 @@ type LogsResponse struct { } type LogsResponseDetails struct { - User models.UserShort `json:"user"` - Log string `json:"detail"` - Date time.Time `json:"date"` + User models.UserShort `json:"user"` + Log string `json:"detail"` + Message string `json:"message"` + Date time.Time `json:"date"` } type ScoreLogsResponse struct { @@ -112,8 +115,9 @@ func ModLogs(c *gin.Context) { SteamID: log.User.SteamID, UserName: log.User.UserName, }, - Log: detail, - Date: log.Date, + Log: detail, + Message: log.Message, + Date: log.Date, }) } c.JSON(http.StatusOK, models.Response{ diff --git a/backend/handlers/mod.go b/backend/handlers/mod.go index 89e3618..845152f 100644 --- a/backend/handlers/mod.go +++ b/backend/handlers/mod.go @@ -1,6 +1,7 @@ package handlers import ( + "fmt" "net/http" "strconv" "time" @@ -67,7 +68,7 @@ func CreateMapSummary(c *gin.Context) { } var request CreateMapSummaryRequest if err := c.BindJSON(&request); err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, "BIND: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, fmt.Sprintf("BIND: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -83,7 +84,7 @@ func CreateMapSummary(c *gin.Context) { sql := `SELECT m.id FROM maps m WHERE m.id = $1` err = database.DB.QueryRow(sql, mapID).Scan(&checkMapID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, "S#maps: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, fmt.Sprintf("SELECT#maps: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -96,7 +97,7 @@ func CreateMapSummary(c *gin.Context) { VALUES ($1,$2,$3,$4,$5)` _, err = tx.Exec(sql, mapID, request.CategoryID, request.ScoreCount, request.Description, request.Showcase) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, "I#map_routes: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, fmt.Sprintf("INSERT#map_routes: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -104,7 +105,7 @@ func CreateMapSummary(c *gin.Context) { VALUES ($1,$2,$3,$4,$5)` _, err = tx.Exec(sql, mapID, request.CategoryID, request.UserName, request.ScoreCount, request.RecordDate) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, "I#map_history: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateFail, fmt.Sprintf("INSERT#map_history: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -112,7 +113,7 @@ func CreateMapSummary(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateSuccess) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryCreateSuccess, fmt.Sprintf("MapID: %d | CategoryID: %d | ScoreCount: %d", mapID, request.CategoryID, *request.ScoreCount)) c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully created map summary.", @@ -151,7 +152,7 @@ func EditMapSummary(c *gin.Context) { } var request EditMapSummaryRequest if err := c.BindJSON(&request); err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "BIND: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("BIND: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -167,14 +168,14 @@ func EditMapSummary(c *gin.Context) { sql := `SELECT mr.category_id, mr.score_count FROM map_routes mr INNER JOIN maps m ON m.id = mr.map_id WHERE m.id = $1 AND mr.id = $2` err = database.DB.QueryRow(sql, mapID, request.RouteID).Scan(&categoryID, &scoreCount) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "S#map_routes: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("(RouteID: %d) SELECT#map_routes: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } sql = `SELECT mh.id FROM map_history mh WHERE mh.score_count = $1 AND mh.category_id = $2 AND mh.map_id = $3` err = database.DB.QueryRow(sql, scoreCount, categoryID, mapID).Scan(&historyID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "S#map_history: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("(RouteID: %d) SELECT#map_history: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -182,14 +183,14 @@ func EditMapSummary(c *gin.Context) { sql = `UPDATE map_routes SET score_count = $2, description = $3, showcase = $4 WHERE id = $1` _, err = tx.Exec(sql, request.RouteID, request.ScoreCount, request.Description, request.Showcase) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "U#map_routes: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("(RouteID: %d) UPDATE#map_routes: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } sql = `UPDATE map_history SET user_name = $2, score_count = $3, record_date = $4 WHERE id = $1` _, err = tx.Exec(sql, historyID, request.UserName, request.ScoreCount, request.RecordDate) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "U#map_history"+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("(HistoryID: %d) UPDATE#map_history: %s", historyID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -197,7 +198,7 @@ func EditMapSummary(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditSuccess) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditSuccess, fmt.Sprintf("MapID: %d | CategoryID: %d | ScoreCount: %d", mapID, categoryID, scoreCount)) c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully updated map summary.", @@ -236,7 +237,7 @@ func DeleteMapSummary(c *gin.Context) { } var request DeleteMapSummaryRequest if err := c.BindJSON(&request); err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, "BIND: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditFail, fmt.Sprintf("(RouteID: %d) BIND: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -252,7 +253,7 @@ func DeleteMapSummary(c *gin.Context) { sql := `SELECT m.id, mr.score_count, mr.category_id FROM maps m INNER JOIN map_routes mr ON m.id=mr.map_id WHERE m.id = $1 AND mr.id = $2` err = database.DB.QueryRow(sql, mapID, request.RouteID).Scan(&checkMapID, &scoreCount, &categoryID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, "S#map_routes: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, fmt.Sprintf("(RouteID: %d) SELECT#map_routes: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -263,7 +264,7 @@ func DeleteMapSummary(c *gin.Context) { sql = `SELECT mh.id FROM maps m INNER JOIN map_routes mr ON m.id=mr.map_id INNER JOIN map_history mh ON m.id=mh.map_id WHERE m.id = $1 AND mh.category_id = $2 AND mh.score_count = $3` err = database.DB.QueryRow(sql, mapID, categoryID, scoreCount).Scan(&mapHistoryID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, "S#map_history: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, fmt.Sprintf("(RouteID: %d) SELECT#map_history: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -271,14 +272,14 @@ func DeleteMapSummary(c *gin.Context) { sql = `DELETE FROM map_routes mr WHERE mr.id = $1 ` _, err = tx.Exec(sql, request.RouteID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, "D#map_routes: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, fmt.Sprintf("(RouteID: %d) DELETE#map_routes: %s", request.RouteID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } sql = `DELETE FROM map_history mh WHERE mh.id = $1` _, err = tx.Exec(sql, mapHistoryID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, "D#map_history: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteFail, fmt.Sprintf("(HistoryID: %d) DELETE#map_history: %s", mapHistoryID, err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -286,7 +287,7 @@ func DeleteMapSummary(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteSuccess) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryDeleteSuccess, fmt.Sprintf("MapID: %d | CategoryID: %d | ScoreCount: %d", mapID, categoryID, scoreCount)) c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully delete map summary.", @@ -325,6 +326,7 @@ func EditMapImage(c *gin.Context) { } var request EditMapImageRequest if err := c.BindJSON(&request); err != nil { + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditImageFail, fmt.Sprintf("BIND: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -332,10 +334,11 @@ func EditMapImage(c *gin.Context) { sql := `UPDATE maps SET image = $2 WHERE id = $1` _, err = database.DB.Exec(sql, mapID, request.Image) if err != nil { + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditImageFail, fmt.Sprintf("UPDATE#maps: %s", err.Error())) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditImage) + CreateLog(user.(models.User).SteamID, LogTypeMod, LogDescriptionMapSummaryEditImageSuccess) c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully updated map image.", diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 2dbc766..697cd40 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go @@ -239,7 +239,7 @@ func DeleteRecord(c *gin.Context) { sql = `SELECT mp.id FROM records_mp mp WHERE mp.id = $1 AND mp.map_id = $2 AND (mp.host_id = $3 OR mp.partner_id = $3) AND is_deleted = false` err = database.DB.QueryRow(sql, recordID, mapID, user.(models.User).SteamID).Scan(&validateRecordID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "S#records_mp: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "SELECT#records_mp: "+err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -252,7 +252,7 @@ func DeleteRecord(c *gin.Context) { sql = `UPDATE records_mp SET is_deleted = true WHERE id = $1` _, err = database.DB.Exec(sql, recordID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "U#records_mp: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "UPDATE#records_mp: "+err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -262,7 +262,7 @@ func DeleteRecord(c *gin.Context) { sql = `SELECT sp.id FROM records_sp sp WHERE sp.id = $1 AND sp.map_id = $2 AND sp.user_id = $3 AND is_deleted = false` err = database.DB.QueryRow(sql, recordID, mapID, user.(models.User).SteamID).Scan(&validateRecordID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "S#records_sp: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "SELECT#records_sp: "+err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } @@ -275,7 +275,7 @@ func DeleteRecord(c *gin.Context) { sql = `UPDATE records_sp SET is_deleted = true WHERE id = $1` _, err = database.DB.Exec(sql, recordID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "U#records_sp: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionDeleteRecordFail, "UPDATE#records_sp: "+err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } diff --git a/backend/handlers/user.go b/backend/handlers/user.go index 461e521..c985471 100644 --- a/backend/handlers/user.go +++ b/backend/handlers/user.go @@ -808,7 +808,7 @@ func UpdateUser(c *gin.Context) { _, err = database.DB.Exec(`UPDATE users SET username = $1, avatar_link = $2, country_code = $3, updated_at = $4 WHERE steam_id = $5`, profile.PersonaName, profile.AvatarFull, profile.LocCountryCode, time.Now().UTC(), user.(models.User).SteamID) if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeUser, LogDescriptionUserUpdateFail, "U#users: "+err.Error()) + CreateLog(user.(models.User).SteamID, LogTypeUser, LogDescriptionUserUpdateFail, "UPDATE#users: "+err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } -- cgit v1.2.3