New World

[해외공구관리사이트] 프로젝트 - 생성 본문

Project/old

[해외공구관리사이트] 프로젝트 - 생성

hyeovi 2022. 9. 6. 16:01
728x90
반응형

 

프로젝트를 생성하는 페이지 기능

 

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;
    }
반응형
Comments