Skip to content

Commit 59e51f7

Browse files
committed
refactor: User 관련 엔티티 제거 로직 변경 (CASCADE -> @Modifying 기반 delete 쿼리)
1 parent 143431e commit 59e51f7

11 files changed

Lines changed: 91 additions & 17 deletions

src/main/kotlin/gat_be/dev/domain/auth/controller/AuthController.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ApiResponse
44
import gat_be.dev.common.status.SuccessStatus
55
import gat_be.dev.domain.auth.dto.request.*
66
import gat_be.dev.domain.auth.dto.response.*
7+
import gat_be.dev.domain.auth.facade.UserWithdrawalFacade
78
import gat_be.dev.domain.auth.service.AuthService
89
import io.swagger.v3.oas.annotations.Operation
910
import io.swagger.v3.oas.annotations.media.Content
@@ -18,7 +19,8 @@ import org.springframework.web.bind.annotation.*
1819
@RequestMapping("/auth")
1920
@Tag(name = "Auth")
2021
class AuthController(
21-
private val authService: AuthService
22+
private val authService: AuthService,
23+
private val userWithdrawalFacade: UserWithdrawalFacade
2224
) {
2325

2426
@PostMapping("/signup")
@@ -63,7 +65,7 @@ class AuthController(
6365
fun withdraw(
6466
@AuthenticationPrincipal userId: Long
6567
): ResponseEntity<ApiResponse<Nothing>> {
66-
authService.withdraw(userId)
68+
userWithdrawalFacade.withdraw(userId)
6769
return ApiResponse.success(SuccessStatus.DELETE_USER_SUCCESS)
6870
}
6971

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package gat_be.dev.domain.auth.facade
2+
3+
import gat_be.dev.domain.application.service.ApplicationService
4+
import gat_be.dev.domain.team.service.TeamService
5+
import gat_be.dev.domain.user.service.UserService
6+
import jakarta.transaction.Transactional
7+
import org.springframework.stereotype.Service
8+
9+
@Service
10+
class UserWithdrawalFacade(
11+
private val applicationService: ApplicationService,
12+
private val userService: UserService,
13+
private val teamService: TeamService,
14+
) {
15+
16+
// 회원 탈퇴
17+
@Transactional
18+
fun withdraw(userId: Long) {
19+
userService.withdrawUser(userId)
20+
}
21+
22+
}

src/main/kotlin/gat_be/dev/domain/auth/service/AuthService.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,6 @@ class AuthService(
5656
userService.clearRefreshToken(user)
5757
}
5858

59-
// 회원탈퇴
60-
@Transactional
61-
fun withdraw(userId: Long) {
62-
val user = userService.findUserByUserId(userId)
63-
userService.withdrawUser(user)
64-
}
65-
6659
// 아이디 중복 확인
6760
fun checkId(loginId: String): CheckIdResponse {
6861
return userService.checkId(loginId)

src/main/kotlin/gat_be/dev/domain/user/repository/UserRepository.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package gat_be.dev.domain.user.repository
22

33
import gat_be.dev.domain.user.entity.User
44
import org.springframework.data.jpa.repository.JpaRepository
5+
import org.springframework.data.jpa.repository.Modifying
6+
import org.springframework.data.jpa.repository.Query
7+
import org.springframework.data.repository.query.Param
58

69
interface UserRepository: JpaRepository<User, Long> {
710
fun findByUserId(userId: Long): User?
@@ -11,4 +14,13 @@ interface UserRepository: JpaRepository<User, Long> {
1114
fun existsByEmail(email:String):Boolean
1215
fun findByEmail(email:String):User?
1316
fun findByRefreshToken(refreshToken:String):User?
17+
18+
@Modifying
19+
@Query("""
20+
DELETE FROM User u
21+
WHERE u.userId = :userId
22+
"""
23+
)
24+
fun deleteByUserId(@Param("userId") userId: Long)
25+
1426
}

src/main/kotlin/gat_be/dev/domain/user/repository/UserScrappedTeamRepository.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,19 @@ package gat_be.dev.domain.user.repository
33
import gat_be.dev.domain.user.entity.User
44
import gat_be.dev.domain.user.entity.UserScrappedTeam
55
import org.springframework.data.jpa.repository.JpaRepository
6+
import org.springframework.data.jpa.repository.Modifying
7+
import org.springframework.data.jpa.repository.Query
8+
import org.springframework.data.repository.query.Param
69

710
interface UserScrappedTeamRepository: JpaRepository<UserScrappedTeam, Long> {
811
fun countByUser(user: User): Long
12+
13+
@Modifying
14+
@Query("""
15+
DELETE FROM UserScrappedTeam ust
16+
WHERE ust.user.userId = :userId
17+
"""
18+
)
19+
fun deleteAllByUserId(@Param("userId") userId: Long)
20+
921
}

src/main/kotlin/gat_be/dev/domain/user/repository/UserTechStackRepository.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ interface UserTechStackRepository: JpaRepository<UserTechStack, Long> {
1212

1313
fun findAllByUserOrderByLevelDescNameAsc(user:User): List<UserTechStack>
1414

15-
fun deleteAllByUser(user: User)
15+
@Modifying
16+
@Query("""
17+
DELETE FROM UserTechStack uts
18+
WHERE uts.user.userId = :userId
19+
"""
20+
)
21+
fun deleteAllByUserId(@Param("userId") userId: Long)
1622

1723
@Modifying
1824
@Query("""

src/main/kotlin/gat_be/dev/domain/user/repository/UserViewedTeamHistoryRepository.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,19 @@ package gat_be.dev.domain.user.repository
33
import gat_be.dev.domain.user.entity.User
44
import gat_be.dev.domain.user.entity.UserViewedTeamHistory
55
import org.springframework.data.jpa.repository.JpaRepository
6+
import org.springframework.data.jpa.repository.Modifying
7+
import org.springframework.data.jpa.repository.Query
8+
import org.springframework.data.repository.query.Param
69

710
interface UserViewedTeamHistoryRepository: JpaRepository<UserViewedTeamHistory, Long> {
811
fun countByUser(user:User):Long
12+
13+
@Modifying
14+
@Query("""
15+
DELETE FROM UserViewedTeamHistory uvt
16+
WHERE uvt.user.userId = :userId
17+
"""
18+
)
19+
fun deleteAllByUserId(@Param("userId") userId: Long)
20+
921
}

src/main/kotlin/gat_be/dev/domain/user/service/UserScrappedTeamService.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.springframework.stereotype.Service
88

99
@Service
1010
class UserScrappedTeamService(
11-
private val userScrappedTeamRepository: UserScrappedTeamRepository,
11+
private val userScrappedTeamRepository: UserScrappedTeamRepository
1212
) {
1313

1414
// 유저의 스크랩 수 조회
@@ -24,4 +24,10 @@ class UserScrappedTeamService(
2424
)
2525
userScrappedTeamRepository.save(userScrappedTeam)
2626
}
27+
28+
// 유저의 스크랩 내역 전체 삭제
29+
fun deleteAllByUserId(userId: Long) {
30+
userScrappedTeamRepository.deleteAllByUserId(userId)
31+
}
32+
2733
}

src/main/kotlin/gat_be/dev/domain/user/service/UserService.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import org.springframework.transaction.annotation.Transactional
1515
class UserService(
1616
private val userTechStackService: UserTechStackService,
1717
private val userRepository: UserRepository,
18-
private val userScrappedTeamService: UserScrappedTeamService
18+
private val userScrappedTeamService: UserScrappedTeamService,
19+
private val userViewedTeamHistoryService: UserViewedTeamHistoryService
1920
) {
2021

2122
// 유저 프로필 수정
@@ -45,9 +46,11 @@ class UserService(
4546
}
4647

4748
// 회원탈퇴
48-
fun withdrawUser(user: User) {
49-
userTechStackService.deleteAllByUser(user)
50-
userRepository.delete(user)
49+
fun withdrawUser(userId: Long) {
50+
userScrappedTeamService.deleteAllByUserId(userId)
51+
userViewedTeamHistoryService.deleteAllByUserId(userId)
52+
userTechStackService.deleteAllByUserId(userId)
53+
userRepository.deleteByUserId(userId)
5154
}
5255

5356
// 아이디 중복 확인

src/main/kotlin/gat_be/dev/domain/user/service/UserTechStackService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class UserTechStackService(
5151
}
5252

5353
// 유저의 기술 스택 삭제
54-
fun deleteAllByUser(user: User) {
55-
userTechStackRepository.deleteAllByUser(user)
54+
fun deleteAllByUserId(userId: Long) {
55+
userTechStackRepository.deleteAllByUserId(userId)
5656
}
5757
}

0 commit comments

Comments
 (0)