Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions internal/database/counter.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"time"

"github.com/ComputerScienceHouse/counters/internal/models"
"github.com/ComputerScienceHouse/counters/internal/util"
"github.com/jackc/pgx/v5"
)

Expand All @@ -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
}
Expand Down Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions internal/database/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
}
Expand Down
2 changes: 1 addition & 1 deletion internal/models/api_reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 1 addition & 3 deletions internal/routes/api/v1/reset/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand All @@ -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
Expand Down
4 changes: 4 additions & 0 deletions internal/routes/web/pages/counter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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)
Expand All @@ -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,
Expand Down
1 change: 1 addition & 0 deletions internal/routes/web/pages/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down
1 change: 1 addition & 0 deletions internal/routes/web/pages/home.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
1 change: 1 addition & 0 deletions internal/routes/web/pages/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
22 changes: 6 additions & 16 deletions internal/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
11 changes: 7 additions & 4 deletions templates/create.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
>
</div>
<div class="input-group my-3">
<label for="description" class="input-group-text required-label">Description</label>
<label for="description" class="input-group-text required-label">Tagline</label>
<input
type="text"
id="description"
name="description"
class="form-control"
placeholder="Description"
placeholder="A little message underneath the title..."
required
pattern=".*\S.*"
>
Expand Down Expand Up @@ -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"]
Expand All @@ -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,
}

Expand Down
7 changes: 5 additions & 2 deletions templates/reset.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down
Loading