New World
[해외공구관리사이트] 프로젝트 - 생성 본문
프로젝트를 생성하는 페이지 기능
1. 프로젝트의 상태를 저장
2. 프로젝트에서 금액을 어떻게 받을 것인지 노출
3. 프로젝트의 정보를 저장
프로젝트의 정보를 저장하도록 하는 form을 만든다.
@Getter
@Setter
public class ProjectForm {
private Long no;
@NotEmpty(message = "프로젝트 이름은 필수입니다.")
private String name;
@NotEmpty(message = "프로젝트 상태는 필수입니다.")
private String status;
private int firstPrice;
private int secondPrice;
private int thirdPrice;
private int quantity;
@NotEmpty(message = "결제 방식은 필수입니다.")
private String orderStatus;
private String country;
@NotEmpty(message = "설명은 필수입니다.")
private String exp;
private Member member;
}
controller
ㄴ ProjectController
project를 생성할 것과 현재 로그인한 정보를 화면에 보내준다
@RequestMapping("/projectCreate")
public String projectCreate(HttpSession httpSession, Model model) {
model.addAttribute("project", new Project());
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
return "sample/project/product-create";
}
API
ㄴ ProjectApiController
프로젝트를 저장하도록 upload 메소드에 회원 정보와 프로젝트의 정보, 프로젝트 상세 이미지를 전달한다.
@PostMapping("/api/project/save")
public String saveProject(@SessionAttribute("mSession") Long nowLoginMemberNo,
@RequestBody @Valid ProjectForm request) {
Member member = memberService.myInfo(nowLoginMemberNo);
String result = projectService.upload(request, member, fileService.fileUrl);
return result;
}
Service
ㄴ ProjectService
ㄴ ProjectServiceImpl
상태를 저장해주며 금액이 있어야 다음 회차의 금액을 받아주도록 만들었으며 수량이 0으로 노출되지 않도록 해주며 통관세에 영향이 있는지 수량과 금액을 곱하여 통관세에 영향이 있는지도 파악하도록 만들었습니다.
@Override
@Transactional
public String upload(ProjectForm request, Member member, String photoUrl) {
Project project = new Project();
project.setName(request.getName());
if (request.getStatus().equals("RESEARCH")) {
project.setStatus(ProjectStatus.RESEARCH);
} else if (request.getStatus().equals("SALE")) {
project.setStatus(ProjectStatus.SALE);
} else if (request.getStatus().equals("HELP")) {
project.setStatus(ProjectStatus.HELP);
} else {
throw new IllegalStateException("프로젝트 구분을 정해주세요");
}
if (request.getFirstPrice() != 0) {
project.setFirstPrice(request.getFirstPrice());
if (request.getSecondPrice() != 0) {
project.setSecondPrice(request.getSecondPrice());
project.setThirdPrice(request.getThirdPrice());
}
}
if (request.getQuantity() != 0) {
project.setQuantity(request.getQuantity());
}
if (request.getOrderStatus().equals("ACCOUNT")) {
project.setOrderStatus(ProjectOrderStatus.ACCOUNT);
} else if (request.getOrderStatus().equals("CASH")) {
project.setOrderStatus(ProjectOrderStatus.CASH);
} else {
throw new IllegalStateException("프로젝트 구매 방법을 선택해주세요");
}
project.setCountry(request.getCountry());
project.setExp(request.getExp());
if (photoUrl != null) {
member.setPhotoUrl(photoUrl);
} else {
member.setPhotoUrl("/img/upload/KakaoTalk_20220413_004209234.jpg");
}
project.setMember(member);
projectRepository.save(project);
if (request.getQuantity() * request.getFirstPrice() > 150000) {
return "통관세가 부여됩니다";
} else {
return "통관세가 부여되지 않습니다";
}
};
repository
ㄴ ProjectRepository
해당 정보를 전달하여 DB에 저장한다
public Long save(Project project) {
em.persist(project);
return project.getNo();
}
프로젝트를 생성하는 페이지 기능
1. 프로젝트의 정보를 적고 DB에 저장되는지 확인
2. 주문 방식은 cash로 주문자가 이 프로젝트 중간에 돈을 다른 곳으로 돌리지 않도록 하기 위해 만들었다.
controller
ㄴ ProjectController
project를 생성할 것과 현재 로그인한 정보를 화면에 보내준다
@RequestMapping("/projectHelpCreate")
public String projectHelpCreate(HttpSession httpSession, Model model) {
model.addAttribute("project", new Project());
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
return "sample/project/product-help-create";
}
API
ㄴ ProjectApiController
프로젝트를 대신 구매해줄 사람을 찾는 글을 올리는 것이기 때문에 프로젝트의 상태는 HELP이며, 대리구매자가 다른 곳으로 돈을 빼들고 갈 수 없도록 cash 형태의 안전하도록 보호해주도록 만들었다. 또한 이 값은 프로젝트를 등록하는 메소드인 upload로 들어가 프로젝트 내용을 저장한다.
@PostMapping("/api/project/help/save")
public String saveHelpProject(@SessionAttribute("mSession") Long nowLoginMemberNo,
@RequestBody @Valid ProjectForm request) {
request.setStatus("HELP");
request.setQuantity(1);
request.setOrderStatus("CASH");
String result = projectService.upload(request, memberService.myInfo(nowLoginMemberNo), fileService.fileUrl);
return result;
}
'Project > old' 카테고리의 다른 글
[해외공구관리사이트] 프로젝트 - 조회 (일반 & 상세 & 회원) (0) | 2022.09.06 |
---|---|
[해외공구관리사이트] 프로젝트 - 수정 & 삭제 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 수정 & 탈퇴 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 내 정보 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 로그인 & 로그아웃 (0) | 2022.09.05 |