package com.spot.service;

import com.spot.req.TransferReq;
import com.spot.resp.ApiResultVo;

/**
 * 账户划转服务接口
 * 提供资金账户（member_wallet）与现货账户（account）之间的双向划转能力
 *
 * @author jean
 * @date 2026-05-08
 */
public interface TransferService {

    /**
     * 执行账户划转
     * <p>
     * 支持方向：
     * <ul>
     *   <li>资金账户 → 现货账户：扣减 member_wallet.balance，增加 account.hot_money</li>
     *   <li>现货账户 → 资金账户：扣减 account.hot_money，增加 member_wallet.balance</li>
     * </ul>
     * 两张流水表（account_record、member_transaction）均会记录本次操作。
     * 全程在同一事务内完成，任意步骤失败均触发全量回滚。
     *
     * @param uid  用户ID
     * @param req  划转请求
     * @param lang 语言标识
     * @return 操作结果
     */
    ApiResultVo<Void> transfer(Long uid, TransferReq req, String lang);
}
