diff --git a/internal/database/counter.go b/internal/database/counter.go index 2376a32..941f2fd 100644 --- a/internal/database/counter.go +++ b/internal/database/counter.go @@ -5,7 +5,6 @@ import ( "time" "github.com/ComputerScienceHouse/counters/internal/models" - "github.com/ComputerScienceHouse/counters/internal/util" "github.com/jackc/pgx/v5" ) @@ -30,9 +29,7 @@ func CreateCounterWithReset(ctx context.Context, userId string, username string, return "", err } - patchedResetTime := util.TranslateTime(rReq.ResetTime) - - resetID, err := CreateResetWithTransaction(ctx, tx, userId, username, patchedResetTime, rReq) + resetID, err := CreateResetWithTransaction(ctx, tx, userId, username, rReq) if err != nil { return "", err } @@ -92,29 +89,33 @@ func GetCounters(ctx context.Context) ([]*models.CounterListPart, error) { func GetCounterFromId(ctx context.Context, rowId string) (*models.CounterListPart, error) { var ( - counterId string - counterTitle string - resetDescription string - resetUsername string - resetOccuredAt time.Time + counterId string + counterOwner string + counterTitle string + counterDescription string + resetDescription string + resetUsername string + resetOccuredAt time.Time ) err := db.QueryRow(ctx, ` - SELECT c.counter_id, c.title, r.description, r.username, r.occured_at FROM counters c + SELECT c.counter_id, c.user_id, c.title, c.description, r.description, r.username, r.occured_at FROM counters c JOIN resets r ON c.last_reset = r.reset_id WHERE c.counter_id = $1 - `, rowId).Scan(&counterId, &counterTitle, &resetDescription, &resetUsername, &resetOccuredAt) + `, rowId).Scan(&counterId, &counterOwner, &counterTitle, &counterDescription, &resetDescription, &resetUsername, &resetOccuredAt) if err != nil { return nil, err } counter := &models.CounterListPart{ - CounterID: counterId, - CounterTitle: counterTitle, - ResetDescription: resetDescription, - ResetUsername: resetUsername, - ResetOccuredAt: resetOccuredAt.Unix(), + CounterID: counterId, + CounterTitle: counterTitle, + CounterDescription: counterDescription, + CounterOwner: counterOwner, + ResetDescription: resetDescription, + ResetUsername: resetUsername, + ResetOccuredAt: resetOccuredAt.Unix(), } return counter, nil diff --git a/internal/database/reset.go b/internal/database/reset.go index 209e21d..afff888 100644 --- a/internal/database/reset.go +++ b/internal/database/reset.go @@ -5,10 +5,11 @@ import ( "time" "github.com/ComputerScienceHouse/counters/internal/models" + "github.com/ComputerScienceHouse/counters/internal/util" "github.com/jackc/pgx/v5" ) -func CreateReset(ctx context.Context, userID string, username string, resetTime int64, req *models.CreateResetInput) (string, error) { +func CreateReset(ctx context.Context, userID string, username string, req *models.CreateResetInput) (string, error) { resetID, err := GenerateUUID() if err != nil { return "", err @@ -17,12 +18,12 @@ func CreateReset(ctx context.Context, userID string, username string, resetTime _, err = db.Exec(ctx, ` INSERT INTO resets (reset_id, counter_id, user_id, username, description, occured_at) VALUES ($1, $2, $3, $4, $5, $6) - `, resetID, req.CounterID, userID, username, req.Description, time.Unix(resetTime, 0)) + `, resetID, req.CounterID, userID, username, req.Description, time.Unix(util.ValidateTime(req.ResetTime), 0)) return resetID, err } -func CreateResetWithTransaction(ctx context.Context, tx pgx.Tx, userID string, username string, resetTime int64, req *models.CreateResetInput) (string, error) { +func CreateResetWithTransaction(ctx context.Context, tx pgx.Tx, userID string, username string, req *models.CreateResetInput) (string, error) { resetID, err := GenerateUUID() if err != nil { return "", err @@ -31,7 +32,7 @@ func CreateResetWithTransaction(ctx context.Context, tx pgx.Tx, userID string, u _, err = tx.Exec(ctx, ` INSERT INTO resets (reset_id, counter_id, user_id, username, description, occured_at) VALUES ($1, $2, $3, $4, $5, $6) - `, resetID, req.CounterID, userID, username, req.Description, time.Unix(resetTime, 0)) + `, resetID, req.CounterID, userID, username, req.Description, time.Unix(util.ValidateTime(req.ResetTime), 0)) return resetID, err } diff --git a/internal/models/api_reset.go b/internal/models/api_reset.go index a4e724e..56d014e 100644 --- a/internal/models/api_reset.go +++ b/internal/models/api_reset.go @@ -3,7 +3,7 @@ package models type CreateResetInput struct { CounterID string `json:"counter_id"` Description string `json:"description"` - ResetTime string `json:"reset_time"` + ResetTime int64 `json:"reset_time"` } type DeleteResetInput struct { diff --git a/internal/routes/api/v1/reset/reset.go b/internal/routes/api/v1/reset/reset.go index 095f1c3..beb59b3 100644 --- a/internal/routes/api/v1/reset/reset.go +++ b/internal/routes/api/v1/reset/reset.go @@ -7,7 +7,6 @@ import ( "github.com/ComputerScienceHouse/counters/internal/logging" "github.com/ComputerScienceHouse/counters/internal/models" "github.com/ComputerScienceHouse/counters/internal/users" - "github.com/ComputerScienceHouse/counters/internal/util" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" ) @@ -31,9 +30,8 @@ func CreateReset(c *gin.Context) { c.Status(http.StatusBadRequest) return } - patchedResetTime := util.TranslateTime(req.ResetTime) - if _, err := database.CreateReset(c.Request.Context(), user.Uuid, user.Username, patchedResetTime, &req); err != nil { + if _, err := database.CreateReset(c.Request.Context(), user.Uuid, user.Username, &req); err != nil { logging.Logger.Warnf("failed to create error %s", err) c.Status(http.StatusBadRequest) return diff --git a/internal/routes/web/pages/counter.go b/internal/routes/web/pages/counter.go index 7138f20..e736f22 100644 --- a/internal/routes/web/pages/counter.go +++ b/internal/routes/web/pages/counter.go @@ -15,6 +15,7 @@ func GetCounterPage(c *gin.Context) { user, err := users.GetCSHAuth(c) if err != nil { c.Status(http.StatusUnauthorized) + return } idToUse := c.Param("id") @@ -28,6 +29,7 @@ func GetCounterPage(c *gin.Context) { if counter == nil { c.Redirect(http.StatusNotFound, "/") + return } history, err := database.GetResetsFromCounterId(c.Request.Context(), idToUse) @@ -37,6 +39,8 @@ func GetCounterPage(c *gin.Context) { return } + logging.Logger.Info(counter.CounterDescription) + c.HTML(http.StatusOK, "counter.tmpl", gin.H{ "Id": counter.CounterID, "CounterID": counter.CounterOwner, diff --git a/internal/routes/web/pages/create.go b/internal/routes/web/pages/create.go index 1264c3e..4c75543 100644 --- a/internal/routes/web/pages/create.go +++ b/internal/routes/web/pages/create.go @@ -11,6 +11,7 @@ func GetCreatePage(c *gin.Context) { user, err := users.GetCSHAuth(c) if err != nil { c.Status(http.StatusUnauthorized) + return } c.HTML(http.StatusOK, "create.tmpl", gin.H{ diff --git a/internal/routes/web/pages/home.go b/internal/routes/web/pages/home.go index be28ac9..1c22429 100644 --- a/internal/routes/web/pages/home.go +++ b/internal/routes/web/pages/home.go @@ -15,6 +15,7 @@ func GetHomePage(c *gin.Context) { user, err := users.GetCSHAuth(c) if err != nil { c.Status(http.StatusUnauthorized) + return } counters, err := database.GetCounters(c.Request.Context()) diff --git a/internal/routes/web/pages/reset.go b/internal/routes/web/pages/reset.go index eafdc17..79aadec 100644 --- a/internal/routes/web/pages/reset.go +++ b/internal/routes/web/pages/reset.go @@ -11,6 +11,7 @@ func GetResetPage(c *gin.Context) { user, err := users.GetCSHAuth(c) if err != nil { c.Status(http.StatusUnauthorized) + return } idToUse := c.Param("id") diff --git a/internal/util/util.go b/internal/util/util.go index 36fb2b4..32f4579 100644 --- a/internal/util/util.go +++ b/internal/util/util.go @@ -2,25 +2,15 @@ package util import ( "time" + _ "time/tzdata" ) -func TranslateTime(inputTime string) int64 { - timeZone, _ := time.LoadLocation("America/New_York") +func ValidateTime(inputTime int64) int64 { + now := time.Now().Unix() - var finalTime int64 = 0 - currentTime := time.Now().Unix() - - timeConverted, err := time.ParseInLocation("2006-01-02T15:04", inputTime, timeZone) - - finalTime = timeConverted.Unix() - - if err != nil { - finalTime = currentTime - } - - if finalTime > currentTime { - finalTime = currentTime + if timestamp := inputTime; timestamp < now { + return timestamp } - return finalTime + return now } diff --git a/templates/create.tmpl b/templates/create.tmpl index d818838..d24a877 100644 --- a/templates/create.tmpl +++ b/templates/create.tmpl @@ -17,13 +17,13 @@ >
- + @@ -84,6 +84,9 @@ const button = form.querySelector('[type="submit"]'); if (button) button.disabled = true; + const ms = new Date(data['reset-time']).getTime(); + const resetTime = Number.isNaN(ms) ? null : Math.floor(ms / 1000); + const counterBody = { "title": data["title"], "description": data["description"] @@ -92,8 +95,8 @@ const resetBody = { "counter_id": "test", "description": data["reset-description"], - "reset_time": data['reset-time'] - ? new Date(data['reset-time']).toISOString() + "reset_time": resetTime + ? resetTime : null, } diff --git a/templates/reset.tmpl b/templates/reset.tmpl index 5755576..56fd768 100644 --- a/templates/reset.tmpl +++ b/templates/reset.tmpl @@ -58,11 +58,14 @@ const button = form.querySelector('[type="submit"]'); if (button) button.disabled = true; + const ms = new Date(data['reset-time']).getTime(); + const resetTime = Number.isNaN(ms) ? null : Math.floor(ms / 1000); + const resetBody = { "counter_id": {{ .Id }}, "description": data["reset-description"], - "reset_time": data['reset-time'] - ? new Date(data['reset-time']).toISOString() + "reset_time": resetTime + ? resetTime : null, }