Browse Source

feature: User모듈 - 회원가입추가

pull/8/head
lkd9125(이경도) 7 months ago
parent
commit
b6b21aae0a
  1. 1
      app/kac-app/build.gradle
  2. 1
      app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java
  3. 4
      common/config-db/src/main/resources/application-db.yml
  4. 13
      common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java
  5. 9
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyCstmrBas.java
  6. 3
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyCstmrDtl.java
  7. 5
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyTermsAgreeTxn.java
  8. 22
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainService.java
  9. 9
      web/api-user/build.gradle
  10. 35
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/controller/UserAccountController.java
  11. 84
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/PtyCstmrDTO.java
  12. 63
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/PtyCstmrDtlDTO.java
  13. 14
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/register/AgreeTermsModel.java
  14. 111
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/register/FormRegisterRQ.java
  15. 76
      web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java
  16. 35
      web/api-user/src/main/java/kr/co/palnet/kac/util/HttpUtils.java

1
app/kac-app/build.gradle

@ -39,6 +39,7 @@ dependencies {
implementation project(":common:util") implementation project(":common:util")
implementation project(":web:security") implementation project(":web:security")
implementation project(":web:api-common") implementation project(":web:api-common")
implementation project(":web:api-user")
} }
ext { ext {

1
app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java

@ -27,6 +27,7 @@ public class AppSecurityConfig extends SecurityConfig {
// 시큐리티 적용 안하는 URL 목록 // 시큐리티 적용 안하는 URL 목록
private final String[] IGNORE_URL = { private final String[] IGNORE_URL = {
"/v1/com/code/**", "/v1/com/code/**",
"/v1/user/account/register",
}; };
// 권한(ROLE)별 URL // 권한(ROLE)별 URL

4
common/config-db/src/main/resources/application-db.yml

@ -1,7 +1,7 @@
spring: spring:
jpa: jpa:
hibernate: hibernate:
ddl-auto: none ddl-auto: create
naming: naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
datasource: datasource:
@ -9,4 +9,4 @@ spring:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc-url: jdbc:log4jdbc:mysql://localhost:13306/PAV_KAC?characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true jdbc-url: jdbc:log4jdbc:mysql://localhost:13306/PAV_KAC?characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: kac username: kac
password: palnet!234 password: palnet!234`

13
common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java

@ -1,5 +1,6 @@
package kr.co.palnet.kac.util; package kr.co.palnet.kac.util;
import kr.co.palnet.kac.util.kisa.KISA_SHA256;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher; import javax.crypto.Cipher;
@ -72,6 +73,18 @@ public class EncryptUtil {
return encrypted; return encrypted;
} }
public static String sha256Encrypt(String str) {
byte[] bytes = str.getBytes();
byte[] pszDigest = new byte[32];
KISA_SHA256.SHA256_Encrpyt(bytes, bytes.length, pszDigest);
StringBuffer encrypted = new StringBuffer();
for (int i = 0; i < 32; i++) {
encrypted.append(String.format("%02x", pszDigest[i]));
}
return encrypted.toString();
}
public static void main(String[] args) { public static void main(String[] args) {
String key = "1234567890123456"; String key = "1234567890123456";
String initVector = "1234567890123456"; String initVector = "1234567890123456";

9
data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyCstmrBas.java

@ -4,6 +4,7 @@ import jakarta.persistence.*;
import lombok.*; import lombok.*;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@ -29,13 +30,13 @@ public class PtyCstmrBas {
@Column(name = "CSTMR_DIV_CD", length = 20, nullable = false) @Column(name = "CSTMR_DIV_CD", length = 20, nullable = false)
private String cstmrDivCd; private String cstmrDivCd;
// 고객상태코드 // 고객상태코드 [A : 계정이 활성화 됨, W : 계정이 비활성화됨-회원탈퇴]
@Column(name = "CSTMR_STATUS_CD", length = 20, nullable = false) @Column(name = "CSTMR_STATUS_CD", length = 20, nullable = false)
private String cstmrStatusCd; private String cstmrStatusCd;
// 고객상태변경일시 // 고객상태변경일시
@Column(name = "CSTMR_STATUS_CNG_DT", columnDefinition = "datetime") @Column(name = "CSTMR_STATUS_CNG_DT", columnDefinition = "datetime")
private Instant cstmrStatusCngDt; private LocalDateTime cstmrStatusCngDt;
// 관할기관코드 // 관할기관코드
@Column(name = "CPT_AUTH_CODE", length = 10) @Column(name = "CPT_AUTH_CODE", length = 10)
@ -47,7 +48,7 @@ public class PtyCstmrBas {
// 가입일시 // 가입일시
@Column(name = "JOIN_DT", columnDefinition = "datetime(6)", nullable = false) @Column(name = "JOIN_DT", columnDefinition = "datetime(6)", nullable = false)
private Instant joinDt; private LocalDateTime joinDt;
// 가입IP주소 // 가입IP주소
@Column(name = "JOIN_IP", length = 39, nullable = false) @Column(name = "JOIN_IP", length = 39, nullable = false)
@ -67,7 +68,7 @@ public class PtyCstmrBas {
// 비밀번호수정일시 // 비밀번호수정일시
@Column(name = "PSWD_UPDT_DT", columnDefinition = "datetime") @Column(name = "PSWD_UPDT_DT", columnDefinition = "datetime")
private Instant pswdUpdtDt; private LocalDateTime pswdUpdtDt;
// 재활용토큰 // 재활용토큰
@Column(name = "RFRSH_TOKEN") @Column(name = "RFRSH_TOKEN")

3
data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyCstmrDtl.java

@ -5,6 +5,7 @@ import lombok.*;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
@Data @Data
@ -74,7 +75,7 @@ public class PtyCstmrDtl {
// 수정일시 // 수정일시
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false) @Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt; private LocalDateTime updateDt;
// 수정사용자ID // 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false) @Column(name = "UPDATE_USER_ID", length = 30, nullable = false)

5
data/pty/src/main/java/kr/co/palnet/kac/data/pty/model/PtyTermsAgreeTxn.java

@ -4,6 +4,7 @@ import jakarta.persistence.*;
import lombok.*; import lombok.*;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime;
@Data @Data
@ -34,7 +35,7 @@ public class PtyTermsAgreeTxn {
// 동의일시 // 동의일시
@Column(name = "AGREE_DT", columnDefinition = "datetime") @Column(name = "AGREE_DT", columnDefinition = "datetime")
private Instant agreeDt; private LocalDateTime agreeDt;
// 처리IP주소 // 처리IP주소
@Column(name = "PROC_IP", length = 39) @Column(name = "PROC_IP", length = 39)
@ -42,7 +43,7 @@ public class PtyTermsAgreeTxn {
// 수정일시 // 수정일시
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false) @Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt; private LocalDateTime updateDt;
// 수정사용자ID // 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false) @Column(name = "UPDATE_USER_ID", length = 30, nullable = false)

22
data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainService.java

@ -1,7 +1,11 @@
package kr.co.palnet.kac.data.pty.service; package kr.co.palnet.kac.data.pty.service;
import kr.co.palnet.kac.data.pty.model.PtyCstmrBas; 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.repository.PtyCstmrBasRepository; import kr.co.palnet.kac.data.pty.repository.PtyCstmrBasRepository;
import kr.co.palnet.kac.data.pty.repository.PtyCstmrDtlRepository;
import kr.co.palnet.kac.data.pty.repository.PtyTermsAgreeTxnRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -12,8 +16,26 @@ import org.springframework.stereotype.Service;
public class PtyCstmrDomainService { public class PtyCstmrDomainService {
private final PtyCstmrBasRepository ptyCstmrBasRepository; private final PtyCstmrBasRepository ptyCstmrBasRepository;
private final PtyCstmrDtlRepository ptyCstmrDtlRepository;
private final PtyTermsAgreeTxnRepository ptyTermsAgreeTxnRepository;
public PtyCstmrBas getCstmrInfoByUserId(String userId) { public PtyCstmrBas getCstmrInfoByUserId(String userId) {
return ptyCstmrBasRepository.findByUserId(userId); return ptyCstmrBasRepository.findByUserId(userId);
} }
public PtyCstmrBas savePtyCstmrBas(PtyCstmrBas entity) {
return ptyCstmrBasRepository.save(entity);
}
public PtyCstmrDtl savePtyCstmrDtl(PtyCstmrDtl entity){
return ptyCstmrDtlRepository.save(entity);
}
public PtyTermsAgreeTxn savePtyTermsAgreeTxn(PtyTermsAgreeTxn entity){
return ptyTermsAgreeTxnRepository.save(entity);
}
} }

9
web/api-user/build.gradle

@ -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")
} }

35
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/controller/UserAccountController.java

@ -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);
}
}

84
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/PtyCstmrDTO.java

@ -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;
}
}

63
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/PtyCstmrDtlDTO.java

@ -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();
}
}

14
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/register/AgreeTermsModel.java

@ -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;
}

111
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/model/register/FormRegisterRQ.java

@ -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;
}
}

76
web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java

@ -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);
}
}
}
}

35
web/api-user/src/main/java/kr/co/palnet/kac/util/HttpUtils.java

@ -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…
Cancel
Save