[api] 회원 탈퇴 관련 api 추가
This commit is contained in:
@@ -6,6 +6,7 @@ import io.swagger.v3.oas.models.Components;
|
|||||||
import io.swagger.v3.oas.models.OpenAPI;
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
import io.swagger.v3.oas.models.security.SecurityRequirement;
|
import io.swagger.v3.oas.models.security.SecurityRequirement;
|
||||||
import io.swagger.v3.oas.models.security.SecurityScheme;
|
import io.swagger.v3.oas.models.security.SecurityScheme;
|
||||||
|
import org.springdoc.core.models.GroupedOpenApi;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@@ -34,4 +35,25 @@ public class OpenApiConfig {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public GroupedOpenApi frontApi() {
|
||||||
|
return GroupedOpenApi.builder()
|
||||||
|
.group("front")
|
||||||
|
.pathsToMatch("/**")
|
||||||
|
.pathsToExclude(
|
||||||
|
"/admin/**",
|
||||||
|
"/error",
|
||||||
|
"/actuator/**"
|
||||||
|
)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public GroupedOpenApi adminApi() {
|
||||||
|
return GroupedOpenApi.builder()
|
||||||
|
.group("admin")
|
||||||
|
.pathsToMatch("/admin/**")
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,4 +120,25 @@ public class UserController {
|
|||||||
|
|
||||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2005, "개인정보 수정");
|
return ApiResponse.entity(result, ApiResponseCode.CODE_2005, "개인정보 수정");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "사용자 탈퇴 상태 변경",
|
||||||
|
description = "로그인한 사용자의 탈퇴 요청 또는 탈퇴 요청 철회를 처리합니다. P: 탈퇴대기, N: 탈퇴요청 철회"
|
||||||
|
)
|
||||||
|
@PatchMapping("/withdraw")
|
||||||
|
public ResponseEntity<ApiResponse<UserWithdrawStatusUpdateVo>> updateWithdrawStatus(
|
||||||
|
@Valid @RequestBody UserWithdrawStatusUpdateForm userWithdrawStatusUpdateForm
|
||||||
|
) {
|
||||||
|
UserWithdrawStatusUpdateVo result = userService.updateWithdrawStatus(userWithdrawStatusUpdateForm.toUserWithdrawStatusUpdateDto());
|
||||||
|
|
||||||
|
if (!result.isWithdrawStatusUpdated()) {
|
||||||
|
if (result.getResultCode() == 4003 || result.getResultCode() == 4001) {
|
||||||
|
return ApiResponse.entity(result, ApiResponseCode.CODE_4001);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(result, ApiResponseCode.CODE_2003);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(result, ApiResponseCode.CODE_2005, "탈퇴 상태 변경");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.alist.api.modules.user.dto;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class UserWithdrawStatusUpdateDto {
|
||||||
|
private Integer userTokenIdx;
|
||||||
|
private String withdrawStatus;
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.alist.api.modules.user.form;
|
||||||
|
|
||||||
|
import com.alist.api.modules.user.dto.UserWithdrawStatusUpdateDto;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Pattern;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "사용자 탈퇴 상태 변경 요청 폼")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class UserWithdrawStatusUpdateForm {
|
||||||
|
@Schema(
|
||||||
|
description = "탈퇴 상태. P: 탈퇴대기, N: 탈퇴요청 철회",
|
||||||
|
example = "P",
|
||||||
|
requiredMode = Schema.RequiredMode.REQUIRED
|
||||||
|
)
|
||||||
|
@NotBlank(message = "탈퇴 상태는 필수입니다.")
|
||||||
|
@Pattern(regexp = "^[PN]$", message = "탈퇴 상태는 P 또는 N만 가능합니다.")
|
||||||
|
private String withdrawStatus;
|
||||||
|
|
||||||
|
public UserWithdrawStatusUpdateDto toUserWithdrawStatusUpdateDto() {
|
||||||
|
UserWithdrawStatusUpdateDto userWithdrawStatusUpdateDto = new UserWithdrawStatusUpdateDto();
|
||||||
|
userWithdrawStatusUpdateDto.setWithdrawStatus(withdrawStatus);
|
||||||
|
return userWithdrawStatusUpdateDto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
package com.alist.api.modules.user.mapper;
|
package com.alist.api.modules.user.mapper;
|
||||||
|
|
||||||
import com.alist.api.modules.user.dto.UserDto;
|
import com.alist.api.modules.user.dto.*;
|
||||||
import com.alist.api.modules.user.dto.UserPasswordChangeDto;
|
|
||||||
import com.alist.api.modules.user.dto.UserProfileUpdateDto;
|
|
||||||
import com.alist.api.modules.user.dto.UserTokenDto;
|
|
||||||
import com.alist.api.modules.user.vo.UserVo;
|
import com.alist.api.modules.user.vo.UserVo;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
@@ -15,11 +12,11 @@ public interface UserMapper {
|
|||||||
|
|
||||||
int insertUserTokenSignup(UserTokenDto userTokenDto);
|
int insertUserTokenSignup(UserTokenDto userTokenDto);
|
||||||
|
|
||||||
UserVo selectUserByUserIdx(Integer userIdx);
|
|
||||||
|
|
||||||
UserVo selectUserByUserTokenIdx(Integer userTokenIdx);
|
UserVo selectUserByUserTokenIdx(Integer userTokenIdx);
|
||||||
|
|
||||||
int updateUserPassword(UserPasswordChangeDto userPasswordChangeDto);
|
int updateUserPassword(UserPasswordChangeDto userPasswordChangeDto);
|
||||||
|
|
||||||
int updateUserProfile(UserProfileUpdateDto userProfileUpdateDto);
|
int updateUserProfile(UserProfileUpdateDto userProfileUpdateDto);
|
||||||
|
|
||||||
|
int updateWithdrawStatus(UserWithdrawStatusUpdateDto userWithdrawStatusUpdateDto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ public class UserService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserVo userVo = userMapper.selectUserByUserIdx(userPasswordCheckDto.getUserTokenIdx());
|
UserVo userVo = userMapper.selectUserByUserTokenIdx(userPasswordCheckDto.getUserTokenIdx());
|
||||||
|
|
||||||
if (userVo == null || userVo.getPassword() == null) {
|
if (userVo == null || userVo.getPassword() == null) {
|
||||||
result.setPasswordMatched(false);
|
result.setPasswordMatched(false);
|
||||||
@@ -227,4 +227,33 @@ public class UserService {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public UserWithdrawStatusUpdateVo updateWithdrawStatus(UserWithdrawStatusUpdateDto userWithdrawStatusUpdateDto) {
|
||||||
|
UserWithdrawStatusUpdateVo result = new UserWithdrawStatusUpdateVo();
|
||||||
|
|
||||||
|
Integer userTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||||
|
userWithdrawStatusUpdateDto.setUserTokenIdx(userTokenIdx);
|
||||||
|
|
||||||
|
if (userTokenIdx == null || userWithdrawStatusUpdateDto.getWithdrawStatus() == null) {
|
||||||
|
result.setWithdrawStatusUpdated(false);
|
||||||
|
result.setResultCode(4003);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String withdrawStatus = userWithdrawStatusUpdateDto.getWithdrawStatus();
|
||||||
|
|
||||||
|
if (!"P".equals(withdrawStatus) && !"N".equals(withdrawStatus)) {
|
||||||
|
result.setWithdrawStatusUpdated(false);
|
||||||
|
result.setResultCode(4001);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int updateCount = userMapper.updateWithdrawStatus(userWithdrawStatusUpdateDto);
|
||||||
|
|
||||||
|
result.setWithdrawStatusUpdated(updateCount > 0);
|
||||||
|
result.setResultCode(updateCount > 0 ? 2005 : 2003);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.alist.api.modules.user.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "사용자 탈퇴 상태 변경 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class UserWithdrawStatusUpdateVo {
|
||||||
|
@Schema(description = "탈퇴 상태 변경 여부", example = "true")
|
||||||
|
private boolean withdrawStatusUpdated;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private Integer resultCode;
|
||||||
|
}
|
||||||
@@ -35,6 +35,22 @@
|
|||||||
WHERE ATUT.user_token_idx = #{userTokenIdx}
|
WHERE ATUT.user_token_idx = #{userTokenIdx}
|
||||||
AND ATU.del_yn = 1
|
AND ATU.del_yn = 1
|
||||||
</update>
|
</update>
|
||||||
|
<update id="updateWithdrawStatus">
|
||||||
|
/*UserMapper.updateWithdrawStatus*/
|
||||||
|
UPDATE ALISTLMS.test_user ATU
|
||||||
|
INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx
|
||||||
|
SET ATU.withdraw_status = #{withdrawStatus}
|
||||||
|
, ATU.withdraw_at =
|
||||||
|
CASE
|
||||||
|
WHEN #{withdrawStatus} = 'P' THEN now()
|
||||||
|
WHEN #{withdrawStatus} = 'N' THEN NULL
|
||||||
|
ELSE ATU.withdraw_at
|
||||||
|
END
|
||||||
|
, ATU.update_at = now()
|
||||||
|
WHERE ATUT.user_token_idx = #{userTokenIdx}
|
||||||
|
AND ATU.del_yn = 1
|
||||||
|
AND ATU.withdraw_status != 'Y'
|
||||||
|
</update>
|
||||||
|
|
||||||
<select id="selectDuplicateUserCount" resultType="int">
|
<select id="selectDuplicateUserCount" resultType="int">
|
||||||
/*UserMapper.selectDuplicateUserCount*/
|
/*UserMapper.selectDuplicateUserCount*/
|
||||||
@@ -43,16 +59,6 @@
|
|||||||
where id = #{id}
|
where id = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectUserByUserIdx" resultType="com.alist.api.modules.user.vo.UserVo">
|
|
||||||
/*UserMapper.selectUserByUserIdx*/
|
|
||||||
SELECT ATU.user_idx
|
|
||||||
, ATU.password
|
|
||||||
FROM ALISTLMS.test_user ATU
|
|
||||||
INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx
|
|
||||||
WHERE ATUT.user_token_idx = #{userTokenIdx}
|
|
||||||
AND ATU.del_yn = 1
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectUserByUserTokenIdx" resultType="com.alist.api.modules.user.vo.UserVo">
|
<select id="selectUserByUserTokenIdx" resultType="com.alist.api.modules.user.vo.UserVo">
|
||||||
/*UserMapper.selectUserByUserTokenIdx*/
|
/*UserMapper.selectUserByUserTokenIdx*/
|
||||||
SELECT ATU.user_idx
|
SELECT ATU.user_idx
|
||||||
|
|||||||
Reference in New Issue
Block a user