File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<?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.project.ProjectMapper">
<!--
사업관리 목록에 붙일 값만 기관별로 한 번에 센다. 기관 현황 본체는 DashboardMapper가
이미 만들어 주므로 여기서 다시 조회하지 않는다(같은 숫자를 두 곳에서 세지 않기 위함).
-->
<select id="findSideInfo" resultType="kr.itn.itnhub.project.ProjectMapper$ProjectSideInfo">
select
o.id as org_id,
to_char(cl.last_on, 'YYYY-MM-DD') as last_contacted_on,
coalesce(cl.cnt, 0) as contact_count,
coalesce(rp.cnt, 0) as report_count
from organization o
left join (
select org_id, max(contacted_on) as last_on, count(*) as cnt
from contact_log group by org_id
) cl on cl.org_id = o.id
left join (
select org_id, count(*) as cnt from org_report group by org_id
) rp on rp.org_id = o.id
</select>
<!-- 연락 이력: 최근 연락일 순. 같은 날짜면 나중에 넣은 것이 위로 온다. -->
<select id="findLogsByOrg" resultType="kr.itn.itnhub.project.ContactLog">
select id, org_id,
to_char(contacted_on, 'YYYY-MM-DD') as contacted_on,
method, summary, author,
(extract(epoch from created_at) * 1000)::bigint as created_at
from contact_log
where org_id = #{orgId}
order by contacted_on desc, id desc
</select>
<insert id="insertLog">
insert into contact_log (org_id, contacted_on, method, summary, author)
values (#{orgId}, cast(#{contactedOn} as date), #{method}, #{summary}, #{author})
</insert>
<!-- 작성자는 처음 남긴 사람을 유지한다(업무메모와 같은 규칙). -->
<update id="updateLog">
update contact_log set
contacted_on = cast(#{contactedOn} as date),
method = #{method},
summary = #{summary}
where id = #{id} and org_id = #{orgId}
</update>
<delete id="deleteLog">
delete from contact_log where id = #{id} and org_id = #{orgId}
</delete>
<select id="findReportsByOrg" resultType="kr.itn.itnhub.project.OrgReport">
select id, org_id, file_name, content_type, byte_size, uploaded_by,
(extract(epoch from uploaded_at) * 1000)::bigint as uploaded_at
from org_report
where org_id = #{orgId}
order by uploaded_at desc, id desc
</select>
<insert id="insertReport">
insert into org_report (org_id, file_name, content_type, byte_size, content, uploaded_by)
values (#{orgId}, #{fileName}, #{contentType}, #{byteSize}, #{content}, #{uploadedBy})
</insert>
<select id="findReportContent" resultType="kr.itn.itnhub.project.ProjectMapper$ReportContent">
select file_name, content_type, content
from org_report
where id = #{id} and org_id = #{orgId}
</select>
<!--
보고서 교체(요구사항 [25]). 같은 자리에 새 파일을 덮어쓰고 올린 사람·시각을 갱신한다.
새 행을 만들지 않는 이유는 "고쳐 올리기"가 개정판 쌓기와 다른 동작이기 때문이다 -
개정판으로 남기고 싶으면 지금처럼 새로 올리면 된다.
-->
<update id="updateReport">
update org_report set
file_name = #{fileName},
content_type = #{contentType},
byte_size = #{byteSize},
content = #{content},
uploaded_by = #{uploadedBy},
uploaded_at = now()
where id = #{id} and org_id = #{orgId}
</update>
<delete id="deleteReport">
delete from org_report where id = #{id} and org_id = #{orgId}
</delete>
</mapper>