Skip to content

Commit 708b8d3

Browse files
authored
Merge pull request #55 from DMU-NextLevel/refactor/funding
Refactor/funding
2 parents 99c1194 + 6dc1c2f commit 708b8d3

File tree

11 files changed

+224
-34
lines changed

11 files changed

+224
-34
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package NextLevel.demo.admin.project;
2+
3+
import NextLevel.demo.common.SuccessResponse;
4+
import NextLevel.demo.project.project.service.ProjectDeleteService;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.stereotype.Controller;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.PathVariable;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
12+
@Controller
13+
@RequiredArgsConstructor
14+
@RequestMapping("/admin/project")
15+
public class AdminProjectController {
16+
17+
private final ProjectDeleteService projectDeleteService;
18+
private final AdminProjectService adminProjectService;
19+
20+
public ResponseEntity getProjectList() {
21+
return null;
22+
}
23+
24+
public ResponseEntity updateProjectStatus() {
25+
return null;
26+
}
27+
28+
public ResponseEntity updateProject() {
29+
return null;
30+
}
31+
32+
@DeleteMapping("/{projectId}")
33+
public ResponseEntity removeProject(@PathVariable("projectId") Long projectId) {
34+
projectDeleteService.deleteProject(projectId, null);
35+
return ResponseEntity.ok().body(new SuccessResponse("success", null));
36+
}
37+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package NextLevel.demo.admin.project;
2+
3+
import NextLevel.demo.project.ProjectStatus;
4+
import NextLevel.demo.project.project.service.ProjectDeleteService;
5+
import NextLevel.demo.project.project.service.ProjectService;
6+
import NextLevel.demo.project.project.service.ProjectStatusService;
7+
import NextLevel.demo.project.project.service.ProjectValidateService;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
public class AdminProjectService {
14+
15+
private final ProjectService projectService;
16+
private final ProjectDeleteService projectDeleteService;
17+
private final ProjectStatusService projectStatusService;
18+
private final ProjectValidateService projectValidateService;
19+
20+
public void getProjectList() {
21+
22+
}
23+
24+
public void updateProjectStatus(Long projectId, ProjectStatus status) {
25+
projectStatusService.updateProjectStatus(projectId, status, "by admin");
26+
}
27+
28+
public void updateProject() {
29+
30+
}
31+
32+
public void removeProject(Long projectId) {
33+
projectDeleteService.deleteProject(projectId, null);
34+
}
35+
36+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package NextLevel.demo.admin.user;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.http.ResponseEntity;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.RequestMapping;
7+
8+
@Controller
9+
@RequiredArgsConstructor
10+
@RequestMapping("/admin")
11+
public class AdminUserController {
12+
13+
public ResponseEntity getUserList() {
14+
return null;
15+
}
16+
17+
public ResponseEntity stopUser() {
18+
return null;
19+
}
20+
21+
public ResponseEntity updateUser() {
22+
return null;
23+
}
24+
25+
public ResponseEntity removeUser() {
26+
return null;
27+
}
28+
29+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package NextLevel.demo.admin.user;
2+
3+
import NextLevel.demo.user.dto.user.response.ResponseUserInfoDetailDto;
4+
import NextLevel.demo.user.repository.UserRepository;
5+
import NextLevel.demo.user.service.UserService;
6+
import NextLevel.demo.user.service.UserValidateService;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.data.domain.Pageable;
9+
import org.springframework.stereotype.Service;
10+
11+
import java.util.List;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class AdminUserService {
16+
17+
private final UserValidateService userValidateService;
18+
private final UserService userService;
19+
private final UserRepository userRepository;
20+
21+
public List<ResponseUserInfoDetailDto> getUserList(Pageable pageable) {
22+
return userRepository.findAll(pageable).stream().map(ResponseUserInfoDetailDto::of).toList();
23+
}
24+
25+
public void stopUser() {
26+
// not yet
27+
}
28+
29+
public void updateUser() {
30+
// userService.update
31+
}
32+
33+
public void removeUser() {
34+
// userService. ; // delete 어디감?
35+
}
36+
37+
}

src/main/java/NextLevel/demo/exception/ErrorCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public enum ErrorCode {
3636
// funding
3737
NOT_ENOUGH_POINT(HttpStatus.BAD_REQUEST, "05001","not enough point left:%s, need:%s"),
3838
ALREADY_USED_COUPON(HttpStatus.BAD_REQUEST, "05002","already used coupon"),
39+
CAN_USE_COUPONS_AT_ONE_OPTION(HttpStatus.BAD_REQUEST, "05003", "can not user coupons at one option"),
3940

4041
// option
4142

src/main/java/NextLevel/demo/funding/service/CouponService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public long useCoupon(long userId, long couponId, OptionFundingEntity optionFund
4343
if(coupon.getOptionFunding() != null)
4444
throw new CustomException(ErrorCode.ALREADY_USED_COUPON);
4545

46+
if(optionFunding.getCoupon() != null)
47+
throw new CustomException(ErrorCode.CAN_USE_COUPONS_AT_ONE_OPTION);
48+
4649
price -= coupon.getPrice();
4750

4851
coupon.updateProjectFundingEntity(optionFunding);

src/main/java/NextLevel/demo/funding/service/FundingService.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,35 +69,32 @@ public void cancelOptionFunding(RequestCancelFundingDto dto) {
6969
@Transactional
7070
public void optionFunding(@Valid RequestOptionFundingDto dto) {
7171
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
72-
OptionEntity option = optionValidateService.getOption(dto.getOptionId());
72+
OptionEntity option = optionValidateService.getOption(dto.getOptionId()); // option id가 null인 경우
7373

74-
OptionFundingEntity entity = dto.toEntity(user, option);
74+
OptionFundingEntity entity;
75+
76+
Optional<OptionFundingEntity> oldOptionFundingOpt = optionFundingRepository.findByOptionIdAndUserId(dto.getOptionId(), dto.getUserId());
77+
if(oldOptionFundingOpt.isPresent())
78+
entity = oldOptionFundingOpt.get();
79+
else
80+
entity = dto.toEntity(user, option);
7581

7682
// validate price <> option.price * count
7783
long totalPrice = option.getPrice() * dto.getCount();
7884
if(dto.getCouponId() != null)
79-
totalPrice = couponService.useCoupon(user.getId(), dto.getCouponId(), entity, totalPrice);
85+
totalPrice = couponService.useCoupon(user.getId(), dto.getCouponId(), entity, totalPrice); // option update인 경우 이미 coupon을 사용했다면 rollback발생?
8086

8187
if(totalPrice > user.getPoint())
8288
throw new CustomException(ErrorCode.NOT_ENOUGH_POINT, String.valueOf(user.getPoint()), String.valueOf(totalPrice));
8389

84-
Optional<OptionFundingEntity> oldOptionFundingOpt = optionFundingRepository.findByOptionIdAndUserId(dto.getOptionId(), dto.getUserId());
85-
8690
if(oldOptionFundingOpt.isPresent())
87-
oldOptionFundingOpt.get().updateCount(dto.getCount());
91+
entity.updateCount(dto.getCount());
8892
else
8993
optionFundingRepository.save(entity);
9094

9195
user.updatePoint(-totalPrice);
9296
}
9397

94-
// 분리 필요!!
95-
// 이미 option1을 구매하면서 coupon1을 사용 -> 이후 option1을 추가 구매 (with other coupon) => error (coupon <> option 1대 1이여야 함!)
96-
// 아니면 언제나 새로운 결제 정보를 db에 저장한다! (이게 좀 더 맞는듯, 갯수 col지우고)
97-
private void updateOptionFunding() {
98-
99-
}
100-
10198
@Transactional
10299
public void freeFunding(@Valid RequestFreeFundingDto dto) {
103100
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());

src/main/java/NextLevel/demo/project/project/entity/ProjectEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public void setTags(List<ProjectTagEntity> tags) {
8787
this.tags = tags;
8888
}
8989
public void setFundingData(ProjectEntity project) {this.freeFundings = project.getFreeFundings();this.options = project.getOptions();}
90+
public void updateStatus(ProjectStatus status) { this.projectStatus = status; }
9091

9192
@Builder
9293
public ProjectEntity(Long id, UserEntity user, String title, String content,
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package NextLevel.demo.project.project.service;
2+
3+
import NextLevel.demo.exception.CustomException;
4+
import NextLevel.demo.exception.ErrorCode;
5+
import NextLevel.demo.funding.service.FundingRollbackService;
6+
import NextLevel.demo.img.service.ImgTransaction;
7+
import NextLevel.demo.project.project.entity.ProjectEntity;
8+
import NextLevel.demo.project.project.repository.ProjectRepository;
9+
import NextLevel.demo.project.story.service.ProjectStoryService;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Service;
12+
import org.springframework.transaction.annotation.Transactional;
13+
14+
import java.nio.file.Path;
15+
import java.util.ArrayList;
16+
import java.util.Optional;
17+
18+
@RequiredArgsConstructor
19+
@Service
20+
public class ProjectDeleteService {
21+
22+
private final ProjectRepository projectRepository;
23+
private final ProjectStoryService projectStoryService;
24+
private final ProjectValidateService projectValidateService;
25+
private final FundingRollbackService fundingRollbackService;
26+
27+
// 삭제
28+
@Transactional
29+
@ImgTransaction
30+
public void deleteProject(Long id, ArrayList<Path> imgPaths) {
31+
ProjectEntity oldProject = projectValidateService.getProjectEntity(id);
32+
33+
// 펀딩 금액이 남아있다면 모두 환불 처리하기
34+
fundingRollbackService.rollbackByProject(oldProject);
35+
36+
// 다른 soft적 처리 필요한 부분 처리하기
37+
38+
// img 처리
39+
projectStoryService.updateProjectStory(oldProject, new ArrayList<>(), imgPaths);
40+
41+
return; // 아직 구현하지 않음 + soft delete 처리 고민중 .....
42+
}
43+
44+
}

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

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public class ProjectService {
4747

4848
private final FundingValidateService fundingValidateService;
4949
private final ProjectDslRepository projectDslRepository;
50-
private final FundingRollbackService fundingRollbackService;
5150
private final ProjectValidateService projectValidateService;
5251
private final SelectSocialProfileService selectSocialProfileService;
5352

@@ -102,26 +101,6 @@ public void update(CreateProjectDto dto, ArrayList<Path> imgPaths) {
102101
projectRepository.save(dto.toProjectEntity(oldProject.getUser(), img)); // 값이 있는 것만 update 형식으로 수정 필요
103102
}
104103

105-
// 삭제
106-
@Transactional
107-
@ImgTransaction
108-
public void deleteProject(Long id, ArrayList<Path> imgPaths) {
109-
Optional<ProjectEntity> oldProjectOptional = projectRepository.findById(id);
110-
if(oldProjectOptional.isEmpty())
111-
throw new CustomException(ErrorCode.NOT_FOUND, "project");
112-
ProjectEntity oldProject = oldProjectOptional.get();
113-
114-
// 펀딩 금액이 남아있다면 모두 환불 처리하기
115-
fundingRollbackService.rollbackByProject(oldProject);
116-
117-
// 다른 soft적 처리 필요한 부분 처리하기
118-
119-
// img 처리
120-
projectStoryService.updateProjectStory(oldProject, new ArrayList<>(), imgPaths);
121-
122-
return; // 아직 구현하지 않음 + soft delete 처리 고민중 .....
123-
}
124-
125104
// get list
126105
public ResponseProjectListDto getAllProjects(RequestMainPageProjectListDto dto) {
127106
return projectDslRepository.selectProjectDsl(dto);

0 commit comments

Comments
 (0)