package com.lingyue.graph.repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lingyue.graph.entity.GraphRelation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 图关系Repository
 * 
 * @author lingyue
 * @since 2026-01-14
 */
@Mapper
public interface GraphRelationRepository extends BaseMapper<GraphRelation> {
    
    /**
     * 根据源节点ID查询关系列表
     * 
     * @param fromNodeId 源节点ID
     * @return 关系列表
     */
    @Select("SELECT * FROM graph_relations WHERE from_node_id = #{fromNodeId} ORDER BY order_index")
    List<GraphRelation> findByFromNodeId(@Param("fromNodeId") String fromNodeId);
    
    /**
     * 根据目标节点ID查询关系列表
     * 
     * @param toNodeId 目标节点ID
     * @return 关系列表
     */
    @Select("SELECT * FROM graph_relations WHERE to_node_id = #{toNodeId}")
    List<GraphRelation> findByToNodeId(@Param("toNodeId") String toNodeId);
    
    /**
     * 查询节点的所有关系（包括作为源节点和目标节点）
     * 
     * @param nodeId 节点ID
     * @return 关系列表
     */
    @Select("SELECT * FROM graph_relations WHERE from_node_id = #{nodeId} OR to_node_id = #{nodeId}")
    List<GraphRelation> findByNodeId(@Param("nodeId") String nodeId);
    
    /**
     * 根据关系类型查询
     * 
     * @param relationType 关系类型
     * @return 关系列表
     */
    @Select("SELECT * FROM graph_relations WHERE relation_type = #{relationType}")
    List<GraphRelation> findByRelationType(@Param("relationType") String relationType);
}
