mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
Add table and model to persist user login sessions.
This commit is contained in:
11
db/migrations/20190819192917_CreateUserSessions.sql
Normal file
11
db/migrations/20190819192917_CreateUserSessions.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE user_sessions (
|
||||
id INTEGER PRIMARY KEY,
|
||||
token VARCHAR(255),
|
||||
username VARCHAR(255),
|
||||
createdat DATETIME
|
||||
);
|
||||
CREATE UNIQUE INDEX token ON user_sessions(token);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE user_sessions;
|
||||
@@ -37,6 +37,7 @@ type Database struct {
|
||||
sponsorSlideMap *modl.DbMap
|
||||
scheduleBlockMap *modl.DbMap
|
||||
awardMap *modl.DbMap
|
||||
userSessionMap *modl.DbMap
|
||||
}
|
||||
|
||||
// Opens the SQLite database at the given path, creating it if it doesn't exist, and runs any pending
|
||||
@@ -128,6 +129,9 @@ func (database *Database) mapTables() {
|
||||
|
||||
database.awardMap = modl.NewDbMap(database.db, dialect)
|
||||
database.awardMap.AddTableWithName(Award{}, "awards").SetKeys(true, "Id")
|
||||
|
||||
database.userSessionMap = modl.NewDbMap(database.db, dialect)
|
||||
database.userSessionMap.AddTableWithName(UserSession{}, "user_sessions").SetKeys(true, "Id")
|
||||
}
|
||||
|
||||
func serializeHelper(target *string, source interface{}) error {
|
||||
|
||||
38
model/user_session.go
Normal file
38
model/user_session.go
Normal file
@@ -0,0 +1,38 @@
|
||||
// Copyright 2019 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
//
|
||||
// Model and datastore CRUD methods for a user login session.
|
||||
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
type UserSession struct {
|
||||
Id int
|
||||
Token string
|
||||
Username string
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
func (database *Database) CreateUserSession(session *UserSession) error {
|
||||
return database.userSessionMap.Insert(session)
|
||||
}
|
||||
|
||||
func (database *Database) GetUserSessionByToken(token string) (*UserSession, error) {
|
||||
session := new(UserSession)
|
||||
err := database.userSessionMap.SelectOne(session, "SELECT * FROM user_sessions WHERE token = ?", token)
|
||||
if err != nil && err.Error() == "sql: no rows in result set" {
|
||||
session = nil
|
||||
err = nil
|
||||
}
|
||||
return session, err
|
||||
}
|
||||
|
||||
func (database *Database) DeleteUserSession(session *UserSession) error {
|
||||
_, err := database.userSessionMap.Delete(session)
|
||||
return err
|
||||
}
|
||||
|
||||
func (database *Database) TruncateUserSessions() error {
|
||||
return database.userSessionMap.TruncateTables()
|
||||
}
|
||||
47
model/user_session_test.go
Normal file
47
model/user_session_test.go
Normal file
@@ -0,0 +1,47 @@
|
||||
// Copyright 2019 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestGetNonexistentUserSession(t *testing.T) {
|
||||
db := setupTestDb(t)
|
||||
|
||||
session, err := db.GetUserSessionByToken("blorpy")
|
||||
assert.Nil(t, err)
|
||||
assert.Nil(t, session)
|
||||
}
|
||||
|
||||
func TestUserSessionCrud(t *testing.T) {
|
||||
db := setupTestDb(t)
|
||||
|
||||
session := UserSession{0, "token1", "Bertha", time.Now()}
|
||||
err := db.CreateUserSession(&session)
|
||||
assert.Nil(t, err)
|
||||
session2, err := db.GetUserSessionByToken("token1")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, session.Token, session2.Token)
|
||||
assert.Equal(t, session.Username, session2.Username)
|
||||
assert.True(t, session.CreatedAt.Equal(session2.CreatedAt))
|
||||
|
||||
db.DeleteUserSession(&session)
|
||||
session2, err = db.GetUserSessionByToken("token1")
|
||||
assert.Nil(t, err)
|
||||
assert.Nil(t, session2)
|
||||
}
|
||||
|
||||
func TestTruncateUserSessions(t *testing.T) {
|
||||
db := setupTestDb(t)
|
||||
|
||||
session := UserSession{0, "token1", "Bertha", time.Now()}
|
||||
db.CreateUserSession(&session)
|
||||
db.TruncateUserSessions()
|
||||
session2, err := db.GetUserSessionByToken("token1")
|
||||
assert.Nil(t, err)
|
||||
assert.Nil(t, session2)
|
||||
}
|
||||
Reference in New Issue
Block a user