<?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="cn.iocoder.mall.order.biz.dao.CartMapper">

    <sql id="FIELDS">
        id, status, delete_time, selected, user_id,
        spu_id, sku_id, quantity, order_id, order_create_time,
        create_time
    </sql>

    <select id="selectById" parameterType="Integer" resultType="CartItemDO">
        SELECT
            <include refid="FIELDS" />
        FROM cart_item
        WHERE id = #{id}
--         AND deleted = 0
    </select>

    <select id="selectByIds" resultType="CartItemDO">
        SELECT
            <include refid="FIELDS" />
        FROM cart_item
        WHERE id IN
            <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
                #{id}
            </foreach>
--         AND deleted = 0
    </select>

    <select id="selectByUserIdAndSkuIdAndStatus" resultType="CartItemDO">
        SELECT
            <include refid="FIELDS" />
        FROM cart_item
        WHERE user_id = #{userId}
        AND sku_id = #{skuId}
        AND status = #{status}
--         AND deleted = 0
        LIMIT 1
    </select>

    <select id="selectByUserIdAndStatusAndSelected" resultType="CartItemDO">
        SELECT
            <include refid="FIELDS" />
        FROM cart_item
        WHERE user_id = #{userId}
        AND status = #{status}
        <if test="selected != null">
            AND selected = #{selected}
        </if>
        --         AND deleted = 0
    </select>

    <select id="selectQuantitySumByUserIdAndStatus" resultType="Integer">
        SELECT
            SUM(quantity)
        FROM cart_item
        WHERE user_id = #{userId}
        AND status = #{status}
--         AND deleted = 0
    </select>

    <insert id="insert" parameterType="CartItemDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO cart_item (
            status, delete_time, selected, user_id,
            spu_id, sku_id, quantity, order_id, order_create_time,
            create_time
        ) VALUES (
            #{status}, #{deleteTime}, #{selected}, #{userId},
            #{spuId}, #{skuId}, #{quantity}, #{orderId}, #{orderCreateTime},
            #{createTime}
        )
    </insert>

    <update id="update" parameterType="CartItemDO">
        UPDATE cart_item
        <set>
            <if test="status != null">
                status = #{status},
            </if>
            <if test="deleteTime != null">
                delete_time = #{deleteTime},
            </if>
            <if test="selected != null">
                selected = #{selected},
            </if>
            <if test="quantity != null">
                quantity = #{quantity},
            </if>
            <if test="orderId != null">
                order_id = #{orderId},
            </if>
            <if test="orderCreateTime != null">
                order_create_time = #{orderCreateTime},
            </if>
            <if test="price != null">
                price = #{price},
            </if>
            <if test="quantity != null">
                quantity = #{quantity},
            </if>
        </set>
        WHERE id = #{id}
    </update>

    <update id="updateQuantity" parameterType="CartItemDO">
        UPDATE cart_item
        SET quantity = quantity + #{quantityIncr}
        WHERE id = #{id}
    </update>

    <update id="updateListByUserIdAndSkuId">
        UPDATE cart_item
        <set>
            <if test="selected != null">
                selected = #{selected},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
        </set>
        WHERE user_id = #{userId}
        AND sku_id IN
            <foreach item="skuId" collection="skuIds" separator="," open="(" close=")" index="">
                #{skuId}
            </foreach>
        --         AND deleted = 0
    </update>

</mapper>