package auth import ( "gorm.io/gorm" "time" ) type Repository interface { CreateRefreshToken(token *Session) error ReadRefreshToken(userUuid, tokenUuid, sessionUuid string) (Session, error) InvalidateRefreshToken(userUuid, refreshUuid, sessionUuid string) 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(userUuid, tokenUuid, sessionUuid string) (Session, error) { var tokenData Session if err := r.db. Where("user_uuid = ?", userUuid). Where("refresh_uuid = ?", tokenUuid). Where("session_uuid = ?", sessionUuid). Where("deleted_at IS NULL"). First(&tokenData).Error; err != nil { return Session{}, err } return tokenData, nil } func (r *repo) InvalidateRefreshToken(userUuid, refreshUuid, sessionUuid string) error { return r.db. Model(&Session{}). Where("user_uuid = ?", userUuid). Where("refresh_uuid = ?", refreshUuid). Where("session_uuid = ?", sessionUuid). Update("deleted_at", time.Now().UTC()).Error }