package com.lingniu.ingest.session;

import java.util.Optional;
import java.util.function.UnaryOperator;

/**
 * 设备会话存储 SPI。生产自动配置只创建 Redis 实现；测试可显式提供轻量实现。
 */
public interface SessionStore {

    void put(DeviceSession session);

    Optional<DeviceSession> findBySessionId(String sessionId);

    Optional<DeviceSession> findByVin(String vin);

    Optional<DeviceSession> findByPhone(String phone);

    /** 原子更新：读 → 修改 → 写。返回更新后的会话；若原会话不存在返回 empty。 */
    Optional<DeviceSession> update(String sessionId, UnaryOperator<DeviceSession> updater);

    void remove(String sessionId);

    int size();
}
