268 lines
9.2 KiB
XML
268 lines
9.2 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}, '%')
|
|
</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 b.LOCBRDTTL 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>
|
|
|
|
<!-- 게시물 상세정보 조회 -->
|
|
<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
|
|
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}
|
|
ORDER BY CMNFLERDT DESC
|
|
</select>
|
|
|
|
<!-- 게시물 삭제 -->
|
|
<delete id="deleteBoard">
|
|
DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ}
|
|
</delete>
|
|
|
|
<!-- 게시물 삭제 시 댓글/대댓글 삭제 -->
|
|
<delete id="deleteCommentsByBoardId">
|
|
DELETE FROM localcomt
|
|
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>
|
|
|
|
<!-- 새 반응 삽입 -->
|
|
<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,c.LOCCMTPNT,
|
|
m.MEMBERNAM AS author
|
|
FROM localcomt c
|
|
LEFT JOIN netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
|
|
WHERE LOCBRDSEQ = #{LOCBRDSEQ} and LOCCMTPNT = 1
|
|
ORDER BY LOCCMTPNT ASC, LOCCMTUDT ASC
|
|
</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
|
|
FROM localcomt c
|
|
LEFT JOIN netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
|
|
WHERE LOCCMTPNT = #{LOCCMTPNT} and LOCCMTPNT != 1
|
|
ORDER BY LOCCMTPNT ASC, LOCCMTUDT ASC
|
|
</select>
|
|
|
|
<!-- 댓글/대댓글 작성 -->
|
|
<insert id="insertCommentOrReply">
|
|
INSERT INTO localcomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTUDT, LOCCMTPNT, MEMBERSEQ)
|
|
VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), NOW() , #{LOCCMTPNT}, #{MEMBERSEQ})
|
|
</insert>
|
|
|
|
<!-- 댓글/대댓글 수정 -->
|
|
<update id="updateComment">
|
|
UPDATE localcomt
|
|
SET LOCCMTRPY = #{LOCCMTRPY}, LOCCMTUDT = NOW()
|
|
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
|
|
</update>
|
|
|
|
<!-- 댓글 삭제 -->
|
|
<update id="updateSoftDeleteComment">
|
|
UPDATE localcomt
|
|
SET LOCCMTRPY = '삭제된 댓글입니다'
|
|
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>
|
|
|
|
<!-- 대댓글 삭제 -->
|
|
<delete id="deleteReply">
|
|
DELETE FROM localcomt
|
|
WHERE LOCCMTSEQ = #{LOCCMTSEQ}
|
|
AND LOCCMTPNT IS NOT NULL
|
|
</delete>
|
|
|
|
<!-- 대댓글인지 확인 -->
|
|
<select id="selectIsReply" resultType="boolean">
|
|
SELECT COUNT(1) > 0 FROM localcomt
|
|
WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPNT IS NOT NULL
|
|
</select>
|
|
|
|
<!-- 댓글에 대댓글이 있는지 확인 -->
|
|
<select id="selectHasReplies" resultType="boolean">
|
|
SELECT COUNT(1) > 0 FROM localcomt WHERE LOCCMTPNT = #{LOCCMTSEQ}
|
|
</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}
|
|
</select>
|
|
|
|
<!-- 첨부파일 유무 -->
|
|
<select id="selectIsAttachments" resultType="int">
|
|
SELECT COUNT(*)
|
|
FROM commonfil
|
|
WHERE CMNBRDSEQ = #{boardId}
|
|
</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>
|
|
|
|
|
|
</mapper>
|