50 lines
1.9 KiB
Go
50 lines
1.9 KiB
Go
package repos
|
|
|
|
import (
|
|
"context"
|
|
"gralias/models"
|
|
"time"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
type SessionsRepo interface {
|
|
SessionByToken(ctx context.Context, token string) (*models.Session, error)
|
|
SessionCreate(ctx context.Context, session *models.Session) error
|
|
SessionUpdate(ctx context.Context, session *models.Session) error
|
|
SessionDelete(ctx context.Context, token string) error
|
|
}
|
|
|
|
func (p *RepoProvider) SessionByToken(ctx context.Context, token string) (*models.Session, error) {
|
|
db := getDB(ctx, p.DB)
|
|
session := &models.Session{}
|
|
// The lifetime in the DB is in seconds, but in the model it is in minutes.
|
|
err := sqlx.GetContext(ctx, db, session, `SELECT id, updated_at, lifetime / 60 as lifetime, token_key, username FROM sessions WHERE token_key = ? LIMIT 1;`, token)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return session, nil
|
|
}
|
|
|
|
func (p *RepoProvider) SessionCreate(ctx context.Context, session *models.Session) error {
|
|
db := getDB(ctx, p.DB)
|
|
// The lifetime in the model is in minutes, but in the DB it is in seconds.
|
|
_, err := db.ExecContext(ctx, `INSERT INTO sessions (updated_at, lifetime, token_key, username) VALUES (?, ?, ?, ?) ON CONFLICT (token_key) DO UPDATE SET updated_at=CURRENT_TIMESTAMP, lifetime=excluded.lifetime;`,
|
|
time.Now(), session.Lifetime*60, session.TokenKey, session.Username)
|
|
return err
|
|
}
|
|
|
|
func (p *RepoProvider) SessionUpdate(ctx context.Context, session *models.Session) error {
|
|
db := getDB(ctx, p.DB)
|
|
// The lifetime in the model is in minutes, but in the DB it is in seconds.
|
|
_, err := db.ExecContext(ctx, `UPDATE sessions SET updated_at = ?, lifetime = ? WHERE token_key = ?`,
|
|
time.Now(), session.Lifetime*60, session.TokenKey)
|
|
return err
|
|
}
|
|
|
|
func (p *RepoProvider) SessionDelete(ctx context.Context, token string) error {
|
|
db := getDB(ctx, p.DB)
|
|
_, err := db.ExecContext(ctx, `DELETE FROM sessions WHERE token_key = ?`, token)
|
|
return err
|
|
}
|