
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">
<!--
작성자 : takensoft
작성일 : 2024.04.03
내 용 : 회원정보 관련
-->
<mapper namespace="com.takensoft.cms.mber.dao.MberDAO">
<!-- 회원 정보 resultMap(권한 포함) -->
<resultMap id="mberMap" type="MberVO">
<result property="mbrId" column="mbr_id" />
<result property="lgnId" column="lgn_id" />
<result property="mbrNm" column="mbr_nm" />
<result property="ncnm" column="ncnm" />
<result property="pswd" column="pswd" />
<result property="mblTelno" column="mbl_telno" />
<result property="telno" column="telno" />
<result property="eml" column="eml" />
<result property="zip" column="zip" />
<result property="addr" column="addr" />
<result property="daddr" column="daddr" />
<result property="mbrStts" column="mbr_stts" />
<result property="useYn" column="use_yn" />
<result property="cntrlDt" column="cntrl_dt" />
<result property="cntrlRsn" column="cntrl_rsn" />
<result property="smsRcptnAgreYn" column="sms_rcptn_agre_yn" />
<result property="emlRcptnAgreYn" column="eml_rcptn_agre_yn" />
<result property="prvcRlsYn" column="prvc_rls_yn" />
<result property="mbrType" column="mbr_type" />
<result property="pswdChgDt" column="pswd_chg_dt" />
<result property="frstRegIp" column="frst_reg_ip" />
<result property="sysPvsnYn" column="sys_pvsn_yn" />
<result property="rgtr" column="rgtr" />
<result property="regDt" column="reg_dt" />
<result property="mdfr" column="mdfr" />
<result property="mdfcnDt" column="mdfcn_dt" />
<collection property="authorList" column="{mbrId = mbr_id}" javaType="java.util.ArrayList" ofType="MberAuthorVO" select="findByMberAuthor" />
</resultMap>
<!-- 회원, 권한 매핑 -->
<resultMap id="authMap" type="MberAuthorVO">
<result property="mbrId" column="mbr_id" />
<result property="authrtNm" column="authrt_nm" />
<result property="authrtCd" column="authrt_cd" />
<result property="rgtr" column="rgtr" />
<result property="regDt" column="reg_dt" />
</resultMap>
<!-- 소셜 계정 정보 resultMap -->
<resultMap id="socialAccountMap" type="MberSocialAccountVO">
<result property="id" column="id" />
<result property="mbrId" column="mbr_id" />
<result property="lgnOffrType" column="lgn_offr_type" />
<result property="snsLgnId" column="sns_lgn_id" />
<result property="lgnId" column="lgn_id" />
<result property="snsEml" column="sns_eml" />
<result property="snsNm" column="sns_nm" />
<result property="mainPrflYn" column="main_prfl_yn" />
<result property="linkVtlzYn" column="link_vtlz_yn" />
<result property="linkDt" column="link_dt" />
<result property="linkCncltnDt" column="link_cncltn_dt" />
<result property="rgtr" column="rgtr" />
<result property="regDt" column="reg_dt" />
<result property="mdfr" column="mdfr" />
<result property="mdfcnDt" column="mdfcn_dt" />
</resultMap>
<sql id="selectMber">
SELECT mi.mbr_id
, mi.lgn_id
, mi.mbr_nm
, mi.ncnm
, mi.pswd
, mi.mbl_telno
, mi.telno
, mi.eml
, mi.zip
, mi.addr
, mi.daddr
, mi.mbr_stts
, mi.use_yn
, TO_CHAR(mi.cntrl_dt, 'YYYY-MM-DD') AS cntrl_dt
, mi.cntrl_rsn
, mi.sms_rcptn_agre_yn
, mi.eml_rcptn_agre_yn
, mi.prvc_rls_yn
, mi.mbr_type
, TO_CHAR(mi.pswd_chg_dt, 'YYYY-MM-DD HH24:MI') AS pswd_chg_dt
, mi.frst_reg_ip
, mi.sys_pvsn_yn
, mi.rgtr
, TO_CHAR(mi.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
, mi.mdfr
, TO_CHAR(mi.mdfcn_dt, 'YYYY-MM-DD HH24:MI') AS mdfcn_dt
FROM mbr_info mi
</sql>
<!--
작성자 : takensoft
내 용 : 회원정보 조회
-->
<select id="findByMberSecurity" parameterType="String" resultMap="mberMap">
<include refid="selectMber" />
WHERE EXISTS (
SELECT 1 FROM mbr_sns_acnt_info msai
WHERE msai.mbr_id = mi.mbr_id
AND (
(msai.lgn_offr_type = 'S' AND msai.lgn_id = #{lgnId})
OR (msai.lgn_offr_type != 'S' AND msai.sns_lgn_id = #{lgnId})
)
AND msai.link_vtlz_yn = true
)
AND mi.use_yn = 'Y'
LIMIT 1
</select>
<!--
통합 로그인: 제공자별 사용자 조회
-->
<select id="findByUnifiedLogin" parameterType="map" resultMap="mberMap">
<include refid="selectMber" />
WHERE EXISTS (
SELECT 1 FROM mbr_sns_acnt_info msai
WHERE msai.mbr_id = mi.mbr_id
<if test="lgnOffrType != null and 'S'.equals(lgnOffrType)">
AND msai.lgn_offr_type = 'S'
AND msai.lgn_id = #{identifier}
</if>
<if test="lgnOffrType != null and !'S'.equals(lgnOffrType)">
AND msai.lgn_offr_type = #{lgnOffrType}
AND msai.sns_lgn_id = #{identifier}
</if>
AND msai.link_vtlz_yn = true
)
AND mi.use_yn = 'Y'
AND mi.mbr_stts = '1'
LIMIT 1
</select>
<!--
작성자 : takensoft
작성일 : 2024.04.03
내 용 : 로그인 아이디 중복 확인
-->
<select id="findByCheckLoginId" parameterType="String" resultType="boolean">
SELECT COUNT(*) > 0
FROM mbr_sns_acnt_info msai
JOIN mbr_info mi ON msai.mbr_id = mi.mbr_id
WHERE msai.lgn_offr_type = 'S'
AND msai.lgn_id = #{lgnId}
AND msai.link_vtlz_yn = true
AND mi.use_yn = 'Y'
</select>
<!--
작성자 : takensoft
작성일 : 2024.04.03
내 용 : 회원가입
-->
<insert id="save" parameterType="JoinDTO">
INSERT INTO mbr_info (
mbr_id
, lgn_id
, mbr_nm
, ncnm
, pswd
, mbl_telno
, telno
, eml
, zip
, addr
, daddr
, mbr_stts
, use_yn
, cntrl_dt
, cntrl_rsn
, sms_rcptn_agre_yn
, eml_rcptn_agre_yn
, prvc_rls_yn
, mbr_type
, pswd_chg_dt
, frst_reg_ip
, sys_pvsn_yn
, rgtr
, reg_dt
) VALUES (
#{mbrId}
, #{lgnId}
, #{mbrNm}
, #{ncnm}
, #{pswd}
, #{mblTelno}
, #{telno}
, #{eml}
, #{zip}
, #{addr}
, #{daddr}
, #{mbrStts}
, 'Y'
, #{cntrlDt}::timestamp
, #{cntrlRsn}
, #{smsRcptnAgreYn}
, #{emlRcptnAgreYn}
, #{prvcRlsYn}
, #{mbrType}
, NOW()
, #{frstRegIp}
, '1'
, #{rgtr}
, NOW()
)
</insert>
<!--
작성자 : takensoft
작성일 : 2024.04.03
내 용 : 회원 권한 등록
-->
<insert id="authorSave" parameterType="MberAuthorVO">
INSERT INTO mbr_authrt_info (
mbr_id
, authrt_cd
, rgtr
, reg_dt
) VALUES (
#{mbrId}
, #{authrtCd}
, #{rgtr}
, NOW()
)
</insert>
<!--
작성자 : takensoft
작성일 : 2024.04.15
내 용 : 비밀번호 변경
-->
<update id="updatePassword" parameterType="PasswordDTO">
UPDATE mbr_info
SET pswd = #{newPswd}
, mdfr = #{mdfr}
, mdfcn_dt = NOW()
WHERE mbr_id = #{mbrId}
</update>
<!--
작성자 : takensoft
작성일 : 2024.04.15
내 용 : 회원정보 조회
-->
<select id="findByMber" parameterType="String" resultMap="mberMap">
<include refid="selectMber" />
WHERE mi.mbr_id = #{mbrId}
AND mi.use_yn = 'Y'
</select>
<!--
작성자 : takensoft
작성일 : 2024.04.03
내 용 : 회원 권한 정보 조회
-->
<select id="findByMberAuthor" parameterType="MberVO" resultMap="authMap">
SELECT mai.mbr_id
, mai.authrt_cd
, mai.rgtr
, TO_CHAR(mai.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
FROM mbr_authrt_info mai
WHERE mai.mbr_id = #{mbrId}
</select>
<!-- 이메일로만 사용자 조회 -->
<select id="findByEmail" parameterType="map" resultType="MberVO">
SELECT
m.mbr_id as mbrId,
m.lgn_id as lgnId,
m.mbr_nm as mbrNm,
m.ncnm,
m.pswd,
m.mbl_telno as mblTelno,
m.telno,
m.eml,
m.zip,
m.addr,
m.daddr,
m.mbr_stts as mbrStts,
m.use_yn as useYn,
m.cntrl_dt as cntrlDt,
m.cntrl_rsn as cntrlRsn,
m.sms_rcptn_agre_yn as smsRcptnAgreYn,
m.eml_rcptn_agre_yn as emlRcptnAgreYn,
m.prvc_rls_yn as prvcRlsYn,
m.mbr_type as mbrType,
m.pswd_chg_dt as pswdChgDt,
m.frst_reg_ip as frstRegIp,
m.sys_pvsn_yn as sysPvsnYn,
m.rgtr,
m.reg_dt as regDt,
m.mdfr,
m.mdfcn_dt as mdfcnDt
FROM mbr_info m
WHERE m.eml = #{eml}
AND m.use_yn = 'Y'
AND m.mbr_stts = '1'
<if test="mbrId != null and mbrId != ''">
AND m.mbr_id != #{mbrId}
</if>
</select>
<!-- 이메일과 회원 유형으로 사용자 조회 -->
<select id="findByEmailAndProvider" parameterType="map" resultMap="mberMap">
<include refid="selectMber" />
WHERE mi.eml = #{email}
AND mi.mbr_type = #{mbrType}
AND mi.use_yn = 'Y'
AND mi.mbr_stts = '1'
</select>
<!-- 회원 ID로 권한 목록 조회 -->
<select id="findAuthoritiesByMbrId" parameterType="String" resultMap="authMap">
SELECT mai.mbr_id
, mai.authrt_cd
, mai.rgtr
, TO_CHAR(mai.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
FROM mbr_authrt_info mai
WHERE mai.mbr_id = #{mbrId}
</select>
<!-- OAuth2 사용자 저장 -->
<insert id="saveOAuthUser" parameterType="MberVO">
INSERT INTO mbr_info (
mbr_id,
lgn_id,
mbr_nm,
ncnm,
eml,
mbr_stts,
use_yn,
sms_rcptn_agre_yn,
eml_rcptn_agre_yn,
prvc_rls_yn,
mbr_type,
sys_pvsn_yn,
rgtr,
reg_dt,
pswd,
frst_reg_ip
) VALUES (
#{mbrId},
#{lgnId},
#{mbrNm},
#{ncnm},
#{eml},
#{mbrStts},
'Y',
'N',
'N',
'N',
#{mbrType},
#{sysPvsnYn},
#{rgtr},
NOW(),
#{pswd},
#{frstRegIp}
)
</insert>
<!-- OAuth2 사용자 정보 업데이트 -->
<update id="updateOAuthUser" parameterType="MberVO">
UPDATE mbr_info
SET
mbr_nm = #{mbrNm},
ncnm = #{ncnm},
mdfr = #{mdfr},
mdfcn_dt = NOW()
WHERE mbr_id = #{mbrId}
</update>
<!-- 기존 계정에 OAuth2 정보 연동 -->
<update id="linkOAuth2Account" parameterType="MberVO">
UPDATE mbr_info
SET
mbr_type = #{mbrType},
mdfr = #{mdfr},
mdfcn_dt = NOW()
WHERE mbr_id = #{mbrId}
</update>
<!-- 소셜 계정 정보 저장 -->
<insert id="saveSocialAccount" parameterType="MberSocialAccountVO">
INSERT INTO mbr_sns_acnt_info (
mbr_id,
lgn_offr_type,
sns_lgn_id,
lgn_id,
sns_eml,
sns_nm,
main_prfl_yn,
link_vtlz_yn,
rgtr
) VALUES (
#{mbrId},
#{lgnOffrType},
#{snsLgnId},
#{lgnId},
#{snsEml},
#{snsNm},
#{mainPrflYn},
#{linkVtlzYn},
#{rgtr}
)
</insert>
<!-- 이메일로 모든 연동 계정 조회 -->
<select id="findAllAccountsByEmail" parameterType="String" resultMap="mberMap">
<include refid="selectMber" />
WHERE mi.eml = #{email}
AND mi.use_yn = 'Y'
AND mi.mbr_stts = '1'
LIMIT 1
</select>
<!-- 회원 ID로 소셜 계정 목록 조회 -->
<select id="findSocialAccountsByMbrId" parameterType="String" resultMap="socialAccountMap">
SELECT id, mbr_id, lgn_offr_type, sns_lgn_id, lgn_id, sns_eml, sns_nm,
main_prfl_yn, link_vtlz_yn, link_dt, link_cncltn_dt, rgtr, reg_dt, mdfr, mdfcn_dt
FROM mbr_sns_acnt_info
WHERE mbr_id = #{mbrId}
AND link_vtlz_yn = true
ORDER BY main_prfl_yn DESC, link_dt ASC
</select>
<!-- 특정 제공자로 소셜 계정 조회 -->
<select id="findSocialAccountByProvider" parameterType="map" resultMap="socialAccountMap">
SELECT id, mbr_id, lgn_offr_type, sns_lgn_id, lgn_id, sns_eml, sns_nm,
main_prfl_yn, link_vtlz_yn, link_dt, link_cncltn_dt, rgtr, reg_dt, mdfr, mdfcn_dt
FROM mbr_sns_acnt_info
WHERE mbr_id = #{mbrId}
AND lgn_offr_type = #{lgnOffrType}
AND link_vtlz_yn = true
</select>
<!-- 소셜 계정 연동 -->
<insert id="linkSocialAccount" parameterType="MberSocialAccountVO">
INSERT INTO mbr_sns_acnt_info (
mbr_id,
lgn_offr_type,
sns_lgn_id,
lgn_id,
sns_eml,
sns_nm,
main_prfl_yn,
link_vtlz_yn,
rgtr
) VALUES (
#{mbrId},
#{lgnOffrType},
#{snsLgnId},
#{lgnId},
#{snsEml},
#{snsNm},
#{mainPrflYn},
#{linkVtlzYn},
#{rgtr}
)
ON CONFLICT (mbr_id, lgn_offr_type)
DO UPDATE SET
sns_lgn_id = #{snsLgnId},
lgn_id = #{lgnId},
sns_eml = #{snsEml},
sns_nm = #{snsNm},
link_vtlz_yn = true,
link_cncltn_dt = NULL,
mdfr = #{rgtr},
mdfcn_dt = NOW()
</insert>
<!-- 소셜 계정 연동 해지 -->
<update id="unlinkSocialAccount" parameterType="map">
UPDATE mbr_sns_acnt_info
SET link_vtlz_yn = false,
link_cncltn_dt = NOW(),
mdfr = #{mdfr},
mdfcn_dt = NOW()
WHERE mbr_id = #{mbrId}
<if test="lgnOffrType != null and lgnOffrType != ''">
AND lgn_offr_type = #{lgnOffrType}
</if>
</update>
<!-- 메인 프로필 설정 -->
<update id="setPrimaryProfile" parameterType="map">
UPDATE mbr_sns_acnt_info
SET main_prfl_yn = true,
mdfr = #{mdfr},
mdfcn_dt = NOW()
WHERE mbr_id = #{mbrId}
AND lgn_offr_type = #{lgnOffrType}
AND link_vtlz_yn = true;
</update>
<!-- 연동 가능한 계정 조회 (이메일로 검색, 다른 제공자 제외) -->
<select id="findLinkableAccount" parameterType="map" resultMap="mberMap">
<include refid="selectMber" />
WHERE mi.eml = #{email}
AND mi.use_yn = 'Y'
AND mi.mbr_stts = '1'
AND NOT EXISTS (
SELECT 1 FROM mbr_sns_acnt_info msai
WHERE msai.mbr_id = mi.mbr_id
AND msai.lgn_offr_type = #{lgnOffrType}
AND msai.link_vtlz_yn = true
)
LIMIT 1
</select>
</mapper>