New World
[해외공구관리사이트] 프로젝트 - 수정 & 삭제 본문
수정 페이지의 기능
1. 프로젝트의 상태에 따라 상태 값 변경이 가능하다
2. 빈값이 있다면 기존 값으로 입력해주기
3. UI 적으로 프로젝트 기존 값 노출
4. 수량은 움직일 수 없도록 변경 금지
삭제 버튼
1. 프로젝트에 주문서가 있는 경우 환불 확인
controller
ㄴ ProjectController
프로젝트의 상태값에 따라 변경하는 프로젝트 상태값이 각각 달라 현재의 프로젝트 상태값에 따라 다른 UI로 이동할 수 있게 해주었다.
// 프로젝트 수정
@RequestMapping("/projectEdit{projectNo}")
public String projectEdit(@PathVariable("projectNo") Long projectNo, HttpSession httpSession, Model model) {
Project project = projectService.surchOne(projectNo);
model.addAttribute("project", project);
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
if (project.getStatus().equals(ProjectStatus.HELP)) {
return "sample/project/product-help-edit";
} else if (project.getStatus().equals(ProjectStatus.RESEARCH)) {
return "sample/project/product-research-edit";
} else if (project.getStatus().equals(ProjectStatus.SALE)) {
return "sample/project/product-sale-edit";
} else if (project.getStatus().equals(ProjectStatus.GRAD)) {
return "sample/project/product-grad-edit";
} else {
return "sample/project/product-finish-edit";
}
}
API
ㄴ MemberApiController
입력받은 프로젝트 정보와 그 프로젝트의 번호를 프로젝트를 업데이트 하는 메소드로 전달해준다. 만약 상태값이 가이드인 경우, 배송정보를 저장해주도록 한다.
// 업뎃
@PutMapping("/api/project/edit/{projectNo}")
public UpdateProjectResponse updateMemberV2(@PathVariable("projectNo") Long projectNo,
@SessionAttribute("mSession") Long nowLoginMemberNo,
@RequestBody @Valid UpdateProjectRequest request) {
Project project = projectService.update(projectNo, request);
if (project.getStatus().equals(ProjectStatus.GRAD)) {
List<Order> orders = orderService.updateByProject(project);
trackingService.saveByGRAD(orders, project);
}
return new UpdateProjectResponse(projectNo, request.getName());
}
@Data
@AllArgsConstructor
static class UpdateProjectResponse {
private Long no;
private String name;
}
Service
ㄴ ProjectService
ㄴ ProjectServiceImpl
프로젝트를 찾고 그 프로젝트의 정보를 변경한다.
프로젝트 상태는 아래의 경로로 변경이 가능케한다.
@Override
@Transactional
public Project update(Long no, UpdateProjectRequest request) {
Project project = projectRepository.findOne(no);
if (request.getName().length() != 0) {
project.setName(request.getName());
}
if (project.getStatus().equals(ProjectStatus.HELP)) {
if (request.getStatus().equals("CLOSED")) {
project.setStatus(ProjectStatus.CLOSED);
if (project.getOrderStatus().equals(ProjectOrderStatus.CASH)) {
cashService.cashUpdateByOrder(project);
}
}
} else {
if (project.getStatus().equals(ProjectStatus.RESEARCH)) {
if (request.getStatus().equals("SALE")) {
project.setStatus(ProjectStatus.SALE);
} else if (request.getStatus().equals("RESEARCH")) {
project.setStatus(ProjectStatus.RESEARCH);
}
} else if (project.getStatus().equals(ProjectStatus.SALE)) {
if (request.getStatus().equals("GRAD")) {
project.setStatus(ProjectStatus.GRAD);
} else if (request.getStatus().equals("SALE")) {
project.setStatus(ProjectStatus.SALE);
} else if (request.getStatus().equals("RESEARCH")) {
project.setStatus(ProjectStatus.RESEARCH);
}
} else if (project.getStatus().equals(ProjectStatus.GRAD)) {
if (request.getStatus().equals("FINISH")) {
project.setStatus(ProjectStatus.FINISH);
} else if (request.getStatus().equals("GRAD")) {
project.setStatus(ProjectStatus.GRAD);
} else if (request.getStatus().equals("SALE")) {
project.setStatus(ProjectStatus.SALE);
}
} else if (project.getStatus().equals(ProjectStatus.FINISH)) {
if (request.getStatus().equals("FINISH")) {
project.setStatus(ProjectStatus.FINISH);
} else if (request.getStatus().equals("GRAD")) {
project.setStatus(ProjectStatus.GRAD);
}
}
}
if (request.getFirstPrice() > 0) {
project.setFirstPrice(request.getFirstPrice());
if (request.getSecondPrice() > 0) {
project.setSecondPrice(request.getSecondPrice());
if (request.getThirdPrice() > 0) {
project.setThirdPrice(request.getThirdPrice());
}
}
}
if (request.getQuantity() > 0) {
project.setQuantity(request.getQuantity());
}
if (request.getExp().length() != 0) {
project.setExp(request.getExp());
}
return project;
}
API
ㄴ MemberApiController
프로젝트를 찾고 예치금을 돌려주도록 만들었다.
@DeleteMapping("/api/project/remove/{projectNo}")
public void deleteMember(@SessionAttribute("mSession") Long nowLoginMemberNo,
@PathVariable("projectNo") Long projectNo) {
Project project = projectService.surchOne(projectNo);
// 예치금 돌려주기
orderService.deleteByProject(project.getOrders(), project);
projectService.delete(projectNo, memberService.myInfo(nowLoginMemberNo));
}
Service
ㄴ OrderService
ㄴ OrderServiceImpl
주문서가 있는지 찾고 만약 주문 형태가 계좌라면 직접 취소하도록 유도하며 캐쉬인 경우에는 첫번째, 두번째, 세번째 가이드 중 어디에 있는지 찾아내어 그 금액의 전체를 환불하도록 만들었다.
@Override
@Transactional
public void deleteByProject(List<Order> orders, Project project) {
if (orders.size() > 0) {
for (int list = 0; list >= orders.size(); list++) {
if (project.getOrderStatus().equals(ProjectOrderStatus.CASH)) {
deleteByProjectByCash(orders, list);
} else if (project.getOrderStatus().equals(ProjectOrderStatus.ACCOUNT)) {
throw new IllegalStateException("직접 취소 부탁드립니다.");
}
orders.get(list).setDate(LocalDateTime.now());
orders.get(list).setOrderStatus(OrderStatus.CANCEL);
}
}
}
public void deleteByProjectByCash(List<Order> orders, int list) {
int money = 0;
Member member = orders.get(list).getMember();
if (orders.get(list).getProject().getStepStatus().equals(ProjectStepStatus.FIRST)) {
money += orders.get(list).getProject().getFirstPrice();
} else if (orders.get(list).getProject().getStepStatus().equals(ProjectStepStatus.SECOND)) {
money += orders.get(list).getProject().getSecondPrice();
} else if (orders.get(list).getProject().getStepStatus().equals(ProjectStepStatus.THIRD)) {
money += orders.get(list).getProject().getThirdPrice();
}
money += member.getCash().getMoney();
cashService.update(member.getCash().getNo(), money, member);
}
Service
ㄴ ProjectService
ㄴ ProjectServiceImpl
프로젝트를 삭제하는 메소드인데 프로젝트를 만든 사람과 로그인한 멤버가 같은 사람인지 파악하고 삭제할 수 있도록 한다.
// 삭제
@Override
@Transactional
public void delete(Long no, Member member) {
Project project = surchOne(no);
if (project.getMember() == member) {
ProjectRepositoryJPA.deleteById(project.getNo());
} else {
throw new IllegalStateException("회원님이 생성한 프로젝트가 아니라 삭제 불가합니다.");
}
};
'Project > old' 카테고리의 다른 글
[해외공구관리사이트] 주문 - 저장 (0) | 2022.09.06 |
---|---|
[해외공구관리사이트] 프로젝트 - 조회 (일반 & 상세 & 회원) (0) | 2022.09.06 |
[해외공구관리사이트] 프로젝트 - 생성 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 수정 & 탈퇴 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 내 정보 (0) | 2022.09.06 |