localhost-back/src/main/resources/mapper/localbordMapper.xml

444 lines
13 KiB
XML

<?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="io.company.localhost.mapper.localbordMapper">
<!-- 공지사항 조회 -->
<select id="selectNotices" resultType="io.company.localhost.common.dto.MapDto">
SELECT
b.LOCBRDSEQ AS id,
b.LOCBRDTTL AS title,
b.LOCBRDCON AS content,
b.LOCBRDUDT AS date,
b.LOCBRDCNT AS cnt,
m.MEMBERNAM AS author
FROM localbord b
LEFT JOIN netmember m ON b.MEMBERSEQ = m.MEMBERSEQ
WHERE LOCBRDTYP = '300103'
<if test="searchKeyword != null and searchKeyword != ''">
AND (
LOCBRDTTL LIKE CONCAT('%', #{searchKeyword}, '%')
OR LOCBRDCON LIKE CONCAT('%', #{searchKeyword}, '%')
OR MEMBERNAM LIKE CONCAT('%', #{searchKeyword}, '%')
)
</if>
ORDER BY LOCBRDUDT DESC
</select>
<!-- 자유/익명 게시판 조회 (작성자 이름 포함) -->
<select id="selectGeneralPosts" resultType="io.company.localhost.common.dto.MapDto">
SELECT
b.LOCBRDSEQ AS id,
b.LOCBRDTTL AS title,
b.LOCBRDCON AS content,
b.LOCBRDUDT AS date,
b.LOCBRDCNT AS cnt,
m.MEMBERNAM AS author
FROM localbord b
LEFT JOIN netmember m ON b.MEMBERSEQ = m.MEMBERSEQ
WHERE b.LOCBRDTYP IN ('300101', '300102')
<if test="searchKeyword != null and searchKeyword != ''">
AND (
LOCBRDTTL LIKE CONCAT('%', #{searchKeyword}, '%')
OR LOCBRDCON LIKE CONCAT('%', #{searchKeyword}, '%')
OR MEMBERNAM LIKE CONCAT('%', #{searchKeyword}, '%')
)
</if>
ORDER BY
<choose>
<when test="orderBy == 'date'"> b.LOCBRDUDT DESC </when>
<when test="orderBy == 'views'"> b.LOCBRDCNT DESC </when>
</choose>
</select>
<!-- 조회수 증가 -->
<update id="updateIncrementViewCount">
UPDATE localbord SET LOCBRDCNT = LOCBRDCNT + 1 WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</update>
<!-- 게시물 작성 -->
<insert id="insertBoard" parameterType="map" useGeneratedKeys="true" keyProperty="LOCBRDSEQ">
INSERT INTO localbord (LOCBRDTTL, LOCBRDCON, LOCBRDCAT, MEMBERSEQ, LOCBRDCNT, LOCBRDRDT, LOCBRDUDT, LOCBRDPWD, LOCBRDTYP)
VALUES (#{LOCBRDTTL}, #{LOCBRDCON}, #{LOCBRDCAT}, #{MEMBERSEQ}, 0, NOW(), NOW(), #{LOCBRDPWD}, #{LOCBRDTYP})
</insert>
<!-- 첨부파일 저장 -->
<insert id="insertAttachment" parameterType="map">
INSERT INTO commonfil (
CMNBRDSEQ,CMNFLENAM,CMNFLEORG,CMNFLEPAT,
CMNFLEEXT,CMNFLESIZ,CMNFLEREG,CMNFLERDT
) VALUES (
#{CMNBRDSEQ},#{CMNFLENAM},#{CMNFLEORG},#{CMNFLEPAT},
#{CMNFLEEXT},#{CMNFLESIZ},#{CMNFLEREG},NOW()
)
</insert>
<!-- 멀티 첨부파일 저장 -->
<insert id="insertAttachments" parameterType="map">
INSERT INTO commonfil (
CMNBRDSEQ,
CMNFLENAM,
CMNFLEORG,
CMNFLEPAT,
CMNFLEEXT,
CMNFLESIZ,
CMNFLEREG,
CMNFLERDT
) VALUES
<foreach collection="list" item="item" index="index" open="(" separator="),(" close=")">
#{LOCBRDSEQ},
#{item.saveFileName},
#{item.originalFileName},
#{item.filePath},
#{item.extension},
#{item.fileSize},
#{CMNFLEREG},
NOW()
</foreach>
</insert>
<!-- 에디터 첨부 이미지 저장 -->
<insert id="insertUploadEditorImageInfo" parameterType="map">
<selectKey keyProperty="id" order="AFTER" resultType="long">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO commonfil (
CMNFLENAM,
CMNFLEORG,
CMNFLEPAT,
CMNFLEEXT,
CMNFLESIZ,
CMNFLEREG,
CMNFLERDT,
CMNFLETYP
) VALUES (
#{CMNFLENAM},
#{CMNFLEORG},
#{CMNFLEPAT},
#{CMNFLEEXT},
#{CMNFLESIZ},
#{CMNFLEREG},
NOW(),
2
)
</insert>
<!-- 게시물 상세정보 조회 -->
<select id="selectBoardDetail" resultType="io.company.localhost.common.dto.MapDto">
SELECT
b.LOCBRDSEQ AS id,
b.LOCBRDTTL AS title,
b.LOCBRDCON AS content,
b.LOCBRDUDT AS date,
b.LOCBRDTYP AS type,
b.LOCBRDCNT AS cnt,
m.MEMBERNAM AS author,
m.MEMBERSEQ AS authorId,
m.MEMBERPRF AS profileImg
FROM localbord b
LEFT JOIN netmember m ON b.MEMBERSEQ = m.MEMBERSEQ
WHERE b.LOCBRDSEQ = #{boardId}
</select>
<!-- 게시물 상세정보 조회2 -->
<select id="selectBoardDetail2" resultType="io.company.localhost.common.dto.MapDto">
SELECT
b.LOCBRDSEQ AS id,
b.LOCBRDTTL AS title,
b.LOCBRDCON AS content,
b.LOCBRDUDT AS date,
b.LOCBRDTYP AS type,
b.LOCBRDCNT AS cnt,
b.LOCBRDPWD AS password,
m.MEMBERNAM AS author,
m.MEMBERSEQ AS authorId,
m.MEMBERPRF AS profileImg
FROM localbord b
LEFT JOIN netmember m ON b.MEMBERSEQ = m.MEMBERSEQ
WHERE b.LOCBRDSEQ = #{boardId}
</select>
<!-- 첨부파일 목록 조회 -->
<select id="selectAttachments" resultType="io.company.localhost.common.dto.MapDto">
SELECT CMNFLESEQ AS id, CMNFLEORG AS originalName, CMNFLENAM AS fileName, CMNFLEPAT AS path,
CMNFLEEXT AS extension, CMNFLESIZ AS size, CMNFLERDT AS uploadDate
FROM commonfil
WHERE CMNBRDSEQ = #{boardId} and CMNFLETYP = 1
ORDER BY CMNFLERDT DESC
</select>
<!-- 파일 목록 조회 -->
<select id="selectFilesInfo" resultType="io.company.localhost.vo.FileVo">
SELECT
CMNFLESEQ,
CMNBRDSEQ,
CMNFLENAM,
CMNFLEORG,
CMNFLEPAT,
CMNFLEEXT,
CMNFLESIZ,
CMNFLETYP
FROM
COMMONFIL
WHERE
CMNBRDSEQ = #{LOCBRDSEQ}
</select>
<!-- 파일 목록 조회 -->
<select id="deleteFiles">
DELETE FROM
COMMONFIL
WHERE
CMNBRDSEQ = #{LOCBRDSEQ}
</select>
<!-- 게시물 삭제 -->
<delete id="deleteBoard">
DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</delete>
<!-- 게시물 삭제 시 댓글/대댓글 삭제 -->
<delete id="deleteCommentsByBoardId">
DELETE FROM localcomt
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</delete>
<!-- 게시물 삭제 시 좋아요/싫어요 삭제 -->
<delete id="deleteGoodOrBadByBoardId">
DELETE FROM localgorb
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</delete>
<!-- 게시물 수정 -->
<update id="updateBoard">
UPDATE localbord
SET LOCBRDTTL = #{LOCBRDTTL}, LOCBRDCON = #{LOCBRDCON}, LOCBRDUDT = NOW()
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</update>
<!-- 기존 반응 조회 -->
<select id="selectReaction" resultType="io.company.localhost.common.dto.MapDto">
SELECT LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD
FROM localgorb
WHERE (LOCBRDSEQ = #{LOCBRDSEQ} OR (#{LOCBRDSEQ} IS NULL AND LOCBRDSEQ IS NULL))
AND (LOCCMTSEQ = #{LOCCMTSEQ} OR (#{LOCCMTSEQ} IS NULL AND LOCCMTSEQ IS NULL))
AND MEMBERSEQ = #{MEMBERSEQ}
</select>
<!-- 반응 업데이트 -->
<update id="updateReaction">
UPDATE localgorb
SET LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD}
WHERE (LOCBRDSEQ = #{LOCBRDSEQ} OR (#{LOCBRDSEQ} IS NULL AND LOCBRDSEQ IS NULL))
AND (LOCCMTSEQ = #{LOCCMTSEQ} OR (#{LOCCMTSEQ} IS NULL AND LOCCMTSEQ IS NULL))
AND MEMBERSEQ = #{MEMBERSEQ}
</update>
<update id="updateBoardIndexToFile">
UPDATE
COMMONFIL
SET
CMNBRDSEQ = #{LOCBRDSEQ}
WHERE
CMNFLESEQ IN
<foreach collection="editorImgList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</update>
<!-- 새 반응 삽입 -->
<insert id="insertReaction">
INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD)
VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD})
</insert>
<!-- 댓글 조회 -->
<select id="selectComments" resultType="io.company.localhost.common.dto.MapDto">
SELECT
c.LOCCMTSEQ,c.LOCBRDSEQ,c.LOCCMTPNT,c.LOCCMTRPY,
c.LOCCMTUDT,c.LOCCMTPWD,c.LOCCMTRDT,
m.MEMBERNAM AS author,
m.MEMBERSEQ AS authorId,
c.LOCCMTNIC
FROM localcomt c
LEFT JOIN netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
WHERE LOCBRDSEQ = #{LOCBRDSEQ} and LOCCMTPNT = 1
ORDER BY LOCCMTRDT DESC
</select>
<!-- 대댓글 조회 -->
<select id="selectReply" resultType="io.company.localhost.common.dto.MapDto">
SELECT
c.LOCCMTSEQ,c.LOCBRDSEQ,c.LOCCMTPNT,c.LOCCMTRPY,
c.LOCCMTUDT,c.LOCCMTPWD,c.LOCCMTRDT,c.LOCCMTPNT,
m.MEMBERNAM AS author,
m.MEMBERSEQ AS authorId,
m.MEMBERPRF AS profileImg,
c.LOCCMTNIC
FROM localcomt c
LEFT JOIN netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
WHERE LOCCMTPNT = #{LOCCMTPNT} and LOCCMTPNT != 1
ORDER BY LOCCMTRDT DESC
</select>
<!-- 댓글/대댓글 작성 -->
<insert id="insertCommentOrReply">
INSERT INTO localcomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTUDT, LOCCMTPNT, MEMBERSEQ,LOCCMTNIC)
VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), NOW() , #{LOCCMTPNT}, #{MEMBERSEQ},#{LOCCMTNIC})
</insert>
<!-- 댓글/대댓글 수정 -->
<update id="updateComment">
UPDATE localcomt
SET LOCCMTRPY = #{LOCCMTRPY}, LOCCMTUDT = NOW()
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
</update>
<!-- 댓글 삭제 -->
<update id="updateSoftDeleteComment">
UPDATE localcomt
SET LOCCMTRPY = '삭제된 댓글입니다',
LOCCMTUDT = NOW()
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
AND EXISTS (
SELECT 1 FROM localcomt WHERE LOCCMTPNT = #{LOCCMTSEQ}
)
</update>
<!-- 댓글 삭제 (대댓글 없을 경우) -->
<delete id="deleteComment">
DELETE FROM localcomt
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
AND NOT EXISTS (
SELECT 1 FROM localcomt WHERE LOCCMTPNT = #{LOCCMTSEQ}
)
</delete>
<!-- 특정 댓글에 달린 대댓글 개수 조회 -->
<select id="selectReplyCount" resultType="int">
SELECT COUNT(*)
FROM localcomt
WHERE LOCCMTPNT = #{LOCCMTSEQ}
AND LOCCMTPNT IS NOT NULL
</select>
<!-- 댓글 비밀번호 조회 -->
<select id="selectCommentPassword" resultType="String">
SELECT LOCCMTPWD
FROM localcomt
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
</select>
<!-- 게시물 비밀번호 조회 -->
<select id="selectBoardPassword" resultType="String">
SELECT LOCBRDPWD
FROM localbord
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
</select>
<!-- 댓글 id확인 -->
<select id="selectCommentById" resultType="io.company.localhost.common.dto.MapDto">
SELECT LOCCMTSEQ AS id, LOCCMTPNT AS point
FROM localcomt
WHERE LOCCMTSEQ = #{commentId}
</select>
<!-- 댓글 개수 조회 -->
<select id="selectCountComments" parameterType="long" resultType="int">
SELECT COUNT(*)
FROM localcomt
WHERE LOCBRDSEQ = #{boardId} and LOCCMTPNT = 1
</select>
<!-- 첨부파일 유무 -->
<select id="selectIsAttachments" resultType="int">
SELECT COUNT(*)
FROM commonfil
WHERE CMNBRDSEQ = #{boardId} and CMNFLETYP = 1
</select>
<!-- 게시물 좋아요/싫어요 개수 조회 -->
<select id="selectCountBoardReactions" resultType="io.company.localhost.common.dto.MapDto">
SELECT
COALESCE(SUM(CASE WHEN LOCGOBGOD = 'T' THEN 1 ELSE 0 END), 0) AS likeCount,
COALESCE(SUM(CASE WHEN LOCGOBBAD = 'T' THEN 1 ELSE 0 END), 0) AS dislikeCount
FROM localgorb
WHERE LOCBRDSEQ = #{boardId};
</select>
<!-- 댓글별 좋아요/싫어요 개수 조회 -->
<select id="selectCountCommentReactions" parameterType="long" resultType="io.company.localhost.common.dto.MapDto">
SELECT
LOCCMTSEQ,
COALESCE(SUM(CASE WHEN LOCGOBGOD = 'T' THEN 1 ELSE 0 END), 0) AS likeCount,
COALESCE(SUM(CASE WHEN LOCGOBBAD = 'T' THEN 1 ELSE 0 END), 0) AS dislikeCount
FROM localgorb
WHERE LOCCMTSEQ = #{commentId}
LIMIT 1
</select>
<!-- 삭제 파일 정보 조회 -->
<select id="selectDelFileInfo" >
SELECT
CMNFLEPAT
FROM
commonfil
WHERE
CMNFLESEQ in
<foreach collection="array" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<!-- 파일 정보 삭제 -->
<delete id="deleteFileInfo" >
DELETE FROM
commonfil
WHERE
CMNFLESEQ in
<foreach collection="array" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</delete>
<!-- 프로파일 이미지 조회 -->
<select id="selectUserProfileImg">
SELECT
MEMBERPRF
FROM
NETMEMBER
WHERE
MEMBERSEQ = ${userId}
</select>
<!-- 게시글 정보가 없는 파일 조회-->
<select id="selectFilesBoardIndexIsNull" resultType="io.company.localhost.vo.FileVo">
SELECT
CMNFLESEQ,
CMNBRDSEQ,
CMNFLENAM,
CMNFLEORG,
CMNFLEPAT,
CMNFLEEXT,
CMNFLESIZ,
CMNFLETYP
FROM
COMMONFIL
WHERE
CMNBRDSEQ IS NULL
</select>
<!-- 파일 데이터 삭제 -->
<delete id="deleteTrashFileData">
DELETE FROM
COMMONFIL
WHERE
CMNFLESEQ = #{CMNFLESEQ}
</delete>
</mapper>