[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.security.SecurityRequirement;
|
||||
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.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, "개인정보 수정");
|
||||
}
|
||||
|
||||
@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;
|
||||
|
||||
import com.alist.api.modules.user.dto.UserDto;
|
||||
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.dto.*;
|
||||
import com.alist.api.modules.user.vo.UserVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@@ -15,11 +12,11 @@ public interface UserMapper {
|
||||
|
||||
int insertUserTokenSignup(UserTokenDto userTokenDto);
|
||||
|
||||
UserVo selectUserByUserIdx(Integer userIdx);
|
||||
|
||||
UserVo selectUserByUserTokenIdx(Integer userTokenIdx);
|
||||
|
||||
int updateUserPassword(UserPasswordChangeDto userPasswordChangeDto);
|
||||
|
||||
int updateUserProfile(UserProfileUpdateDto userProfileUpdateDto);
|
||||
|
||||
int updateWithdrawStatus(UserWithdrawStatusUpdateDto userWithdrawStatusUpdateDto);
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public class UserService {
|
||||
return result;
|
||||
}
|
||||
|
||||
UserVo userVo = userMapper.selectUserByUserIdx(userPasswordCheckDto.getUserTokenIdx());
|
||||
UserVo userVo = userMapper.selectUserByUserTokenIdx(userPasswordCheckDto.getUserTokenIdx());
|
||||
|
||||
if (userVo == null || userVo.getPassword() == null) {
|
||||
result.setPasswordMatched(false);
|
||||
@@ -227,4 +227,33 @@ public class UserService {
|
||||
|
||||
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}
|
||||
AND ATU.del_yn = 1
|
||||
</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">
|
||||
/*UserMapper.selectDuplicateUserCount*/
|
||||
@@ -43,16 +59,6 @@
|
||||
where id = #{id}
|
||||
</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">
|
||||
/*UserMapper.selectUserByUserTokenIdx*/
|
||||
SELECT ATU.user_idx
|
||||
|
||||
Reference in New Issue
Block a user