package com.ttstd.signaling.store;

import com.ttstd.signaling.model.LoginSession;
import com.ttstd.signaling.model.PrincipalType;

import java.util.List;
import java.util.Optional;

/**
 * 登录会话存储抽象。生产环境由 JPA 实现，测试/演示由内存实现。
 */
public interface SessionStore {
    LoginSession save(LoginSession session);
    Optional<LoginSession> findBySessionId(String sessionId);
    List<LoginSession> listByPrincipal(String principalId);
    List<LoginSession> listByPrincipalAndType(String principalId, PrincipalType type);
    List<LoginSession> listAll();
    void delete(String sessionId);
    void deleteByPrincipal(String principalId);
    int revokeByPrincipal(String principalId);
    int revokeBySessionId(String sessionId);
    long countByPrincipalAndType(String principalId, PrincipalType type);
}
