Skip to content

Commit ae4c995

Browse files
committed
feat delete user
1 parent 16c6635 commit ae4c995

9 files changed

Lines changed: 41 additions & 11 deletions

File tree

src/main/java/NextLevel/demo/follow/FollowRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import NextLevel.demo.user.entity.UserEntity;
44
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Modifying;
56
import org.springframework.data.jpa.repository.Query;
67
import org.springframework.data.repository.query.Param;
78

@@ -43,9 +44,11 @@ public interface FollowRepository extends JpaRepository<FollowEntity, Long> {
4344
"group by follow")
4445
List<ResponseFollowDto> gerFollowList(@Param("userId") Long userId);
4546

47+
@Modifying
4648
@Query("delete from FollowEntity f where f.user.id = :userId")
4749
void deleteFollowByUserId(@Param("userId") Long userId);
4850

51+
@Modifying
4952
@Query("delete from FollowEntity f where f.target.id = :userId")
5053
void deleteFollowerByUserId(@Param("userId") Long userId);
5154

src/main/java/NextLevel/demo/project/project/service/ProjectDeleteService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ public void deleteProject(Long id, Long userId, ImgPath imgPath) {
7575
}
7676

7777
@Transactional
78-
public void deleteAllProjectByUser(UserEntity user) {
78+
public void deleteAllProjectByUser(UserEntity user, ImgPath imgPath) {
7979
List<ProjectEntity> projectList = projectRepository.findAllByUserId(user.getId());
8080
projectList.forEach(project -> {
81-
deleteProject(project.getId(), user.getId(), null);
81+
deleteProject(project.getId(), user.getId(), imgPath);
8282
});
8383
}
8484

src/main/java/NextLevel/demo/social/repository/SocialLikeRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66
import java.util.Optional;
7+
import org.springframework.data.jpa.repository.Modifying;
78
import org.springframework.data.jpa.repository.Query;
89
import org.springframework.data.repository.query.Param;
910

1011
public interface SocialLikeRepository extends JpaRepository<SocialLikeEntity, Long> {
1112
Optional<SocialLikeEntity> findByUserIdAndSocialId(Long userId, Long socialId);
1213

14+
@Modifying
1315
@Query("delete from SocialLikeEntity sl where sl.user.id = :userId")
1416
void deleteAllByUser(@Param("userId")Long userId);
1517
}

src/main/java/NextLevel/demo/social/service/SocialService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,14 @@ private void deleteImgs(Long socialId, List<ImgEntity> imgs, ImgPath imgPath) {
155155
imgs.forEach(img->imgService.deleteImg(img, imgPath));
156156
}
157157

158-
@Transactional
159-
public void deleteAllByUser(UserEntity user) {
158+
public void deleteAllByUser(UserEntity user, ImgPath imgPath) {
160159
// delete all social like by user
161160
socialLikeRepository.deleteAllByUser(user.getId());
162161

163162
// delete all social
164163
List<SocialEntity> socialList = socialRepository.findAllByUserId(user.getId());
165164
socialList.forEach(social->{
166-
delete(social.getId(), user.getId(), null);
165+
delete(social.getId(), user.getId(), imgPath);
167166
});
168167
}
169168

src/main/java/NextLevel/demo/user/controller/UserController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import NextLevel.demo.user.dto.user.request.RequestUpdateUserInfoDto;
88
import NextLevel.demo.user.dto.user.response.ResponseUserInfoDetailDto;
99
import NextLevel.demo.user.entity.UserEntity;
10+
import NextLevel.demo.user.service.UserDeleteService;
1011
import NextLevel.demo.user.service.UserValidateService;
1112
import NextLevel.demo.user.service.LikeService;
1213
import NextLevel.demo.user.service.UserService;
@@ -19,7 +20,9 @@
1920
import org.springframework.http.HttpStatus;
2021
import org.springframework.http.ResponseEntity;
2122
import org.springframework.stereotype.Controller;
23+
import org.springframework.web.bind.annotation.DeleteMapping;
2224
import org.springframework.web.bind.annotation.GetMapping;
25+
import org.springframework.web.bind.annotation.PathVariable;
2326
import org.springframework.web.bind.annotation.PostMapping;
2427
import org.springframework.web.bind.annotation.PutMapping;
2528
import org.springframework.web.bind.annotation.RequestBody;
@@ -35,6 +38,7 @@ public class UserController {
3538
private final LikeService likeService;
3639
private final JWTUtil jwtUtil;
3740
private final UserValidateService userValidateService;
41+
private final UserDeleteService userDeleteService;
3842

3943
@GetMapping
4044
public ResponseEntity<?> getUserInfo() {
@@ -92,4 +96,10 @@ public ResponseEntity<?> like(@RequestBody @Valid LikeDto dto) {
9296
return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse("success", null));
9397
}
9498

99+
@DeleteMapping("/{userId}")
100+
public ResponseEntity<?> deleteUser(@PathVariable("userId") Long userId) {
101+
userDeleteService.deleteUser(userId, null);
102+
return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse("success", null));
103+
}
104+
95105
}

src/main/java/NextLevel/demo/user/entity/UserEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class UserEntity extends BasedEntity {
6363
@Column(length=5, columnDefinition = "char(6)")
6464
private String role = UserRole.SOCIAL.name();
6565

66-
@ManyToOne(fetch = FetchType.LAZY, optional = true)
66+
@ManyToOne(fetch = FetchType.LAZY, optional = true, cascade = {})
6767
@JoinColumn(name = "img_id", nullable = true)
6868
private ImgEntity img;
6969

src/main/java/NextLevel/demo/user/entity/UserHistoryEntity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package NextLevel.demo.user.entity;
22

3+
import NextLevel.demo.BasedEntity;
34
import jakarta.persistence.Column;
45
import jakarta.persistence.Entity;
56
import jakarta.persistence.GeneratedValue;
@@ -17,7 +18,7 @@
1718
@NoArgsConstructor
1819
@Builder
1920
@AllArgsConstructor
20-
public class UserHistoryEntity {
21+
public class UserHistoryEntity extends BasedEntity {
2122
@Id
2223
@GeneratedValue(strategy = GenerationType.IDENTITY)
2324
private Long id;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package NextLevel.demo.user.repository;
22

3+
import NextLevel.demo.user.entity.UserEntity;
34
import NextLevel.demo.user.entity.UserHistoryEntity;
45
import org.springframework.data.jpa.repository.JpaRepository;
56
import org.springframework.stereotype.Repository;
67

78
@Repository
89
public interface UserHistoryRepository extends JpaRepository<UserHistoryEntity, Long> {
910

11+
void deleteAllByUser(UserEntity user);
1012
}

src/main/java/NextLevel/demo/user/service/UserDeleteService.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
import NextLevel.demo.follow.FollowService;
44
import NextLevel.demo.funding.service.FundingRollbackService;
5+
import NextLevel.demo.img.entity.ImgEntity;
56
import NextLevel.demo.img.service.ImgPath;
67
import NextLevel.demo.img.service.ImgService;
78
import NextLevel.demo.img.service.ImgTransaction;
89
import NextLevel.demo.project.project.service.ProjectDeleteService;
910
import NextLevel.demo.social.service.SocialService;
1011
import NextLevel.demo.user.entity.UserEntity;
12+
import NextLevel.demo.user.repository.UserHistoryRepository;
1113
import NextLevel.demo.user.repository.UserRepository;
14+
import jakarta.persistence.EntityManager;
15+
import jakarta.persistence.PersistenceContext;
1216
import lombok.RequiredArgsConstructor;
1317
import org.springframework.stereotype.Service;
1418
import org.springframework.transaction.annotation.Transactional;
@@ -24,31 +28,40 @@ public class UserDeleteService {
2428
private final SocialService socialService;
2529
private final ProjectDeleteService projectDeleteService;
2630
private final ImgService imgService;
31+
private final UserHistoryRepository userHistoryRepository;
32+
33+
@PersistenceContext
34+
private EntityManager entityManager;
2735

2836
@Transactional
2937
@ImgTransaction
3038
public void deleteUser(Long userId, ImgPath imgPath) {
3139
UserEntity user = userValidateService.findUserWithUserId(userId);
3240

3341
// project 삭제
34-
projectDeleteService.deleteAllProjectByUser(user);
42+
projectDeleteService.deleteAllProjectByUser(user, imgPath);
3543

3644
// funding 삭제
3745
fundingRollbackService.rollbackByUser(user);
3846

3947
// social삭제
40-
socialService.deleteAllByUser(user);
48+
socialService.deleteAllByUser(user, imgPath);
4149

4250
// follow (user like)삭제
4351
followService.deleteFollowByUserId(user);
4452

45-
// img 삭제
46-
imgService.deleteImg(user.getImg(), imgPath);
53+
// user history
54+
userHistoryRepository.deleteAllByUser(user);
4755

4856
// coupon -> cascade
4957
//user_detail삭제 -> cascade 적용
5058

59+
ImgEntity img = user.getImg();
60+
5161
//user 삭제
5262
userRepository.delete(user);
63+
entityManager.flush();
64+
65+
imgService.deleteImg(img, imgPath);
5366
}
5467
}

0 commit comments

Comments
 (0)