From 9c2d1c48afd66387b9fce08ced886ba24ff3c03f Mon Sep 17 00:00:00 2001 From: Kang Jung Kyo Date: Fri, 6 Sep 2024 14:36:19 +0900 Subject: [PATCH 1/4] =?UTF-8?q?(1)=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20qsp=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EA=B0=9C=EB=B0=9C,=20(2)=20qsp=20url=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 260 +++++++++--------- .../qcast/biz/login/LoginController.java | 92 ++++--- .../qcast/biz/login/LoginService.java | 224 +++++++++++++-- .../qcast/biz/login/dto/JoinUser.java | 26 ++ .../qcast/biz/login/dto/LoginUser.java | 20 +- .../qcast/biz/login/dto/UserInfo.java | 16 ++ .../biz/login/dto/UserLoginResponse.java | 11 + .../qcast/biz/login/dto/UserPassword.java | 15 + .../qcast/biz/login/dto/UserResponse.java | 41 ++- .../interplug/qcast/util/DefaultResponse.java | 10 + .../qcast/util/DefaultResponseResult.java | 13 + .../interplug/qcast/util/InterfaceQsp.java | 76 +++++ .../interplug/qcast/util/ZipFileManager.java | 86 ++++++ src/main/resources/config/application-dev.yml | 52 ++-- .../resources/config/application-local.yml | 53 ++-- src/main/resources/config/application-prd.yml | 52 ++-- 16 files changed, 765 insertions(+), 282 deletions(-) create mode 100644 src/main/java/com/interplug/qcast/biz/login/dto/JoinUser.java create mode 100644 src/main/java/com/interplug/qcast/biz/login/dto/UserInfo.java create mode 100644 src/main/java/com/interplug/qcast/biz/login/dto/UserLoginResponse.java create mode 100644 src/main/java/com/interplug/qcast/biz/login/dto/UserPassword.java create mode 100644 src/main/java/com/interplug/qcast/util/DefaultResponse.java create mode 100644 src/main/java/com/interplug/qcast/util/DefaultResponseResult.java create mode 100644 src/main/java/com/interplug/qcast/util/InterfaceQsp.java create mode 100644 src/main/java/com/interplug/qcast/util/ZipFileManager.java diff --git a/pom.xml b/pom.xml index 2d5ef13a..6d734d1e 100644 --- a/pom.xml +++ b/pom.xml @@ -1,127 +1,133 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.3.0 - - - com.interplug - qcast - 0.0.1-SNAPSHOT - qcast - qcast - - 17 - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-devtools - runtime - true - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.boot - spring-boot-starter-actuator - - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.3 - - - - - org.bgee.log4jdbc-log4j2 - log4jdbc-log4j2-jdbc4.1 - 1.16 - - - - - com.github.ulisesbocchio - jasypt-spring-boot-starter - 3.0.5 - - - - com.microsoft.sqlserver - mssql-jdbc - runtime - - - org.projectlombok - lombok - true - - - - org.springdoc - springdoc-openapi-starter-webmvc-ui - 2.6.0 - - - - - org.apache.commons - commons-lang3 - 3.16.0 - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - - - - + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.0 + + + com.interplug + qcast + 0.0.1-SNAPSHOT + qcast + qcast + + 17 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.3 + + + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4.1 + 1.16 + + + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + 3.0.5 + + + + com.microsoft.sqlserver + mssql-jdbc + runtime + + + org.projectlombok + lombok + true + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.6.0 + + + + + org.apache.commons + commons-lang3 + 3.16.0 + + + + + com.fasterxml.jackson.core + jackson-databind + 2.18.0-rc1 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/com/interplug/qcast/biz/login/LoginController.java b/src/main/java/com/interplug/qcast/biz/login/LoginController.java index 90b60ee2..77ff4313 100644 --- a/src/main/java/com/interplug/qcast/biz/login/LoginController.java +++ b/src/main/java/com/interplug/qcast/biz/login/LoginController.java @@ -1,34 +1,58 @@ -package com.interplug.qcast.biz.login; - -import com.interplug.qcast.biz.login.dto.LoginUser; -import com.interplug.qcast.biz.login.dto.UserResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -@Slf4j -@RestController -@RequestMapping("/api/login") -@RequiredArgsConstructor -public class LoginController { - // @Autowired private LoginService loginService; - private final LoginService loginService; - - @PostMapping("/v1.0/login") - @ResponseStatus(HttpStatus.OK) - public void login(@RequestBody LoginUser loginUser) { - log.warn(String.valueOf(log.isDebugEnabled())); - if (log.isDebugEnabled()) { - log.debug("Login username : " + loginUser.getUsername()); - log.debug("Login password : " + loginUser.getPassword()); - log.debug("isLogin : " + loginService.getLogin(loginUser)); - } - } - - @PostMapping("/v1.0/user") - @ResponseStatus(HttpStatus.CREATED) - public UserResponse getUser(@RequestBody LoginUser loginUser) { - return loginService.getUser(loginUser); - } -} +package com.interplug.qcast.biz.login; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.PatchMapping; +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.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import com.interplug.qcast.biz.login.dto.JoinUser; +import com.interplug.qcast.biz.login.dto.LoginUser; +import com.interplug.qcast.biz.login.dto.UserLoginResponse; +import com.interplug.qcast.biz.login.dto.UserPassword; +import com.interplug.qcast.biz.login.dto.UserResponse; +import com.interplug.qcast.util.DefaultResponse; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RestController +@RequestMapping("/api/login") +@RequiredArgsConstructor +public class LoginController { + // @Autowired private LoginService loginService; + private final LoginService loginService; + + @Operation(description = "Q.CAST III에 로그인하여 사용자 정보를 획득한다.") + @PostMapping("/v1.0/login") + public UserLoginResponse login(@RequestBody LoginUser loginUser) throws Exception { + return loginService.getLogin(loginUser); + } + + @PostMapping("/v1.0/user") + @ResponseStatus(HttpStatus.CREATED) + public UserResponse getUser(@RequestBody LoginUser loginUser) { + return loginService.getUser(loginUser); + } + + @Operation(description = "가입 신청 정보를 등록한다.") + @PostMapping("/v1.0/user/join") + @ResponseStatus(HttpStatus.CREATED) + public DefaultResponse joinUser(@RequestBody JoinUser joinUser) throws Exception { + return loginService.joinUser(joinUser); + } + + @Operation(description = "비밀번호를 초기화한다.") + @PatchMapping("/v1.0/user/init-password") + public DefaultResponse initPassword(@RequestBody UserPassword userPassword) throws Exception { + return loginService.initPassword(userPassword); + } + + @Operation(description = "비밀번호를 변경한다.") + @PatchMapping("/v1.0/user/change-password") + public DefaultResponse changePassword(@RequestBody UserPassword userPassword) throws Exception { + return loginService.changePassword(userPassword); + } +} diff --git a/src/main/java/com/interplug/qcast/biz/login/LoginService.java b/src/main/java/com/interplug/qcast/biz/login/LoginService.java index c6824de4..1ece5434 100644 --- a/src/main/java/com/interplug/qcast/biz/login/LoginService.java +++ b/src/main/java/com/interplug/qcast/biz/login/LoginService.java @@ -1,24 +1,200 @@ -package com.interplug.qcast.biz.login; - -import com.interplug.qcast.biz.login.dto.LoginUser; -import com.interplug.qcast.biz.login.dto.UserResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -@Slf4j -@Service -@RequiredArgsConstructor -public class LoginService { - // @Autowired LoginMapper loginMapper; - private final LoginMapper loginMapper; - - public boolean getLogin(LoginUser loginUser) { - return loginMapper.getLogin(loginUser); - } - - public UserResponse getUser(LoginUser loginUser) { - log.info("Build Test"); - return loginMapper.getUser(loginUser); - } -} +package com.interplug.qcast.biz.login; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.interplug.qcast.biz.login.dto.JoinUser; +import com.interplug.qcast.biz.login.dto.LoginUser; +import com.interplug.qcast.biz.login.dto.UserLoginResponse; +import com.interplug.qcast.biz.login.dto.UserPassword; +import com.interplug.qcast.biz.login.dto.UserResponse; +import com.interplug.qcast.util.DefaultResponse; +import com.interplug.qcast.util.InterfaceQsp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class LoginService { + // @Autowired LoginMapper loginMapper; + private final LoginMapper loginMapper; + private final InterfaceQsp interfaceQsp; + + @Value("${qsp.url}") + private String qspUrl; + + // 로그인 처리 + public UserLoginResponse getLogin(LoginUser loginUser) throws Exception { + if (loginUser == null) + throw new IllegalArgumentException("DTO 설정이 필요합니다."); + + if (loginUser.getLangCd() == null || "".equals(loginUser.getLangCd())) + throw new IllegalArgumentException("Language Code" + "은(는) 필수값입니다."); + + if (loginUser.getLastEditUser() == null || "".equals(loginUser.getLastEditUser())) + throw new IllegalArgumentException("Last Edit User Id" + "은(는) 필수값입니다."); + + if (loginUser.getLoginId() == null || "".equals(loginUser.getLoginId())) + throw new IllegalArgumentException("Login Id" + "은(는) 필수값입니다."); + + if (loginUser.getPwd() == null || "".equals(loginUser.getPwd())) + throw new IllegalArgumentException("Password" + "은(는) 필수값입니다."); + + UserLoginResponse userLoginResponse = null; + + // QSP API Call.. + // Q.CAST 로그인 + // post + // /api/user/login + String strResponse = + interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/login", loginUser); + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + userLoginResponse = om.readValue(strResponse, UserLoginResponse.class); + } + + return userLoginResponse; + } + + public UserResponse getUser(LoginUser loginUser) { + log.info("Build Test"); + return loginMapper.getUser(loginUser); + } + + // 가입 신청 등록 + public DefaultResponse joinUser(JoinUser joinUser) throws Exception { + if (joinUser == null) + throw new IllegalArgumentException("DTO 설정이 필요합니다."); + + if (joinUser.getLangCd() == null || "".equals(joinUser.getLangCd())) + throw new IllegalArgumentException("Language Code" + "은(는) 필수값입니다."); + + if (joinUser.getLastEditUser() == null || "".equals(joinUser.getLastEditUser())) + throw new IllegalArgumentException("Last Edit User Id" + "은(는) 필수값입니다."); + + if (joinUser.getStoreQcastNm() == null || "".equals(joinUser.getStoreQcastNm())) + throw new IllegalArgumentException("Store QCast Name" + "은(는) 필수값입니다."); + + if (joinUser.getStoreQcastNmKana() == null || "".equals(joinUser.getStoreQcastNmKana())) + throw new IllegalArgumentException("Store QCast Name Kana" + "은(는) 필수값입니다."); + + if (joinUser.getPostCd() == null || "".equals(joinUser.getPostCd())) + throw new IllegalArgumentException("Postal Code" + "은(는) 필수값입니다."); + + if (joinUser.getAddr() == null || "".equals(joinUser.getAddr())) + throw new IllegalArgumentException("Address" + "은(는) 필수값입니다."); + + if (joinUser.getTelNo() == null || "".equals(joinUser.getTelNo())) + throw new IllegalArgumentException("Telephone" + "은(는) 필수값입니다."); + + if (joinUser.getFax() == null || "".equals(joinUser.getFax())) + throw new IllegalArgumentException("Fax" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo() == null) + throw new IllegalArgumentException("사용자 정보 DTO 설정이 필요합니다."); + + if (joinUser.getUserInfo().getUserId() == null || "".equals(joinUser.getUserInfo().getUserId())) + throw new IllegalArgumentException("User Id" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo().getUserNm() == null || "".equals(joinUser.getUserInfo().getUserNm())) + throw new IllegalArgumentException("Name" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo().getUserNmKana() == null + || "".equals(joinUser.getUserInfo().getUserNmKana())) + throw new IllegalArgumentException("Name_Kana" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo().getTelNo() == null || "".equals(joinUser.getUserInfo().getTelNo())) + throw new IllegalArgumentException("Telephone" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo().getFax() == null || "".equals(joinUser.getUserInfo().getFax())) + throw new IllegalArgumentException("Fax" + "은(는) 필수값입니다."); + + if (joinUser.getUserInfo().getEmail() == null || "".equals(joinUser.getUserInfo().getEmail())) + throw new IllegalArgumentException("E-Mail" + "은(는) 필수값입니다."); + + // QSP API Call.. + // Q.CAST 신규 사용자 요청 + // post + // /api/user/newUserIdReq + DefaultResponse defaultResponse = null; + String strResponse = + interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/newUserIdReq", joinUser); + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + defaultResponse = om.readValue(strResponse, DefaultResponse.class); + } + + return defaultResponse; + } + + // 비밀번호 초기화 + public DefaultResponse initPassword(UserPassword userPassword) throws Exception { + if (userPassword == null) + throw new IllegalArgumentException("DTO 설정이 필요합니다."); + + if (userPassword.getLangCd() == null || "".equals(userPassword.getLangCd())) + throw new IllegalArgumentException("Language Code" + "은(는) 필수값입니다."); + + if (userPassword.getLastEditUser() == null || "".equals(userPassword.getLastEditUser())) + throw new IllegalArgumentException("Last Edit User Id" + "은(는) 필수값입니다."); + + if (userPassword.getLoginId() == null || "".equals(userPassword.getLoginId())) + throw new IllegalArgumentException("Login Id" + "은(는) 필수값입니다."); + + if (userPassword.getEmail() == null || "".equals(userPassword.getEmail())) + throw new IllegalArgumentException("E-Mail" + "은(는) 필수값입니다."); + + // QSP API Call.. + // Q.CAST 비밀번호 초기화 + // post + // /api/user/initUserPwd + DefaultResponse defaultResponse = null; + String strResponse = + interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/initUserPwd", userPassword); + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + defaultResponse = om.readValue(strResponse, DefaultResponse.class); + } + + return defaultResponse; + } + + // 비밀번호 변경 + public DefaultResponse changePassword(UserPassword userPassword) throws Exception { + if (userPassword == null) + throw new IllegalArgumentException("DTO 설정이 필요합니다."); + + if (userPassword.getLangCd() == null || "".equals(userPassword.getLangCd())) + throw new IllegalArgumentException("Language Code" + "은(는) 필수값입니다."); + + if (userPassword.getLastEditUser() == null || "".equals(userPassword.getLastEditUser())) + throw new IllegalArgumentException("Last Edit User Id" + "은(는) 필수값입니다."); + + if (userPassword.getPwd() == null || "".equals(userPassword.getPwd())) + throw new IllegalArgumentException("Now Password" + "은(는) 필수값입니다."); + + if (userPassword.getChgPwd() == null || "".equals(userPassword.getChgPwd())) + throw new IllegalArgumentException("Change Password" + "은(는) 필수값입니다."); + + // QSP API Call.. + // Q.CAST 비밀번호 변경 + // post + // /api/user/userPwdChg + DefaultResponse defaultResponse = null; + String strResponse = + interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/userPwdChg", userPassword); + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + defaultResponse = om.readValue(strResponse, DefaultResponse.class); + } + + return defaultResponse; + } +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/JoinUser.java b/src/main/java/com/interplug/qcast/biz/login/dto/JoinUser.java new file mode 100644 index 00000000..ee4bb49a --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/login/dto/JoinUser.java @@ -0,0 +1,26 @@ +package com.interplug.qcast.biz.login.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class JoinUser { + private String langCd; // Language Code + private String lastEditUser; // Last Edit User Id + private String storeQcastNm; // Store QCast Name + private String storeQcastNmKana; // Store QCast Name Kana + private String postCd; // Postal Code + private String addr; // Address + private String telNo; // Telephone + private String fax; // Fax + private String payTermsCd; // Pay Terms Code + private String kamId; // Kam Id + private String qtCompNm; // Quotation Company name + private String qtPostCd; // Quotation Postal Code + private String qtAddr; // Quotation Address + private String qtTelNo; // Quotation Telephone + private String qtFax; // Quotation Fax + private String qtEmail; // Quotation E-Mail + private UserInfo userInfo; // user information +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/LoginUser.java b/src/main/java/com/interplug/qcast/biz/login/dto/LoginUser.java index a0c05120..d78ec590 100644 --- a/src/main/java/com/interplug/qcast/biz/login/dto/LoginUser.java +++ b/src/main/java/com/interplug/qcast/biz/login/dto/LoginUser.java @@ -1,9 +1,11 @@ -package com.interplug.qcast.biz.login.dto; - -import lombok.Data; - -@Data -public class LoginUser { - private String username; - private String password; -} +package com.interplug.qcast.biz.login.dto; + +import lombok.Data; + +@Data +public class LoginUser { + private String langCd; // Language Code + private String lastEditUser; // Last Edit User Id + private String loginId; // Login Id + private String pwd; // Password +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/UserInfo.java b/src/main/java/com/interplug/qcast/biz/login/dto/UserInfo.java new file mode 100644 index 00000000..8ae1f309 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/login/dto/UserInfo.java @@ -0,0 +1,16 @@ +package com.interplug.qcast.biz.login.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserInfo { + private String userId; // User Id + private String userNm; // Name + private String userNmKana; // Name_Kana + private String telNo; // Telephone + private String fax; // Fax + private String email; // E-Mail + private String category; // Category +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/UserLoginResponse.java b/src/main/java/com/interplug/qcast/biz/login/dto/UserLoginResponse.java new file mode 100644 index 00000000..52cf8d1e --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/login/dto/UserLoginResponse.java @@ -0,0 +1,11 @@ +package com.interplug.qcast.biz.login.dto; + +import com.interplug.qcast.util.DefaultResponse; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserLoginResponse extends DefaultResponse { + private UserResponse data; +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/UserPassword.java b/src/main/java/com/interplug/qcast/biz/login/dto/UserPassword.java new file mode 100644 index 00000000..4cef1900 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/login/dto/UserPassword.java @@ -0,0 +1,15 @@ +package com.interplug.qcast.biz.login.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserPassword { + private String langCd; // Language Code + private String lastEditUser; // Last Edit User Id + private String loginId; // Login Id + private String email; // Email + private String pwd; // Now Password + private String chgPwd; // Change Password +} diff --git a/src/main/java/com/interplug/qcast/biz/login/dto/UserResponse.java b/src/main/java/com/interplug/qcast/biz/login/dto/UserResponse.java index 8bb3f9a0..e17ae25f 100644 --- a/src/main/java/com/interplug/qcast/biz/login/dto/UserResponse.java +++ b/src/main/java/com/interplug/qcast/biz/login/dto/UserResponse.java @@ -1,15 +1,26 @@ -package com.interplug.qcast.biz.login.dto; - -import lombok.Getter; -import lombok.Setter; - -//@Data -@Getter -@Setter -public class UserResponse { - private String userId; - private String saleStoreId; - private String name; - private String mail; - private String tel; -} +package com.interplug.qcast.biz.login.dto; + +import lombok.Getter; +import lombok.Setter; + +// @Data +@Getter +@Setter +public class UserResponse { + private String userId; + private String saleStoreId; + private String name; + private String mail; + private String tel; + + private String storeId; // Store Id + // private String userId; // User Id + private String userNm; // Name + private String userNmKana; // Name_Kana + private String category; // Category + private String telNo; // Telephone + private String fax; // Fax + private String email; // E-Mail + private String pwdInitYn; // Password Init Yn + +} diff --git a/src/main/java/com/interplug/qcast/util/DefaultResponse.java b/src/main/java/com/interplug/qcast/util/DefaultResponse.java new file mode 100644 index 00000000..7f1c66fa --- /dev/null +++ b/src/main/java/com/interplug/qcast/util/DefaultResponse.java @@ -0,0 +1,10 @@ +package com.interplug.qcast.util; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class DefaultResponse { + private DefaultResponseResult result; +} diff --git a/src/main/java/com/interplug/qcast/util/DefaultResponseResult.java b/src/main/java/com/interplug/qcast/util/DefaultResponseResult.java new file mode 100644 index 00000000..b075dbfc --- /dev/null +++ b/src/main/java/com/interplug/qcast/util/DefaultResponseResult.java @@ -0,0 +1,13 @@ +package com.interplug.qcast.util; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class DefaultResponseResult { + private int code; // Result Code(success : 200, error : 400) + private String message; // Result Message + private String resultCode; // Result Code2(success : S, error : E) + private String resultMsg; // Result Message2 +} diff --git a/src/main/java/com/interplug/qcast/util/InterfaceQsp.java b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java new file mode 100644 index 00000000..26bee66e --- /dev/null +++ b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java @@ -0,0 +1,76 @@ +package com.interplug.qcast.util; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +@RequiredArgsConstructor +public class InterfaceQsp { + /** + * API Call + * + * @param apiPath + * @param requestObject + * @return String + * @throws Exception + */ + public String callApi(HttpMethod httpMethod, String apiPath, Object requestObject) + throws Exception { + + URL url = null; + HttpURLConnection con = null; + OutputStreamWriter osw = null; + BufferedReader br = null; + StringBuilder sb = null; + + try { + url = new URL(apiPath); + con = (HttpURLConnection) url.openConnection(); + con.setConnectTimeout(5000); // 서버에 연결되는 Timeout 시간 설정 + con.setReadTimeout(5000); // InputStream 읽어 오는 Timeout 시간 설정 + con.setRequestMethod(httpMethod.toString()); + con.setRequestProperty("Content-Type", "application/json"); + con.setDoInput(true); + con.setDoOutput(true); // POST 데이터를 OutputStream으로 넘겨 주겠다는 설정 + con.setUseCaches(false); + con.setDefaultUseCaches(false); + + ObjectMapper om = new ObjectMapper(); + osw = new OutputStreamWriter(con.getOutputStream()); + osw.write(om.writeValueAsString(requestObject)); // json 형식의 message 전달 + osw.flush(); + + sb = new StringBuilder(); + if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { + br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8")); + + String line; + while ((line = br.readLine()) != null) { + sb.append(line); + } + } + } catch (Exception e) { + throw e; + } finally { + try { + if (osw != null) + osw.close(); + if (br != null) + br.close(); + } catch (Exception e) { + throw e; + } + } + + return sb != null ? sb.toString() : null; + } +} diff --git a/src/main/java/com/interplug/qcast/util/ZipFileManager.java b/src/main/java/com/interplug/qcast/util/ZipFileManager.java new file mode 100644 index 00000000..9cbce912 --- /dev/null +++ b/src/main/java/com/interplug/qcast/util/ZipFileManager.java @@ -0,0 +1,86 @@ +package com.interplug.qcast.util; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.springframework.stereotype.Component; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ZipFileManager { + + /** + * zip file을 생성하여 ZipOutputStream를 반환하는 method + * + * @param response HttpServletResponse + * @param strCreateFileName 생성할 file 이름 + * @param listFilePath 파일 경로 목록 + */ + public void createZipFile(HttpServletResponse response, String strCreateFileName, + List listFilePath) throws Exception { + // 압축될 파일명이 존재하지 않을 경우 + if (strCreateFileName == null || "".equals(strCreateFileName)) + throw new IllegalArgumentException("파일명이 존재하지 않습니다."); + + // 파일이 존재하지 않을 경우 + if (listFilePath == null || listFilePath.size() == 0) + throw new IllegalArgumentException("파일이 존재하지 않습니다."); + + // zip 파일명 + String strZipName = strCreateFileName + ".zip"; + + // response 설정 + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=" + strZipName + ";"); + response.setStatus(HttpServletResponse.SC_OK); + + try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { + for (String strSourceFile : listFilePath) { + Path path = Path.of(strSourceFile); + + try (FileInputStream fis = new FileInputStream(path.toFile())) { + // 압축될 파일명을 ZipEntry에 담아준다 + ZipEntry zipEntry = new ZipEntry(path.getFileName().toString()); + + // 압축될 파일명을 ZipOutputStream 에 담아준다 + zos.putNextEntry(zipEntry); + byte[] buffer = new byte[1024]; + int length; + + while ((length = fis.read(buffer)) >= 0) { + zos.write(buffer, 0, length); + } + } catch (FileNotFoundException e) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + throw new IllegalArgumentException("파일 변환 작업중, [ " + strZipName + " ] 파일을 찾을 수 없습니다."); + } catch (IOException e) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + throw new IllegalArgumentException( + "파일 변환 작업중, [ " + strZipName + " ] 파일을 다운로드 할 수 없습니다."); + } finally { + // ZipOutputStream 에 담아둔 압축될 파일명을 flush 시켜준다 + zos.flush(); + // ZipOutputStream 에 담아둔 압축될 파일명을 close 시켜준다 + zos.closeEntry(); + } + } + } catch (Exception e) { + throw e; + } finally { + try { + // response 에 담아둔 파일을 flush 시켜준다 + response.flushBuffer(); + } catch (IOException e) { + throw e; + } + } + } +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index e14b16b1..83559155 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -1,24 +1,28 @@ -#server -server: - port: 8080 - -#spring -spring: - datasource: - datasource: - master: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Master-HikariPool - read: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Read-HikariPool - jackson: - time-zone: Asia/Seoul \ No newline at end of file +#server +server: + port: 8080 + +#spring +spring: + datasource: + datasource: + master: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Master-HikariPool + read: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Read-HikariPool + jackson: + time-zone: Asia/Seoul + +#QSP +qsp: + url: http://172.23.4.129:8120 diff --git a/src/main/resources/config/application-local.yml b/src/main/resources/config/application-local.yml index ef07cd0b..5b7d4bf9 100644 --- a/src/main/resources/config/application-local.yml +++ b/src/main/resources/config/application-local.yml @@ -1,25 +1,28 @@ -#server -server: - port: 8080 - -#spring -spring: - datasource: - datasource: - master: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Master-HikariPool - read: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Read-HikariPool - jackson: - time-zone: Asia/Seoul - +#server +server: + port: 8080 + +#spring +spring: + datasource: + datasource: + master: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Master-HikariPool + read: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Read-HikariPool + jackson: + time-zone: Asia/Seoul + +#QSP +qsp: + url: http://localhost:8120 diff --git a/src/main/resources/config/application-prd.yml b/src/main/resources/config/application-prd.yml index a3b56077..c148d027 100644 --- a/src/main/resources/config/application-prd.yml +++ b/src/main/resources/config/application-prd.yml @@ -1,24 +1,28 @@ -#server -server: - port: 80 - -#spring -spring: - datasource: - datasource: - master: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Master-HikariPool - read: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true - username: pvDBuser - password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) - maximum-pool-size: 4 - pool-name: Read-HikariPool - jackson: - time-zone: Asia/Seoul \ No newline at end of file +#server +server: + port: 80 + +#spring +spring: + datasource: + datasource: + master: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Master-HikariPool + read: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:sqlserver://1.248.227.176:1433;databaseName=NEWPVCAD;encrypt=true;trustServerCertificate=true + username: pvDBuser + password: ENC(W7owprYnvf7vqwO6Piw4dHfVBCSxE4Ck) + maximum-pool-size: 4 + pool-name: Read-HikariPool + jackson: + time-zone: Asia/Seoul + +#QSP +qsp: + url: http://jp.qsalesplatform.com From 0cc3baf6aa105fb2ea654473de174269eb6ddd9a Mon Sep 17 00:00:00 2001 From: Kang Jung Kyo Date: Fri, 6 Sep 2024 15:38:52 +0900 Subject: [PATCH 2/4] =?UTF-8?q?get=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EB=B6=84=EA=B8=B0=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/interplug/qcast/util/InterfaceQsp.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/interplug/qcast/util/InterfaceQsp.java b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java index 26bee66e..09478684 100644 --- a/src/main/java/com/interplug/qcast/util/InterfaceQsp.java +++ b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java @@ -40,14 +40,20 @@ public class InterfaceQsp { con.setRequestMethod(httpMethod.toString()); con.setRequestProperty("Content-Type", "application/json"); con.setDoInput(true); - con.setDoOutput(true); // POST 데이터를 OutputStream으로 넘겨 주겠다는 설정 con.setUseCaches(false); con.setDefaultUseCaches(false); - ObjectMapper om = new ObjectMapper(); - osw = new OutputStreamWriter(con.getOutputStream()); - osw.write(om.writeValueAsString(requestObject)); // json 형식의 message 전달 - osw.flush(); + if (HttpMethod.GET.equals(httpMethod)) { + con.setDoOutput(false); + } else { + con.setDoOutput(true); // POST 데이터를 OutputStream으로 넘겨 주겠다는 설정 + if (requestObject != null) { + ObjectMapper om = new ObjectMapper(); + osw = new OutputStreamWriter(con.getOutputStream()); + osw.write(om.writeValueAsString(requestObject)); // json 형식의 message 전달 + osw.flush(); + } + } sb = new StringBuilder(); if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { From 46a8344b0a97ad4db3c061355383b18daad2c08b Mon Sep 17 00:00:00 2001 From: LEEYONGJAE Date: Fri, 6 Sep 2024 16:13:49 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[community]=20=EA=B2=8C=EC=8B=9C=ED=8C=90?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/biz/community/BoardController.java | 49 +++++++ .../qcast/biz/community/BoardService.java | 122 ++++++++++++++++++ .../qcast/biz/community/dto/BoardRequest.java | 28 ++++ .../biz/community/dto/BoardResponse.java | 15 +++ 4 files changed, 214 insertions(+) create mode 100644 src/main/java/com/interplug/qcast/biz/community/BoardController.java create mode 100644 src/main/java/com/interplug/qcast/biz/community/BoardService.java create mode 100644 src/main/java/com/interplug/qcast/biz/community/dto/BoardRequest.java create mode 100644 src/main/java/com/interplug/qcast/biz/community/dto/BoardResponse.java diff --git a/src/main/java/com/interplug/qcast/biz/community/BoardController.java b/src/main/java/com/interplug/qcast/biz/community/BoardController.java new file mode 100644 index 00000000..c2b980e2 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/community/BoardController.java @@ -0,0 +1,49 @@ +package com.interplug.qcast.biz.community; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import com.interplug.qcast.biz.community.dto.BoardRequest; +import com.interplug.qcast.biz.community.dto.BoardResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +@Tag(name = "BoardController", description = "Community Board API") +public class BoardController { + + private final BoardService boardService; + + @Operation(description = "커뮤니티(공지사항, FAQ, 자료다운로드) 게시글 목록을 조회한다.") + @GetMapping("/list") + @ResponseStatus(HttpStatus.OK) + public BoardResponse getBoardList(@ModelAttribute BoardRequest boardRequest) throws Exception { + return boardService.getBoardList(boardRequest); + } + + @Operation(description = "커뮤니티(공지사항, FAQ, 자료다운로드) 게시글 상세 정보를 조회한다.") + @GetMapping("/detail") + @ResponseStatus(HttpStatus.OK) + public BoardResponse getBoardDetail(@ModelAttribute BoardRequest boardRequest) throws Exception { + return boardService.getBoardDetail(boardRequest); + } + + @Operation(description = "커뮤니티(공지사항, FAQ, 자료다운로드) 파일 다운로드를 진행한다.") + @GetMapping("/file/download") + @ResponseStatus(HttpStatus.OK) + public void getFileDownload(HttpServletResponse response, + @RequestParam(required = true) String encodeFileNo) throws Exception { + boardService.getFileDownload(response, encodeFileNo); + } + +} diff --git a/src/main/java/com/interplug/qcast/biz/community/BoardService.java b/src/main/java/com/interplug/qcast/biz/community/BoardService.java new file mode 100644 index 00000000..4efc3ab3 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/community/BoardService.java @@ -0,0 +1,122 @@ +package com.interplug.qcast.biz.community; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import org.springframework.util.StreamUtils; +import org.springframework.web.util.UriComponentsBuilder; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.interplug.qcast.biz.community.dto.BoardRequest; +import com.interplug.qcast.biz.community.dto.BoardResponse; +import com.interplug.qcast.util.InterfaceQsp; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class BoardService { + + @Value("${qsp.url}") + private String QSP_API_URL; + + private final InterfaceQsp interfaceQsp; + + /** + * ※ 게시판 목록 조회 QSP -> Q.CAST3 + * + * @param boardRequest + * @return + * @throws Exception + */ + public BoardResponse getBoardList(BoardRequest boardRequest) throws Exception { + + BoardResponse response = null; + + /* [0]. QSP API (url + param) Setting */ + String url = QSP_API_URL + "/api/board/list"; + String apiUrl = + UriComponentsBuilder.fromHttpUrl(url).queryParam("noticeNo", boardRequest.getNoticeNo()) + .queryParam("schTitle", boardRequest.getSchTitle()) + .queryParam("schNoticeTpCd", boardRequest.getSchNoticeTpCd()) + .queryParam("schNoticeClsCd", boardRequest.getSchNoticeClsCd()) + .queryParam("startRow", boardRequest.getStartRow()) + .queryParam("endRow", boardRequest.getEndRow()).build().toUriString(); + + /* [1]. QSP API CALL -> Response */ + String strResponse = interfaceQsp.callApi(HttpMethod.GET, apiUrl, null); + + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + response = om.readValue(strResponse, BoardResponse.class); + } + + return response; + + } + + /** + * ※ 게시판 상세 조회 QSP -> Q.CAST3 + * + * @param boardRequest + * @return + * @throws Exception + */ + public BoardResponse getBoardDetail(BoardRequest boardRequest) throws Exception { + + BoardResponse response = null; + + /* [0]. QSP API (url + param) Setting */ + String url = QSP_API_URL + "/api/board/detail"; + String apiUrl = UriComponentsBuilder.fromHttpUrl(url) + .queryParam("noticeNo", boardRequest.getNoticeNo()).build().toUriString(); + + /* [1]. QSP API CALL -> Response */ + String strResponse = interfaceQsp.callApi(HttpMethod.GET, apiUrl, null); + + if (!"".equals(strResponse)) { + ObjectMapper om = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + response = om.readValue(strResponse, BoardResponse.class); + } + + return response; + } + + /** + * ※ 게시판 파일 다운로드 QSP -> Q.CAST3 + * + * @param response + * @param encodeFileNo + * @throws Exception + */ + public void getFileDownload(HttpServletResponse response, String encodeFileNo) throws Exception { + + /* [0]. QSP API (url + fileNo) Setting */ + String url = QSP_API_URL + "/api/file/downloadFile" + "?encodeFileNo=" + encodeFileNo; + + /* [1]. QSP API CALL -> Response */ + String strResponse = interfaceQsp.callApi(HttpMethod.GET, url, null); + + if (!"".equals(strResponse)) { + /* [2]. API 응답 파일 처리 */ + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;"); + + InputStream inputStream = new ByteArrayInputStream(strResponse.getBytes()); + StreamUtils.copy(inputStream, response.getOutputStream()); + + response.flushBuffer(); + } + + } + + +} diff --git a/src/main/java/com/interplug/qcast/biz/community/dto/BoardRequest.java b/src/main/java/com/interplug/qcast/biz/community/dto/BoardRequest.java new file mode 100644 index 00000000..b690b521 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/community/dto/BoardRequest.java @@ -0,0 +1,28 @@ +package com.interplug.qcast.biz.community.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class BoardRequest { + + /** NOTICE_NO */ + private Integer noticeNo; + + /** 제목 검색조건 */ + private String schTitle; + + /** Notice Type Code 검색조건 */ + private String schNoticeTpCd; + + /** Notice Type Code 검색조건 */ + private String schNoticeClsCd; + + /** 시작 행 */ + private Integer startRow; + + /** 종료 행 */ + private int endRow; + +} diff --git a/src/main/java/com/interplug/qcast/biz/community/dto/BoardResponse.java b/src/main/java/com/interplug/qcast/biz/community/dto/BoardResponse.java new file mode 100644 index 00000000..de367a09 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/community/dto/BoardResponse.java @@ -0,0 +1,15 @@ +package com.interplug.qcast.biz.community.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class BoardResponse { + + /** API response result */ + private Object result; + + /** API response data */ + private Object data; +} From 09fd9690f842594f2cc171889167bdd4907e4b68 Mon Sep 17 00:00:00 2001 From: LEEYONGJAE Date: Fri, 6 Sep 2024 16:20:57 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[myInfo]=20=EB=82=B4=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=ED=8C=9D=EC=97=85=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/biz/myInfo/MyInfoController.java | 32 +++++++++++++++ .../qcast/biz/myInfo/MyInfoMapper.java | 18 +++++++++ .../qcast/biz/myInfo/MyInfoService.java | 26 ++++++++++++ .../qcast/biz/myInfo/dto/MyInfoRequest.java | 13 ++++++ .../qcast/biz/myInfo/dto/MyInfoResponse.java | 40 +++++++++++++++++++ .../resources/mappers/myInfo/myInfoMapper.xml | 21 ++++++++++ 6 files changed, 150 insertions(+) create mode 100644 src/main/java/com/interplug/qcast/biz/myInfo/MyInfoController.java create mode 100644 src/main/java/com/interplug/qcast/biz/myInfo/MyInfoMapper.java create mode 100644 src/main/java/com/interplug/qcast/biz/myInfo/MyInfoService.java create mode 100644 src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoRequest.java create mode 100644 src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoResponse.java create mode 100644 src/main/resources/mappers/myInfo/myInfoMapper.xml diff --git a/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoController.java b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoController.java new file mode 100644 index 00000000..8b6b937d --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoController.java @@ -0,0 +1,32 @@ +package com.interplug.qcast.biz.myInfo; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import com.interplug.qcast.biz.myInfo.dto.MyInfoRequest; +import com.interplug.qcast.biz.myInfo.dto.MyInfoResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RestController +@RequestMapping("/api/my-info") +@RequiredArgsConstructor +@Tag(name = "MyInfoController", description = "내 정보 조회 API") +public class MyInfoController { + + private final MyInfoService myInfoService; + + @Operation(description = "사용자 ID의 정보를 조회한다.") + @GetMapping("/my-profile") + @ResponseStatus(HttpStatus.OK) + public MyInfoResponse getMyInfo(@ModelAttribute MyInfoRequest myInfoRequest) { + return myInfoService.getMyInfo(myInfoRequest); + } + +} diff --git a/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoMapper.java b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoMapper.java new file mode 100644 index 00000000..102eca99 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoMapper.java @@ -0,0 +1,18 @@ +package com.interplug.qcast.biz.myInfo; + +import org.apache.ibatis.annotations.Mapper; +import com.interplug.qcast.biz.myInfo.dto.MyInfoRequest; +import com.interplug.qcast.biz.myInfo.dto.MyInfoResponse; + +@Mapper +public interface MyInfoMapper { + + /** + * ※ 사용자 정보 조회 + * + * @param myInfoRequest + * @return + */ + MyInfoResponse selectMyInfo(MyInfoRequest myInfoRequest); + +} diff --git a/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoService.java b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoService.java new file mode 100644 index 00000000..35f2d93e --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/myInfo/MyInfoService.java @@ -0,0 +1,26 @@ +package com.interplug.qcast.biz.myInfo; + +import org.springframework.stereotype.Service; +import com.interplug.qcast.biz.myInfo.dto.MyInfoRequest; +import com.interplug.qcast.biz.myInfo.dto.MyInfoResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MyInfoService { + + private final MyInfoMapper myInfoMapper; + + /** + * ※ 사용자 정보 조회 + * + * @param userId + * @return MyInfoResponse + */ + public MyInfoResponse getMyInfo(MyInfoRequest myInfoRequest) { + return myInfoMapper.selectMyInfo(myInfoRequest); + } + +} diff --git a/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoRequest.java b/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoRequest.java new file mode 100644 index 00000000..fc7c0642 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoRequest.java @@ -0,0 +1,13 @@ +package com.interplug.qcast.biz.myInfo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MyInfoRequest { + + /** 사용자ID */ + private String userId; + +} diff --git a/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoResponse.java b/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoResponse.java new file mode 100644 index 00000000..2b421002 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/myInfo/dto/MyInfoResponse.java @@ -0,0 +1,40 @@ +package com.interplug.qcast.biz.myInfo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MyInfoResponse { + + /** 사용자ID */ + private String userId; + + /** 비밀번호 */ + private String password; + + /** 담당자명 */ + private String name; + + /** 담당자명 후리가나 */ + private String nameKana; + + /** 부서명 */ + private String category; + + /** 전화번호 */ + private String tel; + + /** fax번호 */ + private String fax; + + /** 이메일 주소 */ + private String mail; + + /** GROUD ID */ + private String groupId; + + /** GROUD 명 */ + private String groupName; + +} diff --git a/src/main/resources/mappers/myInfo/myInfoMapper.xml b/src/main/resources/mappers/myInfo/myInfoMapper.xml new file mode 100644 index 00000000..dae5591b --- /dev/null +++ b/src/main/resources/mappers/myInfo/myInfoMapper.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file