diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-04-27 23:55:31 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-04-27 23:55:31 +0200 |
commit | a55cfe8205d5cb2fb0948c173f23ad71d6614d13 (patch) | |
tree | 386a341b3bcc543ca8ac7bfe7ff944cac669fe25 /model | |
parent | df3068728abacfc98fa19f3dba62b35f65aea731 (diff) |
Rename everything to locker/lock
Diffstat (limited to 'model')
-rw-r--r-- | model/lock.go | 110 | ||||
-rw-r--r-- | model/timer.go | 110 |
2 files changed, 110 insertions, 110 deletions
diff --git a/model/lock.go b/model/lock.go new file mode 100644 index 0000000..555d31e --- /dev/null +++ b/model/lock.go @@ -0,0 +1,110 @@ +package model + +import ( + "database/sql" + "log" + "time" + + "stevenlr.com/locker/utils" +) + +func GenerateLockToken() (string, error) { + return utils.GenerateRandomString(66) +} + +type Lock struct { + Id UUID + Name string + StartTime Time + EndTime Time + Owner UUID + Token string +} + +func (self Lock) IsFinished() bool { + return MakeTimeNow().Compare(self.EndTime) >= 0 +} + +func InsertLock(tx *sql.Tx, name string, seconds int, ownerId UUID) error { + now := MakeTimeNow() + end := Time(time.Time(now).Add(time.Duration(seconds) * time.Second)) + id := MakeUUID() + token, _ := GenerateLockToken() + _, err := tx.Exec(` + INSERT INTO Lock VALUES ($1, $2, $3, $4, $5, $6)`, id, name, now, end, ownerId, token) + return err +} + +func GetLocksForUser(db *sql.DB, owner UUID) []Lock { + rows, err := db.Query("SELECT Id, Name FROM Lock WHERE Owner=$1", owner) + if err != nil { + log.Fatalln(err) + } + + locks := []Lock{} + for rows.Next() { + var t Lock + if err := rows.Scan(&t.Id, &t.Name); err == nil { + locks = append(locks, t) + } + } + + return locks +} + +func GetLockForUser(db *sql.DB, id UUID, userId UUID) *Lock { + row := db.QueryRow("SELECT Id, Name, StartTime, EndTime, Owner, Token FROM Lock WHERE Id=$1 AND Owner=$2", id, userId) + + var t Lock + if err := row.Scan(&t.Id, &t.Name, &t.StartTime, &t.EndTime, &t.Owner, &t.Token); err == nil { + return &t + } + + return nil +} + +func GetLockWithToken(db *sql.DB, id UUID, token string) *Lock { + row := db.QueryRow("SELECT Id, Name, StartTime, EndTime, Owner, Token FROM Lock WHERE Id=$1 AND Token=$2", id, token) + + var t Lock + if err := row.Scan(&t.Id, &t.Name, &t.StartTime, &t.EndTime, &t.Owner, &t.Token); err == nil { + return &t + } + + return nil +} + +func DeleteLock(db *sql.DB, id UUID, userId UUID) bool { + res, err := db.Exec("DELETE FROM Lock WHERE Id=$1 AND Owner=$2", id, userId) + if err != nil { + return false + } + + affected, err := res.RowsAffected() + return err == nil && affected == 1 +} + +func UpdateLockEndTime(db *sql.DB, id UUID, endTime Time, userId UUID) bool { + res, err := db.Exec("UPDATE Lock SET EndTime=$1 WHERE Id=$2 AND Owner=$3", endTime, id, userId) + if err != nil { + return false + } + + affected, err := res.RowsAffected() + return err == nil && affected == 1 +} + +func RegenerateLockToken(db *sql.DB, id UUID, userId UUID) bool { + newToken, err := GenerateLockToken() + if err != nil { + return false + } + + res, err := db.Exec("UPDATE Lock SET Token=$1 WHERE Id=$2 AND Owner=$3", newToken, id, userId) + if err != nil { + return false + } + + affected, err := res.RowsAffected() + return err == nil && affected == 1 +} diff --git a/model/timer.go b/model/timer.go deleted file mode 100644 index 3f13d0d..0000000 --- a/model/timer.go +++ /dev/null @@ -1,110 +0,0 @@ -package model - -import ( - "database/sql" - "log" - "time" - - "stevenlr.com/timer/utils" -) - -func GenerateTimerToken() (string, error) { - return utils.GenerateRandomString(66) -} - -type Timer struct { - Id UUID - Name string - StartTime Time - EndTime Time - Owner UUID - Token string -} - -func (self Timer) IsFinished() bool { - return MakeTimeNow().Compare(self.EndTime) >= 0 -} - -func InsertTimer(tx *sql.Tx, name string, seconds int, ownerId UUID) error { - now := MakeTimeNow() - end := Time(time.Time(now).Add(time.Duration(seconds) * time.Second)) - id := MakeUUID() - token, _ := GenerateTimerToken() - _, err := tx.Exec(` - INSERT INTO Timer VALUES ($1, $2, $3, $4, $5, $6)`, id, name, now, end, ownerId, token) - return err -} - -func GetTimersForUser(db *sql.DB, owner UUID) []Timer { - rows, err := db.Query("SELECT Id, Name FROM Timer WHERE Owner=$1", owner) - if err != nil { - log.Fatalln(err) - } - - timers := []Timer{} - for rows.Next() { - var t Timer - if err := rows.Scan(&t.Id, &t.Name); err == nil { - timers = append(timers, t) - } - } - - return timers -} - -func GetTimerForUser(db *sql.DB, id UUID, userId UUID) *Timer { - row := db.QueryRow("SELECT Id, Name, StartTime, EndTime, Owner, Token FROM Timer WHERE Id=$1 AND Owner=$2", id, userId) - - var t Timer - if err := row.Scan(&t.Id, &t.Name, &t.StartTime, &t.EndTime, &t.Owner, &t.Token); err == nil { - return &t - } - - return nil -} - -func GetTimerWithToken(db *sql.DB, id UUID, token string) *Timer { - row := db.QueryRow("SELECT Id, Name, StartTime, EndTime, Owner, Token FROM Timer WHERE Id=$1 AND Token=$2", id, token) - - var t Timer - if err := row.Scan(&t.Id, &t.Name, &t.StartTime, &t.EndTime, &t.Owner, &t.Token); err == nil { - return &t - } - - return nil -} - -func DeleteTimer(db *sql.DB, id UUID, userId UUID) bool { - res, err := db.Exec("DELETE FROM Timer WHERE Id=$1 AND Owner=$2", id, userId) - if err != nil { - return false - } - - affected, err := res.RowsAffected() - return err == nil && affected == 1 -} - -func UpdateTimerEndTime(db *sql.DB, id UUID, endTime Time, userId UUID) bool { - res, err := db.Exec("UPDATE Timer SET EndTime=$1 WHERE Id=$2 AND Owner=$3", endTime, id, userId) - if err != nil { - return false - } - - affected, err := res.RowsAffected() - return err == nil && affected == 1 -} - -func RegenerateTimerToken(db *sql.DB, id UUID, userId UUID) bool { - newToken, err := GenerateTimerToken() - if err != nil { - return false - } - - res, err := db.Exec("UPDATE Timer SET Token=$1 WHERE Id=$2 AND Owner=$3", newToken, id, userId) - if err != nil { - return false - } - - affected, err := res.RowsAffected() - return err == nil && affected == 1 -} |