/**
 * 键值存储接口定义模块
 * @description 提供通用的键值存储抽象接口，用于管理上传相关的持久化数据
 * @module KvStore
 * @remarks 支持基本的增删改查操作，适用于多种存储后端实现
 */
import type { Upload } from '../models'

/**
 * 键值存储接口
 * @template T 存储的数据类型，默认为Upload
 * @description 定义了通用的键值存储操作方法
 * @interface
 */
export interface KvStore<T = Upload> {
  /**
   * 根据键获取对应的值
   * @param key 查询的键
   * @returns 异步返回对应的值，如果不存在则返回undefined
   */
  get(key: string): Promise<T | undefined>

  /**
   * 存储键值对
   * @param key 存储的键
   * @param value 存储的值
   * @returns 异步操作，完成存储
   */
  set(key: string, value: T): Promise<void>

  /**
   * 删除指定键的值
   * @param key 要删除的键
   * @returns 异步操作，完成删除
   */
  delete(key: string): Promise<void>

  /**
   * 可选的列出所有键的方法
   * @returns 异步返回所有键的数组，可选实现
   */
  list?(): Promise<Array<string>>
}