package domain import "time" // SessionID is a typed session identifier with prefix "ses_". type SessionID string // Session tracks a user login with device and location information. // The session ID is embedded in the JWT token for revocation support. type Session struct { ID SessionID UserID UserID IPAddress string UserAgent string DeviceLabel string LastActiveAt time.Time ExpiresAt time.Time RevokedAt *time.Time CreatedAt time.Time } // IsActive returns true if the session has not been revoked and has not expired. func (s *Session) IsActive() bool { return s.RevokedAt == nil && time.Now().Before(s.ExpiresAt) }