lkd9125(이경도)
7 months ago
16 changed files with 476 additions and 9 deletions
@ -1,6 +1,15 @@ |
|||||||
|
|
||||||
|
|
||||||
dependencies { |
dependencies { |
||||||
|
implementation "$boot:spring-boot-starter-web" |
||||||
|
implementation "$boot:spring-boot-starter-data-jpa" |
||||||
|
|
||||||
|
// for paging |
||||||
|
// implementation("org.springframework.data:spring-data-commons") |
||||||
|
|
||||||
|
compileOnly 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' |
||||||
|
implementation project(":data:pty") |
||||||
|
implementation project(":common:core") |
||||||
|
implementation project(":common:util") |
||||||
} |
} |
||||||
|
|
||||||
|
@ -0,0 +1,35 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.controller; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.Operation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.register.FormRegisterRQ; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.service.UserAccountService; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
@RestController |
||||||
|
@Slf4j |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping("/v1/user/account") |
||||||
|
@Tag(name = "유저 - 계정", description = "계정 관련 API") |
||||||
|
public class UserAccountController { |
||||||
|
|
||||||
|
private final UserAccountService userAccountService; |
||||||
|
|
||||||
|
@PostMapping("/register") |
||||||
|
@Operation(summary = "회원가입", description = "유저의 계정을 추가합니다.") |
||||||
|
public ResponseEntity<Object> createUser(@RequestBody FormRegisterRQ rq){ |
||||||
|
|
||||||
|
userAccountService.createUser(rq); |
||||||
|
|
||||||
|
return ResponseEntity.status(HttpStatus.CREATED).body(null); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,84 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.model; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.data.pty.model.PtyCstmrBas; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class PtyCstmrDTO { |
||||||
|
|
||||||
|
private Long cstmrSno; |
||||||
|
|
||||||
|
private String authId; |
||||||
|
|
||||||
|
private String cstmrDivCd; |
||||||
|
|
||||||
|
private String cstmrStatusCd; |
||||||
|
|
||||||
|
private LocalDateTime cstmrStatusCngDt; |
||||||
|
|
||||||
|
private String cptAuthCode; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private LocalDateTime joinDt; |
||||||
|
|
||||||
|
private String joinIp; |
||||||
|
|
||||||
|
private String siteCode; |
||||||
|
|
||||||
|
private String memberDivCd; |
||||||
|
|
||||||
|
private String userPswd; |
||||||
|
|
||||||
|
private LocalDateTime pswdUpdtDt; |
||||||
|
|
||||||
|
private String rtrshToken; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
public static PtyCstmrBas toEntity(PtyCstmrDTO dto){ |
||||||
|
return PtyCstmrBas.builder() |
||||||
|
.cstmrSno(dto.getCstmrSno()) |
||||||
|
.authId(dto.getAuthId()) |
||||||
|
.cstmrDivCd(dto.getCstmrDivCd()) |
||||||
|
.cstmrStatusCd(dto.getCstmrStatusCd()) |
||||||
|
.cstmrStatusCngDt(dto.getCstmrStatusCngDt()) |
||||||
|
.cptAuthCode(dto.getCptAuthCode()) |
||||||
|
.userId(dto.getUserId()) |
||||||
|
.joinDt(dto.getJoinDt()) |
||||||
|
.joinIp(dto.getJoinIp()) |
||||||
|
.siteCode(dto.getSiteCode()) |
||||||
|
.memberDivCd(dto.getMemberDivCd()) |
||||||
|
.userPswd(dto.getUserPswd()) |
||||||
|
.pswdUpdtDt(dto.getPswdUpdtDt()) |
||||||
|
.rfrshToken(dto.getRtrshToken()) |
||||||
|
.trmnlId(dto.getTrmnlId()) |
||||||
|
.build(); |
||||||
|
} |
||||||
|
|
||||||
|
public static PtyCstmrDTO toDto(PtyCstmrBas entity){ |
||||||
|
PtyCstmrDTO dto = new PtyCstmrDTO(); |
||||||
|
dto.setCstmrSno(entity.getCstmrSno()); |
||||||
|
dto.setAuthId(entity.getAuthId()); |
||||||
|
dto.setCstmrDivCd(entity.getCstmrDivCd()); |
||||||
|
dto.setCstmrStatusCd(entity.getCstmrStatusCd()); |
||||||
|
dto.setCstmrStatusCngDt(entity.getCstmrStatusCngDt()); |
||||||
|
dto.setCptAuthCode(entity.getCptAuthCode()); |
||||||
|
dto.setUserId(entity.getUserId()); |
||||||
|
dto.setJoinDt(entity.getJoinDt()); |
||||||
|
dto.setJoinIp(entity.getJoinIp()); |
||||||
|
dto.setSiteCode(entity.getSiteCode()); |
||||||
|
dto.setMemberDivCd(entity.getMemberDivCd()); |
||||||
|
dto.setUserPswd(entity.getUserPswd()); |
||||||
|
dto.setPswdUpdtDt(entity.getPswdUpdtDt()); |
||||||
|
dto.setRtrshToken(entity.getRfrshToken()); |
||||||
|
dto.setTrmnlId(entity.getTrmnlId()); |
||||||
|
|
||||||
|
return dto; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.model; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.data.pty.model.PtyCstmrDtl; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.time.LocalDate; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class PtyCstmrDtlDTO { |
||||||
|
|
||||||
|
private Long cstmrSno; |
||||||
|
|
||||||
|
private String ipinDi; |
||||||
|
|
||||||
|
private String ipinCi; |
||||||
|
|
||||||
|
private String joinCrtfyCd; |
||||||
|
|
||||||
|
private String cntryCd; |
||||||
|
|
||||||
|
private String genderCd; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private LocalDate brthdyDate; |
||||||
|
|
||||||
|
private String email; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
private String clncd; |
||||||
|
|
||||||
|
private String addr; |
||||||
|
|
||||||
|
private String addrDtlCn; |
||||||
|
|
||||||
|
private String zip; |
||||||
|
|
||||||
|
private LocalDateTime updateDt; |
||||||
|
|
||||||
|
private String updateUserId; |
||||||
|
|
||||||
|
public static PtyCstmrDtl toEntity(PtyCstmrDtlDTO dto){ |
||||||
|
return PtyCstmrDtl.builder() |
||||||
|
.cstmrSno(dto.getCstmrSno()) |
||||||
|
.ipinCi(dto.getIpinCi()) |
||||||
|
.ipinDi(dto.getIpinDi()) |
||||||
|
.joinCrtfyCd(dto.getJoinCrtfyCd()) |
||||||
|
.cntryCd(dto.getCntryCd()) |
||||||
|
.genderCd(dto.getGenderCd()) |
||||||
|
.memberName(dto.getMemberName()) |
||||||
|
.brthdyDate(dto.getBrthdyDate()) |
||||||
|
.email(dto.getEmail()) |
||||||
|
.hpno(dto.getHpno()) |
||||||
|
.clncd(dto.getClncd()) |
||||||
|
.updateDt(dto.getUpdateDt()) |
||||||
|
.updateUserId(dto.getUpdateUserId()) |
||||||
|
.build(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.model.register; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AgreeTermsModel { |
||||||
|
|
||||||
|
@Schema(description = "약관 일련번호", example = "1") |
||||||
|
private Long termsSno; |
||||||
|
@Schema(description = "동의여부", example = "Y") |
||||||
|
private String agreeYn; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,111 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.model.register; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.PtyCstmrDTO; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.PtyCstmrDtlDTO; |
||||||
|
import kr.co.palnet.kac.util.HttpUtils; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.time.LocalDate; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class FormRegisterRQ { |
||||||
|
|
||||||
|
@Schema(description = "고객구분코드" , example = "MEMBER") |
||||||
|
private String cstrmDivCd; |
||||||
|
|
||||||
|
@Schema(description = "고객상태코드" , example = "A") |
||||||
|
private String cstrmStatusCd; |
||||||
|
|
||||||
|
@Schema(description = "유저 아이디(중복인 경우 숫자 변경)" , example = "tester01") |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@Schema(description = "유저 권한" , example = "USER") |
||||||
|
private String authId; |
||||||
|
|
||||||
|
@Schema(description = "사이트 코드" , example = "DRON") |
||||||
|
private String siteCode; |
||||||
|
|
||||||
|
@Schema(description = "유저 비밀번호" , example = "test1234") |
||||||
|
private String userPswd; |
||||||
|
|
||||||
|
@Schema(description = "가입인증 수단 코드" , example = "HP_CRTFD") |
||||||
|
private String joinCrtfyCd; |
||||||
|
|
||||||
|
@Schema(description = "멤버 이름" , example = "TESTER") |
||||||
|
private String memberName; |
||||||
|
|
||||||
|
@Schema(description = "생년월일", example = "1997-05-05", implementation = String.class) |
||||||
|
private LocalDate brthdyDate; |
||||||
|
|
||||||
|
@Schema(description = "이메일" , example = "tester@test.co.kr") |
||||||
|
private String email; |
||||||
|
|
||||||
|
@Schema(description = "멤버 휴대폰번호" , example = "01012345678") |
||||||
|
private String hpno; |
||||||
|
|
||||||
|
@Schema(description = "국가 코드" , example = "+82") |
||||||
|
private String clncd; |
||||||
|
|
||||||
|
private AgreeTermsModel[] terms; |
||||||
|
|
||||||
|
@Schema(description = "권한코드(부서)" , example = "KAC") |
||||||
|
private String cptAuthCode; |
||||||
|
|
||||||
|
// @Schema(hidden = true)
|
||||||
|
// private String memberDivCd;
|
||||||
|
|
||||||
|
@Schema(hidden = true) |
||||||
|
private String ipinDi; |
||||||
|
|
||||||
|
@Schema(hidden = true) |
||||||
|
private String ipinCi; |
||||||
|
|
||||||
|
@Schema(description = "국가코드" , example = "KOR") |
||||||
|
private String cntryCd; |
||||||
|
|
||||||
|
@Schema(description = "성별코드" , example = "M") |
||||||
|
private String genderCd; |
||||||
|
|
||||||
|
// @Schema(hidden = true)
|
||||||
|
// private Instant testDt;
|
||||||
|
|
||||||
|
// @Schema(hidden = true)
|
||||||
|
// private String trmnlId;
|
||||||
|
|
||||||
|
public static PtyCstmrDTO toBasicDto(FormRegisterRQ rq){ |
||||||
|
PtyCstmrDTO dto = new PtyCstmrDTO(); |
||||||
|
dto.setCstmrDivCd(rq.getCstrmDivCd()); |
||||||
|
dto.setCstmrStatusCd(rq.getCstrmStatusCd()); |
||||||
|
dto.setUserId(rq.getUserId()); |
||||||
|
dto.setAuthId(rq.getAuthId()); |
||||||
|
dto.setSiteCode(rq.getSiteCode()); |
||||||
|
dto.setUserPswd(rq.getUserPswd()); |
||||||
|
dto.setJoinDt(LocalDateTime.now()); |
||||||
|
dto.setJoinIp(HttpUtils.getRequestIp()); |
||||||
|
dto.setCptAuthCode(rq.getCptAuthCode() == null ? "KAC": rq.getCptAuthCode()); |
||||||
|
|
||||||
|
return dto; |
||||||
|
} |
||||||
|
|
||||||
|
public static PtyCstmrDtlDTO toDetailDto(FormRegisterRQ rq, Long cstmrSno){ |
||||||
|
PtyCstmrDtlDTO dto = new PtyCstmrDtlDTO(); |
||||||
|
dto.setCstmrSno(cstmrSno); |
||||||
|
dto.setIpinCi(rq.getIpinCi()); |
||||||
|
dto.setIpinDi(rq.getIpinDi()); |
||||||
|
dto.setJoinCrtfyCd(rq.getJoinCrtfyCd()); |
||||||
|
dto.setCntryCd(rq.getCntryCd() == null || rq.getCntryCd().isEmpty() ? "KOR" : rq.getCntryCd()); |
||||||
|
dto.setGenderCd(rq.getGenderCd()); |
||||||
|
dto.setMemberName(rq.getMemberName()); |
||||||
|
dto.setBrthdyDate(rq.getBrthdyDate()); |
||||||
|
dto.setEmail(rq.getEmail()); |
||||||
|
dto.setHpno(rq.getHpno()); |
||||||
|
dto.setClncd(rq.getClncd()); |
||||||
|
dto.setUpdateDt(LocalDateTime.now()); |
||||||
|
dto.setUpdateUserId(rq.getUserId()); |
||||||
|
|
||||||
|
return dto; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,76 @@ |
|||||||
|
package kr.co.palnet.kac.api.v1.user.account.service; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.PtyCstmrDTO; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.PtyCstmrDtlDTO; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.register.FormRegisterRQ; |
||||||
|
import kr.co.palnet.kac.api.v1.user.account.model.register.AgreeTermsModel; |
||||||
|
import kr.co.palnet.kac.core.exception.BaseErrorCode; |
||||||
|
import kr.co.palnet.kac.core.exception.BaseException; |
||||||
|
import kr.co.palnet.kac.data.pty.model.PtyCstmrBas; |
||||||
|
import kr.co.palnet.kac.data.pty.model.PtyCstmrDtl; |
||||||
|
import kr.co.palnet.kac.data.pty.model.PtyTermsAgreeTxn; |
||||||
|
import kr.co.palnet.kac.data.pty.service.PtyCstmrDomainService; |
||||||
|
import kr.co.palnet.kac.util.EncryptUtil; |
||||||
|
import kr.co.palnet.kac.util.HttpUtils; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import java.time.Instant; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
@Service |
||||||
|
@Slf4j |
||||||
|
@RequiredArgsConstructor |
||||||
|
public class UserAccountService { |
||||||
|
|
||||||
|
private final PtyCstmrDomainService ptyCstmrDomainService; |
||||||
|
|
||||||
|
@Transactional |
||||||
|
public void createUser(FormRegisterRQ rq) { |
||||||
|
|
||||||
|
PtyCstmrBas registeredUser = ptyCstmrDomainService.getCstmrInfoByUserId(rq.getUserId()); |
||||||
|
if(registeredUser != null) throw new BaseException(BaseErrorCode.DATA_ALREADY_EXISTS); |
||||||
|
|
||||||
|
|
||||||
|
rq.setHpno(rq.getHpno().replaceAll("-", "")); |
||||||
|
|
||||||
|
//처리 1. 민감정보 암호화 처리(비밀번호 , 이름 , 휴대폰번호 , 이메일)
|
||||||
|
rq.setUserPswd(EncryptUtil.sha256Encrypt(rq.getUserPswd())); |
||||||
|
rq.setHpno(EncryptUtil.encrypt(rq.getHpno())); |
||||||
|
rq.setEmail(EncryptUtil.encrypt(rq.getEmail())); |
||||||
|
|
||||||
|
//처리 2. 마스터 정보 저장
|
||||||
|
PtyCstmrDTO basicDto = FormRegisterRQ.toBasicDto(rq); |
||||||
|
PtyCstmrBas basEntity = ptyCstmrDomainService.savePtyCstmrBas(PtyCstmrDTO.toEntity(basicDto)); |
||||||
|
|
||||||
|
if(basEntity == null) { |
||||||
|
throw new BaseException(BaseErrorCode.NOT_PROCESS); |
||||||
|
} |
||||||
|
|
||||||
|
//처리 3. 상세 정보 저장
|
||||||
|
PtyCstmrDtlDTO detailDto = FormRegisterRQ.toDetailDto(rq, basEntity.getCstmrSno()); |
||||||
|
ptyCstmrDomainService.savePtyCstmrDtl(PtyCstmrDtlDTO.toEntity(detailDto)); |
||||||
|
|
||||||
|
//처리 4. 약관 동의 정보 저장
|
||||||
|
if(rq.getTerms() != null && rq.getTerms().length > 0){ |
||||||
|
for(AgreeTermsModel model : rq.getTerms()){ |
||||||
|
PtyTermsAgreeTxn agreeEntity = new PtyTermsAgreeTxn(); |
||||||
|
agreeEntity.setCstmrSno(basEntity.getCstmrSno()); |
||||||
|
agreeEntity.setProcIp(HttpUtils.getRequestIp()); |
||||||
|
agreeEntity.setTermsSno(model.getTermsSno()); |
||||||
|
agreeEntity.setUpdateDt(LocalDateTime.now() ); |
||||||
|
agreeEntity.setUpdateUserId(basEntity.getUserId()); |
||||||
|
agreeEntity.setAgreeYn(model.getAgreeYn()); |
||||||
|
if(model.getAgreeYn().equals("Y")) { |
||||||
|
agreeEntity.setAgreeDt(LocalDateTime.now() ); |
||||||
|
} |
||||||
|
|
||||||
|
ptyCstmrDomainService.savePtyTermsAgreeTxn(agreeEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package kr.co.palnet.kac.util; |
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletRequest; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.context.request.RequestContextHolder; |
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
public class HttpUtils { |
||||||
|
|
||||||
|
/** |
||||||
|
* 클라이언트 IP 를 가져온다 |
||||||
|
* @return 클라이언트 IP |
||||||
|
*/ |
||||||
|
public static String getRequestIp() { |
||||||
|
HttpServletRequest req = getCurrentRequest(); |
||||||
|
|
||||||
|
String[] HEADER_CLIENT_IP = { "NS-CLIENT-IP", "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"}; |
||||||
|
for (String name : HEADER_CLIENT_IP) { |
||||||
|
String clientIp = req.getHeader(name); |
||||||
|
if(!StringUtils.isEmpty(clientIp) && !"unknown".equalsIgnoreCase(clientIp)) { |
||||||
|
log.debug("{}={}", name, clientIp); |
||||||
|
return clientIp; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return req.getRemoteAddr(); |
||||||
|
} |
||||||
|
|
||||||
|
public static HttpServletRequest getCurrentRequest() { |
||||||
|
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
||||||
|
return sra.getRequest(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue