
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
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" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.co.takensoft.ai.system.project.dao.ProjectDAO">
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.11
내 용 : 프로젝트 resultMap
-->
<resultMap id="ProjectMap" type="ProjectVO">
<result property="projectId" column="project_id" />
<result property="projectGroupId" column="project_group_id" />
<result property="projectName" column="project_name" />
<result property="isMain" column="is_main" />
<result property="isFavorite" column="is_favorite"/>
<result property="useAt" column="use_at" />
<result property="imageId" column="project_image_id"/>
<result property="commentId" column="project_comment_id"/>
<result property="createdAt" column="created_at" />
<result property="updatedAt" column="updated_at" />
</resultMap>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.11
내 용 : 활성(사용중) 데이터만 조회하도록 필터링
-->
<sql id="activeOnly">
use_at = 'Y'
</sql>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.09
내 용 : 프로젝트 등록
-->
<insert id="saveProject" parameterType="projectVO">
INSERT INTO project
(project_id,
project_group_id,
project_name,
is_main,
use_at,
created_at,
updated_at
)
VALUES (
#{projectId},
#{projectGroupId},
#{projectName},
#{isMain},
#{useAt},
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP
)
</insert>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 프로젝트 조회
-->
<select id="findById" resultMap="ProjectMap" parameterType="String">
SELECT
p.project_id,
p.project_group_id,
p.project_name,
p.is_main,
p.use_at,
i.project_image_id,
c.project_comment_id,
TO_CHAR(p.created_at, 'YYYY-MM-DD HH24:MI') AS created_at,
TO_CHAR(p.updated_at, 'YYYY-MM-DD HH24:MI') AS updated_at
FROM project p
LEFT JOIN project_comment c ON p.project_id = c.project_id and c.use_at = 'Y'
LEFT JOIN project_image i ON p.project_id = i.project_id and i.use_at = 'Y'
WHERE p.project_id = #{projectId}
AND p.use_at = 'Y'
</select>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.10
내 용 : 사용자가 생성한 프로젝트 개수 조회
-->
<select id="countCreatedByMemberId">
SELECT COUNT(*)
FROM project_member pm
JOIN project p ON pm.project_group_id = p.project_group_id
WHERE member_id = #{memberId}
AND pm.is_owner = 'Y'
AND p.is_main = 'Y'
</select>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 대표 프로젝트 해제
-->
<update id="unsetProjectMain" parameterType="String">
UPDATE project
<set>
is_main = 'N',
updated_at = CURRENT_TIMESTAMP
</set>
WHERE project_group_id = #{projectGroupId}
AND is_main = 'Y'
AND use_at = 'Y'
</update>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 프로젝트 존재 여부 확인
-->
<select id="existsById" resultType="boolean" parameterType="String">
SELECT EXISTS (
SELECT 1
FROM project
WHERE project_id = #{projectId}
AND use_at = 'Y'
)
</select>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 프로젝트 그룹 아이디 조회
-->
<select id="findProjectGroupIdByProjectId" resultType="String" parameterType="String">
SELECT project_group_id
FROM project
WHERE project_id = #{projectId}
AND use_at = 'Y'
</select>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 프로젝트 이름 변경
-->
<update id="updateProjectName" parameterType="String">
UPDATE project
<set>
project_name = #{projectName},
updated_at = CURRENT_TIMESTAMP
</set>
WHERE project_id = #{projectId}
AND use_at = 'Y'
</update>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 그룹 내 프로젝트 모두 삭제 (use_at = 'N')
-->
<update id="deactivateProjectsByGroupId" parameterType="String">
UPDATE project
<set>
use_at = 'N',
updated_at = CURRENT_TIMESTAMP
</set>
WHERE project_group_id = #{projectGroupId}
AND use_at = 'Y'
</update>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 대표 프로젝트 설정
-->
<update id="setProjectMain" parameterType="String">
UPDATE project
<set>
is_main = 'Y',
updated_at = CURRENT_TIMESTAMP
</set>
WHERE project_id = #{projectId}
AND is_main = 'N'
AND use_at = 'Y'
</update>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.14
내 용 : 그룹 내에서 특정 프로젝트 이후에 생성된 프로젝트 모두 삭제 (use_at = 'N')
-->
<update id="deactivateProjectsCreatedAfter" parameterType="String">
UPDATE project
<set>
use_at = 'N',
updated_at = CURRENT_TIMESTAMP
</set>
WHERE project_group_id = #{projectGroupId}
AND created_at > (
SELECT created_at
FROM project
WHERE project_id = #{projectId}
)
</update>
<!--
작 성 자 : 박현정
작 성 일 : 2025.07.17
내 용 : 프로젝트 목록 조회 (검색 조건에 맞는 목록을 조회함)
-->
<select id="findAllProjects" parameterType="ProjectSearchReqDTO" resultMap="ProjectMap">
SELECT
p.project_id,
p.project_group_id,
p.project_name,
p.is_main,
pm.is_favorite,
p.created_at,
p.updated_at
FROM project p
JOIN project_member pm ON p.project_group_id = pm.project_group_id
<where>
pm.member_id = #{memberId}
<if test="projectGroupId != null">
AND p.project_group_id = #{projectGroupId}
</if>
<if test="isMain != null">
AND p.is_main = #{isMain}
</if>
<if test="projectName != null and isMain != ''">
AND p.project_name ILIKE CONCAT('%', #{projectName}, '%')
</if>
AND p.use_at = 'Y'
</where>
ORDER BY
pm.is_favorite DESC,
<choose>
<when test='"LATEST".equals(sortOption)'>
p.updated_at DESC
</when>
<when test='"OLDEST".equals(sortOption)'>
p.updated_at ASC
</when>
<when test='"NAME_ASC".equals(sortOption)'>
p.project_name ASC
</when>
<otherwise>
p.updated_at DESC
</otherwise>
</choose>
</select>
</mapper>