package com.funtl.spring.cloud.alibaba.seata.service.impl;

import com.funtl.spring.cloud.alibaba.seata.domain.TbOrder;
import com.funtl.spring.cloud.alibaba.seata.domain.TbOrderItem;
import com.funtl.spring.cloud.alibaba.seata.service.api.SeataProviderTransactionService;
import com.funtl.spring.cloud.alibaba.seata.service.api.TbOrderItemService;
import com.funtl.spring.cloud.alibaba.seata.service.api.TbOrderService;
import io.seata.spring.annotation.GlobalTransactional;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.annotation.Service;

@Service(version = "1.0.0")
public class SeataProviderTransactionServiceImpl implements SeataProviderTransactionService {

    @Reference(version = "1.0.0")
    private TbOrderService orderService;

    @Reference(version = "1.0.0")
    private TbOrderItemService orderItemService;

    @Override
    @GlobalTransactional
    public void createOrder(TbOrder order, TbOrderItem orderItem) {
        orderService.insert(order);
        orderItemService.insert(orderItem);

        // 抛出异常用以测试分布式事务是否回滚
        if (order.getUserId().equals(1L)) {
            throw new RuntimeException("Exception for seata.");
        }
    }
}