34 lines
1.2 KiB
Go
34 lines
1.2 KiB
Go
package port
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.threesix.ai/jordan/persona-community-2/services/persona-api/internal/domain"
|
|
)
|
|
|
|
// SessionRepository defines the interface for session persistence.
|
|
type SessionRepository interface {
|
|
// Create persists a new session record.
|
|
Create(ctx context.Context, session *domain.Session) error
|
|
|
|
// Get returns a session by ID. Returns domain.ErrSessionNotFound if not found.
|
|
Get(ctx context.Context, id domain.SessionID) (*domain.Session, error)
|
|
|
|
// ListByUser returns all active (non-revoked) sessions for a user.
|
|
ListByUser(ctx context.Context, userID domain.UserID) ([]domain.Session, error)
|
|
|
|
// UpdateLastActive updates the last_active_at timestamp for a session.
|
|
UpdateLastActive(ctx context.Context, id domain.SessionID) error
|
|
|
|
// Revoke marks a session as revoked by setting revoked_at.
|
|
Revoke(ctx context.Context, id domain.SessionID) error
|
|
|
|
// RevokeAllForUser revokes all sessions for a user.
|
|
// If exceptID is non-nil, that session is kept active.
|
|
RevokeAllForUser(ctx context.Context, userID domain.UserID, exceptID *domain.SessionID) error
|
|
|
|
// DeleteExpired removes sessions that have passed their expiry time.
|
|
// Returns the number of sessions deleted.
|
|
DeleteExpired(ctx context.Context) (int, error)
|
|
}
|