Skip to content

Commit e5a8948

Browse files
committed
[Feat] : 탈퇴 사유 받기 api 작성
1 parent a0b2570 commit e5a8948

8 files changed

Lines changed: 77 additions & 20 deletions

File tree

src/main/java/com/potato/balbambalbam/data/entity/Withdrawal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class Withdrawal {
2020
private long userId;
2121

2222
@Column(name = "code", nullable = false)
23-
private int code;
23+
private long code;
2424

2525
@Column(name = "details")
2626
private String details;

src/main/java/com/potato/balbambalbam/data/entity/WithdrawalCode.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ public class WithdrawalCode {
1111

1212
@Id
1313
@Column(name = "id")
14-
@GeneratedValue(strategy = GenerationType.IDENTITY)
15-
private int code;
14+
private long code;
1615

1716
@Column(name = "description", nullable = false)
1817
private String description;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.potato.balbambalbam.data.repository;
2+
3+
import com.potato.balbambalbam.data.entity.Withdrawal;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface WithdrawalRepository extends JpaRepository<Withdrawal, Long> {
7+
}

src/main/java/com/potato/balbambalbam/user/join/service/JoinService.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import jakarta.servlet.http.HttpServletResponse;
1313
import jakarta.transaction.Transactional;
1414
import java.time.LocalDateTime;
15+
import java.util.UUID;
1516
import lombok.RequiredArgsConstructor;
1617
import org.springframework.stereotype.Service;
1718

@@ -139,13 +140,19 @@ public void anonymizeUserData(String socialId) {
139140
cardScoreRepository.deleteByUserId(userId);
140141
customCardRepository.deleteByUserId(userId);
141142
notificationReadRepository.deleteByUserId(userId);
142-
refreshRepository.deleteByUserId(userId);
143143
userAttendanceRepository.deleteByUserId(userId);
144144
userLevelRepository.deleteByUserId(userId);
145145
userWeakSoundRepository.deleteByUserId(userId);
146+
refreshRepository.deleteByUserId(userId);
147+
148+
// 3. UUID 생성 (중복 체크)
149+
String uniqueSocialId;
150+
do {
151+
uniqueSocialId = "Deleted_" + UUID.randomUUID();
152+
} while (userRepository.existsBySocialId(uniqueSocialId)); // DB에 같은 UUID가 있으면 다시 생성
146153

147-
// 3. 사용자 민감 정보 초기화 (익명화)
148-
user.setSocialId("Deleted");
154+
// 4. 사용자 민감 정보 초기화 (익명화)
155+
user.setSocialId(uniqueSocialId);
149156
user.setName("Anonymous");
150157
user.setStatusId(4L); // 익명화된 사용자 상태로 설정
151158
userRepository.save(user);
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.potato.balbambalbam.user.withdrawal.controller;
22

33
import com.potato.balbambalbam.user.token.jwt.JWTUtil;
4-
import com.potato.balbambalbam.user.withdrawal.dto.WithdrawalResponseDto;
4+
import com.potato.balbambalbam.user.withdrawal.dto.WithdrawalRequestDto;
55
import com.potato.balbambalbam.user.withdrawal.service.WithdrawalService;
66
import io.swagger.v3.oas.annotations.Operation;
7-
import io.swagger.v3.oas.annotations.media.Content;
8-
import io.swagger.v3.oas.annotations.media.Schema;
97
import io.swagger.v3.oas.annotations.responses.ApiResponse;
108
import io.swagger.v3.oas.annotations.responses.ApiResponses;
119
import io.swagger.v3.oas.annotations.tags.Tag;
1210
import lombok.RequiredArgsConstructor;
1311
import org.springframework.http.ResponseEntity;
1412
import org.springframework.web.bind.annotation.PostMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
1514
import org.springframework.web.bind.annotation.RequestHeader;
1615
import org.springframework.web.bind.annotation.RestController;
1716

@@ -20,17 +19,21 @@
2019
@RestController
2120
@Tag(name = "Withdrawal API", description = "탈퇴 사유를 저장한다.")
2221
public class WithdrawalController {
22+
2323
private final JWTUtil jwtUtil;
24-
//private final WithdrawalService withdrawalService;
24+
private final WithdrawalService withdrawalService;
2525

26-
@Operation(summary = "탈퇴 사유 받기", description = "사용자의 월별 출석 날짜를 조회합니다.")
26+
@Operation(summary = "사용자 계정 탈퇴 사유", description = "사용자의 탈퇴 사유를 저장합니다.")
2727
@ApiResponses(value = {
28-
@ApiResponse(responseCode = "200", description = "조회 성공", content = @Content(schema = @Schema(implementation = WithdrawalResponseDto.class))),
28+
@ApiResponse(responseCode = "200", description = "탈퇴 사유 저장 성공"),
2929
})
30-
@PostMapping("/user/withdrawal")
31-
public ResponseEntity<WithdrawalResponseDto> setWithdrawal(@RequestHeader("access") String access) {
30+
@PostMapping("/users/withdrawal")
31+
public ResponseEntity<?> setWithdrawal(
32+
@RequestHeader("access") String access, @RequestBody WithdrawalRequestDto requestDto) {
33+
3234
Long userId = jwtUtil.getUserId(access);
33-
//return ResponseEntity.ok();
34-
return null;
35+
withdrawalService.processWithdrawal(userId, requestDto);
36+
37+
return ResponseEntity.ok().body("사용자의 탈퇴 사유 저장 완료");
3538
}
3639
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.potato.balbambalbam.user.withdrawal.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
@Schema(description = "탈퇴 사유 Request DTO")
11+
public class WithdrawalRequestDto {
12+
13+
@NotNull(message = "탈퇴 사유 코드가 필요합니다.")
14+
private Long reasonCode;
15+
private String details;
16+
}

src/main/java/com/potato/balbambalbam/user/withdrawal/dto/WithdrawalResponseDto.java

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,33 @@
11
package com.potato.balbambalbam.user.withdrawal.service;
22

3+
import com.potato.balbambalbam.data.entity.Withdrawal;
4+
import com.potato.balbambalbam.data.repository.UserRepository;
5+
import com.potato.balbambalbam.data.repository.WithdrawalRepository;
6+
import com.potato.balbambalbam.user.withdrawal.dto.WithdrawalRequestDto;
7+
import java.time.LocalDateTime;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
@RequiredArgsConstructor
313
public class WithdrawalService {
14+
15+
private final WithdrawalRepository withdrawalRepository;
16+
17+
public void processWithdrawal(Long userId, WithdrawalRequestDto requestDto) {
18+
19+
// 탈퇴 사유가 'Other(6)'일 경우, details가 필수
20+
if (requestDto.getReasonCode() == 6 && (requestDto.getDetails() == null || requestDto.getDetails().isBlank())) {
21+
throw new IllegalArgumentException("Other인 경우 입력값이 필요합니다.");
22+
}
23+
24+
// 탈퇴 기록 저장
25+
Withdrawal withdrawal = new Withdrawal();
26+
withdrawal.setUserId(userId);
27+
withdrawal.setCode(requestDto.getReasonCode());
28+
withdrawal.setDetails(requestDto.getReasonCode() == 6 ? requestDto.getDetails() : null);
29+
withdrawal.setCreatedAt(LocalDateTime.now());
30+
31+
withdrawalRepository.save(withdrawal);
32+
}
433
}

0 commit comments

Comments
 (0)