New World

[해외공구관리사이트] 프로젝트 - 조회 (일반 & 상세 & 회원) 본문

Project/old

[해외공구관리사이트] 프로젝트 - 조회 (일반 & 상세 & 회원)

hyeovi 2022. 9. 6. 19:31
728x90
반응형

 

프로젝트를 일반 조회하는 페이지 기능

 

1. 프로젝트의 정보가 제대로 노출되는지 확인 (상품명, 가격, 상품양)

2. 상품 이미지를 선택하면 프로젝트 상세 화면으로 이동

 

 

 

 

 

 

controller

ㄴ ProjectController

현재 로그인한 회원의 정보와 페이지를 출력해준다.

    @RequestMapping("/project")
    public String project(HttpSession httpSession, Model model) {
        model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));

        return "sample/project/blog-grid";
    }

API

ㄴ ProjectApiController

프로젝트의 정보를 서버에서 프론트로 가져온다.

    // 조회
    @GetMapping("/api/project/list")
    public List<ProjectInfoDto> projectCard() {
        List<Project> findProjects = projectService.surchAll();
        List<ProjectInfoDto> collect = findProjects.stream()
                .map(p -> new ProjectInfoDto(p.getNo(), p.getName(),
                        p.getFirstPrice() + p.getSecondPrice() + p.getThirdPrice(), p.getMember().getName(),
                        p.getPhotoUrl(), p.getQuantity(),
                        p.getStatus()))
                .collect(Collectors.toList());

        return collect;
    }

    @Data
    @AllArgsConstructor // return 시, 꼭 필요한 내용
    static class ProjectInfoDto {
        private Long no;
        private String name;
        private int price;
        private String memberName;
        private String photoUrl;
        private int quantity;

        @Enumerated(EnumType.STRING)
        private ProjectStatus status;
    }

Service

ㄴ ProjectService

ㄴ ProjectServiceImpl

말 그대로 프로젝트의 모든 정보를 받아준다.

    // 조회
    @Override
    public List<Project> surchAll() {
        return projectRepository.findAll();
    };


프로젝트를 상세 조회하는 페이지 기능

 

1. 프로젝트의 정보와 프로젝트를 등록한 회원이 제대로 노출되는지 확인

2. 해당 프로젝트를 만든 사람이라면 수정 버튼이 노출되도록 만들 것

3. 회원 이미지를 누르면 회원이 생성한 프로젝트들을 확인할 수 있는 페이지로 이동한다

 

controller

ㄴ ProjectController

프로젝트와 회원 정보를 프론트로 넘겨준다.

    // 프로젝트 상세조회
    @RequestMapping("/project{projectNo}")
    public String projectSingle(@PathVariable("projectNo") Long projectNo, HttpSession httpSession, Model model) {
        Project project = projectService.surchOne(projectNo);

        model.addAttribute("project", project);
        model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));

        return "sample/project/project-single";
    }

API

ㄴ ProjectApiController

일반 조회와 달리 각 금액과 회원의 정보를 파악할 수 있도록 회원의 고유 번호만 받아 뿌려준다.

    @PostMapping("/api/project/detail")
    public List<ProjectInfoOneDto> projectCard(@RequestBody @Valid Info request) {
        Long no = request.getNo();

        List<Project> findProject = projectService.surchOneList(no);
        List<ProjectInfoOneDto> collect = findProject.stream()
                .map(p -> new ProjectInfoOneDto(p.getName(), p.getExp(),
                        p.getFirstPrice() + p.getSecondPrice() + p.getThirdPrice(), p.getFirstPrice(),
                        p.getSecondPrice(), p.getThirdPrice(), p.getStatus(),
                        p.getMember().getNo()))
                .collect(Collectors.toList());
        return collect;
    }

    @Data
    static class Info {
        private Long no;
    }

Service

ㄴ ProjectService

ㄴ ProjectServiceImpl

프로젝트 상세 조회이기 때문에 프로젝트 정보 리스트를 받아오도록 만들었다.

    @Override
    public List<Project> surchOneList(Long no) {
        return projectRepository.findOneById(no);
    }

프로젝트를 회원 조회하는 페이지 기능

 

1. 프로젝트를 생성한 회원에 대한 정보가 노출

2. 회원이 만든 프로젝트들이 노출

3. 프로젝트 이미지 선택 시, 프로젝트 상세 화면으로 이동

 

 

 

 

 

 

 

controller

ㄴ ProjectController

프로젝트와 회원 정보를 프론트로 넘겨준다.

    @RequestMapping("/projectByMember{memberNo}")
    public String projectMember(@PathVariable("memberNo") Long memberNo, HttpSession httpSession, Model model) {
        Member member = memberService.myInfo(memberNo);
        Member nowLoginMember = memberController.modelMember(httpSession);

        model.addAttribute("member", member);
        model.addAttribute("nowLoginMember", nowLoginMember);

        if (member != nowLoginMember) {
            return "sample/project/blog-gridByMember";
        } else {
            return "sample/project/blog-gridByMyMember";
        }
    }

API

ㄴ ProjectApiController

회원 정보를 보여주기 위해 회원 이름과 프로젝트의 정보를 넘겨준다.

    // 프로젝트 조회(회원)
    @PostMapping("/api/project/member")
    public List<ProjectByMemberDto> projectMember(@RequestBody @Valid Info request) {
        Member member = memberService.myInfo(request.getNo());

        List<Project> projectByMember = projectService.surchMember(member);
        List<ProjectByMemberDto> project = projectByMember.stream()
                .map(p -> new ProjectByMemberDto(p.getNo(), p.getName(),
                        p.getFirstPrice() + p.getSecondPrice() + p.getThirdPrice(), p.getQuantity(),
                        p.getStatus(), p.getMember().getName()))
                .collect(Collectors.toList());
        return project;
    }

    @Data
    @AllArgsConstructor // return 시, 꼭 필요한 내용
    static class ProjectByMemberDto {
        private Long no;
        private String name;
        private int price;
        private int quantity;
        private ProjectStatus status;
        private String memberName;
    }

Service

ㄴ ProjectService

ㄴ ProjectServiceImpl

회원을 찾아 회원의 프로젝트 정보와 회원 정보를 보내준다.

    // 프로젝트 조회(회원)
    @Override
    public List<Project> surchMember(Member member) {
        return projectRepository.findByMember(member);
    };
반응형
Comments