본문 바로가기
Side Project

[Spring Boot] 환자 관리 프로그램 - Controller & view (4)

by jisayDeveloper 2023. 10. 20.
728x90
반응형
SMALL

마지막으로 Controller와 완성된 view를 보여주며 마무리 하겠습니다.

 

MainController

package com.chart.misay.controller;

import com.chart.misay.service.MisayService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequiredArgsConstructor
public class MainController {

    private final MisayService misayService;

    @GetMapping({"","index.html","index"})
    public String index(Model model){
        model.addAttribute("list",misayService.getList());
        return "index";
    }

    @GetMapping("/detail")
    public String detail(@RequestParam("bno") Long bno, Model model){
        model.addAttribute("list",misayService.read(bno));
        return "detail";
    }
    
    @GetMapping("/search")
    public String search(@RequestParam("keyword") String keyword,
                         @RequestParam("searchOption") String searchOption, Model model){
        if ("surgeryName".equals(searchOption)) {
            model.addAttribute("list", misayService.getSurgery(keyword));
        } else if ("name".equals(searchOption)) {
            model.addAttribute("list", misayService.getName(keyword));
        }
        return "search";
    }

}

MainController의  index를 최근 차트의 내림차순으로 전부 가져오며,

detail은 차트의 상세보기를 랜더링하며,

search는 수술부위 or 환자 이름에 따른 검색 결과를 랜더링 합니다.

 

CategoryController

package com.chart.misay.controller;

import com.chart.misay.service.MisayService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
@RequiredArgsConstructor
public class CategoryController {

    final MisayService misayService;

    @GetMapping("/cx")
    public String cx(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }
    @GetMapping("/sh")
    public String sh(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }
    @GetMapping("/elbow")
    public String elbow(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }
    @GetMapping("/lx")
    public String lx(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }
    @GetMapping("/knee")
    public String knee(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }
    @GetMapping("/ankle")
    public String ankle(@RequestParam("value") String value, Model model){
        model.addAttribute("list", misayService.getCategory(value));
        return "index";
    }

}

클라이언트가 카테고리에서 선택한 수술 부위에 맞는 환자 차트들을 index 페이지에 랜더링합니다.

 

MemberController

package com.chart.misay.controller;

import com.chart.misay.dto.MisayDTO;
import com.chart.misay.service.MisayService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
@RequiredArgsConstructor
public class MemberController {
    final MisayService misayService;
    @GetMapping("/createMember")
    public String createMember(){
        return "createMember";
    }

    @PostMapping("/member")
    public String member(@ModelAttribute MisayDTO dto){
        misayService.member(dto);
        return "redirect:/index";
    }
    @GetMapping("/membership")
    public String membership(Model model){
        model.addAttribute("list",misayService.getMembers());
        return "membership";
    }

    @GetMapping("/searchMember")
    public String searchMember(@RequestParam("keyword") String keyword, Model model){
        model.addAttribute("list",misayService.searchMembers(keyword));
        return "membership";
    }

    @GetMapping("/memberDetail")
    public String memberDetail(@RequestParam("name") String name,
                               @RequestParam("mno") Long mno,
                               Model model){
        model.addAttribute("member",misayService.getMisayDTO(mno));
        model.addAttribute("list", misayService.getName(name));
        return "memberDetail";
    }
    @GetMapping("/register")
    public String register(@RequestParam("name") String name,
                           @RequestParam("age")String age,
                           @RequestParam("mno") Long mno,
                           Model model){
        model.addAttribute("name", name);
        model.addAttribute("age", age);
        model.addAttribute("mno", mno);
        return "register";
    }
    @PostMapping("/register")
    public String register(@ModelAttribute MisayDTO dto){
        System.out.println(dto);
        misayService.register(dto);
        return "redirect:index";
    }
    @GetMapping("/memberChange")
    public String memberChange(@RequestParam("name") String name, @RequestParam("age") String age, @RequestParam("mno") Long mno, Model model){
        model.addAttribute("mno", mno);
        model.addAttribute("name", name);
        model.addAttribute("age", age);
        return "memberChange";
    }
}

회원 등록이나 글 등록은 post로 처리했으며 필드가 별로 없어서 dto는 사용하지 않았습니다.

 

AlertController

package com.chart.misay.controller;

import com.chart.misay.dto.MisayDTO;
import com.chart.misay.entity.Member;
import com.chart.misay.repository.MemberRepository;
import com.chart.misay.repository.MisayRepository;
import com.chart.misay.service.MisayService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequiredArgsConstructor
public class AlertController {

    final MemberRepository memberRepository;

    final MisayRepository misayRepository;

    final MisayService misayService;


    @PostMapping("/memberChange")
    public String memberChange(@ModelAttribute MisayDTO dto){
        Optional<Member> optionalMember = memberRepository.findById(dto.getMno());

        if (optionalMember.isPresent()) {
            Member member = optionalMember.get();
            member.setName(dto.getName());
            member.setAge(dto.getAge());
            memberRepository.save(member);
        }
            return "<script type='text/javascript'>"
                    + "alert('수정이 완료되었습니다.');"
                    + "location.href = '/membership';"
                    + "</script>";

    }
    @PostMapping("/modify")
    public String modify(@ModelAttribute MisayDTO dto){
        misayService.modify(dto);
        return "<script type='text/javascript'>"
                + "alert('수정이 완료되었습니다.');"
                + "location.href = document.referrer;"
                +"</script>";
    }

    @GetMapping("/delete")
    public String delete(@RequestParam("bno") Long bno){
        misayService.deleteBoard(bno);
        return "<script type='text/javascript'>"
                + "alert('삭제가 완료되었습니다.');"
                + "location.href = '/membership';"
                +"</script>";
    }
}

회원 정보 수정, 글 수정&삭제 할때 @RestController로써 alert()를 사용하기위한 컨트롤러 입니다.

 

view

이번 프로젝트의 view는 무료템플릿을 다운받아서 제가 필요한 부분만 수정해서 만들었습니다.

index 페이지입니다.

 

 

회원 등록 페이지입니다.

제 이름으로 회원을 등록해서 '회원관리' 버튼을 누르면 위 사진처럼 화면이 나오고

해당 회원에 대한 차트를 이렇게 볼 수 있습니다.

차트를 상세보기하면 위 화면처럼 보입니다.

 

게시판 공부한단 개념으로 만들었는데 아직 페이징처리를 못해서 추후 페이징 구현하는 거까지 포스팅 하겠습니다.

이상으로 프로젝트 마치겠습니다.

728x90
반응형
LIST