Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="in.shop2020.payment.persistence.RefundMapper">
  
  <resultMap type="refund" id="refundResult">
    <id property="id" column="id"/>
    <collection property="attributes" javaType="ArrayList" column="id" ofType="refundAttribute" select="getAttributesForRefund"/>
  </resultMap>
  
  <insert id="insertRefund" parameterType="refund" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO refund
      (gatewayId, paymentId, orderId, amount, attempts, createdAt) 
    VALUES
      (#{gatewayId}, #{paymentId}, #{orderId}, #{amount}, 0,  now())
  </insert>
  
  <insert id="insertRefundAttribute" parameterType="map">
    INSERT INTO refundattribute
      (refund_id, name, value)
    VALUES(#{refundId}, #{name}, #{value})
    ON DUPLICATE KEY UPDATE value=values(value);
  </insert>
  
  <update id="updateRefund" parameterType="refund">
    UPDATE refund
    SET
    <if test="processedAt != null">
      processedAt = #{processedAt},
    </if>
    attempts = #{attempts}
    WHERE id=#{id}
  </update>
  
  <sql id="selectAllRefundFields">
    SELECT * FROM refund
  </sql>
  
  <sql id="batchSizeLimit">
    <if test="batchSize !=0">
    LIMIT #{batchSize}
    </if>
  </sql>

  <select id="getRefund" parameterType="int" resultMap="refundResult">
    <include refid="selectAllRefundFields"/>
    WHERE id=#{id}
  </select>
  
  <select id="getRefunds" parameterType="int" resultMap="refundResult">
    <include refid="selectAllRefundFields"/>
    ORDER BY id
    <include refid="batchSizeLimit"/>
  </select>
  
  <select id="getPendingRefunds" parameterType="int" resultMap="refundResult">
    <include refid="selectAllRefundFields"/>
    WHERE processedAt is null and attempts &lt; 5
    ORDER BY id
        <include refid="batchSizeLimit"/>
  </select>

  <select id="getFailedRefunds" parameterType="int" resultMap="refundResult">
    <include refid="selectAllRefundFields"/>
    WHERE processedAt is null and attempts &gt;= 5
    ORDER BY id
    <include refid="batchSizeLimit"/>
  </select>
  
  <select id="getAttributesForRefund" parameterType="int" resultType="refundAttribute">
    SELECT * FROM refundattribute where refund_id = #{id}
  </select>
</mapper>