<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.itn.itnhub.re.ReMemoMapper">

  <!--
    memo_date는 화면이 그대로 쓰도록 yyyy-MM-dd 문자열로, created_at은 다른 매퍼와 같은
    관례로 밀리초 epoch로 내려준다.
  -->
  <sql id="columns">
    id, org_id, content, author,
    to_char(memo_date, 'YYYY-MM-DD') as memo_date,
    resolved,
    (extract(epoch from created_at) * 1000)::bigint as created_at
  </sql>

  <select id="findByOrg" resultType="kr.itn.itnhub.re.ReMemo">
    select <include refid="columns"/>
    from re_memo
    where org_id = #{orgId}
    order by memo_date desc, id desc
  </select>

  <select id="findById" resultType="kr.itn.itnhub.re.ReMemo">
    select <include refid="columns"/>
    from re_memo
    where org_id = #{orgId} and id = #{id}
  </select>

  <!-- 일자를 비워 보내면 오늘로 넣는다. -->
  <insert id="insert">
    insert into re_memo (org_id, content, author, memo_date, resolved, resolved_at)
    values (#{orgId}, #{content}, #{author},
            coalesce(cast(#{memoDate} as date), current_date),
            #{resolved},
            case when #{resolved} then now() else null end)
  </insert>

  <!-- 해결로 바뀌는 순간만 resolved_at을 찍고, 되돌리면 지운다. -->
  <update id="update">
    update re_memo set
      content     = #{content},
      author      = #{author},
      memo_date   = coalesce(cast(#{memoDate} as date), memo_date),
      resolved    = #{resolved},
      resolved_at = case
                      when #{resolved} and resolved_at is null then now()
                      when not #{resolved} then null
                      else resolved_at
                    end,
      updated_at  = now()
    where org_id = #{orgId} and id = #{id}
  </update>

  <delete id="delete">
    delete from re_memo where org_id = #{orgId} and id = #{id}
  </delete>

  <delete id="deleteByOrg">
    delete from re_memo where org_id = #{orgId}
  </delete>

</mapper>
