package auth import ( "gorm.io/gorm" "time" ) type repository interface { createRefreshToken(token *Session) error readRefreshToken(tokenUuid string) (Session, error) invalidateRefreshToken(refreshUuid string) error getCurrentSession(sessionUuid string) (Session, error) } type repo struct { db *gorm.DB } func newRepository(db *gorm.DB) *repo { return &repo{db: db} } func (r *repo) createRefreshToken(token *Session) error { return r.db.Create(token).Error } func (r *repo) readRefreshToken(tokenUuid string) (Session, error) { var tokenData Session if err := r.db. Where("refresh_uuid = ?", tokenUuid). Where("deleted_at IS NULL"). First(&tokenData).Error; err != nil { return Session{}, err } return tokenData, nil } func (r *repo) invalidateRefreshToken(refreshUuid string) error { return r.db. Model(&Session{}). Where("refresh_uuid = ?", refreshUuid). Update("deleted_at", time.Now().UTC()).Error } func (r *repo) getCurrentSession(sessionUuid string) (Session, error) { var s Session err := r.db.Where("refresh_uuid = ?", sessionUuid).Where("deleted_at IS NULL").Find(&s).Error return s, err }