설문조사형 플랫폼 구현(관리자)

최지수·2022년 4월 15일
0

로그인

유효성 검사를 통해 id와 비밀번호 확인 여부를 판단할 수 있는 로그인 기능을 만들었다.

	@Override
	@RequestMapping(value = "login", method = RequestMethod.POST)
	public String login(AdminMemberDTO adminMemberDTO, RedirectAttributes rttr, 
    HttpServletRequest request)
			throws Exception {

		System.out.println("login 메서드 진입");

		session = request.getSession();
		memberDTO = adminService.login(adminMemberDTO);

		if (memberDTO == null) {
			int result = 0;
			rttr.addFlashAttribute("result", result);
			return "redirect:loginView";
            // 일치하는 memberDTO가 없다면
            result를 addFlashAttribute를 이용해 넘겨준다.
            ->
            <c:if test="${result == 0 }">
				<div class="login_warn">사용자 ID 또는 비밀번호를 다시 입력해주세요. </div>
			</c:if>
            를 사용하기 위해 처리하는 것
            
            // addAttribute는 값을 지속적으로 사용해야 할 때,
            addFlashAttribute는 일회성으로 사용해야 할 때 사용해야 한다.
            
		}

		session.setAttribute("member", memberDTO);
		session.setAttribute("isLogOn", true);

		return "redirect:adminselect";
	}

질문지 게시판 만들기

게시판 페이지에는 게시판 형태의 테이블과 페이징 + 검색 기능이 포함되어 있다.
기본 게시판에 보이는 정보는 정보 상태가 'D'가 아닌 정보들만 나타난다.
D는 delete의 약자이고, 이 프로젝트에서는 등록, 수정, 삭제 여부를 정보 상태로 구분하기 했다.

	@Override
	@RequestMapping(value = "adminQuesList", method = RequestMethod.GET)
	public ModelAndView quesListArticles(AdminBoardDTO boardDTO,
    HttpServletRequest request) throws Exception {
		
        ModelAndView mav = new ModelAndView();
        String search = request.getParameter("search");
		boardDTO.setSearch(search);
        // 게시판의 검색 기능을 사용하기 위한 설정

		mav.addObject("quesList", adminService.getQuesListPaging(boardDTO));
		System.out.println("전달된 데이터 " + boardDTO);

		int amount = adminService.getAmount(boardDTO);
		BoardPageDTO pageDTO = new BoardPageDTO(boardDTO, amount);
     
        System.out.println(pageDTO);
        // 검색 기능을 포함한 전체 게시물 수 확인

		mav.addObject("boardPage", pageDTO);

		mav.setViewName("ezdiary/admin/adminQuesList");

		return mav;
	}

질문지 및 답변지 추가기능

생각보다 어려웠던 기능이다. 검색을 해도 유사 예제가 없어 하나하나 생각하면서 만들었다.
특히 DB 테이블에서 제약사항이 있었기 때문에, 처음보는 쿼리문을 활용했었다.
(쿼리문으로 원하는 정보를 빼낼 때 진짜 기분 좋았다)
여튼 때문에 제대로 만든 건지 아직도 의문이 든다.
결과는 원하는대로 나오긴 했다^^

	@Override
	@RequestMapping(value = "quesWriteInsert", method = RequestMethod.POST)
	public ModelAndView quesWriteInsert(AdminAskDTO askDTO, 
    AdminAnswerDTO answerDTO, HttpServletRequest request)
			throws Exception {

		ModelAndView mav = new ModelAndView();
        // 다음에는 String 타입으로 써야겠다^^
        
		session = request.getSession();
		memberDTO = (AdminMemberDTO) session.getAttribute("member");
        // 페이지에 정보가 나오진 않지만 DB에 질문지와 답변지 추가한 작성자의 정보를
        저장할 수 있도록 했다. 그래서 session에 저장된 member를 가져온다.
        
		String writer = memberDTO.getWriter();

		if (writer != null) {
        	//if문을 활용한 이유는 유효성 검사를 하기 위해서다.
            -> 사실 활용하지 않았을 땐 불명확한 이유로 아래의 코드가 작동하지 않았다.
            계속 오류가 발생;;; 그래서 if문을 활용해 나누어 줬다. 그러자 원하는대로 성공!
            
			askDTO.setWriter(writer);
			adminService.quesEnroll(askDTO);
			System.out.println("quesINFO Insert" + askDTO); : 정보를 확인하기 위해서
			
            int parentNO = adminService.lastAskNO(askDTO);
            // 답변지에 최근에 등록한 ask_idx 번호를 지정해주기 위해 변수로 담았다.
			System.out.println("parentNO : " + parentNO);

			if (parentNO != 0) {
				answerDTO.setAsk_idx(parentNO);
                
				for (int i = 1; i <= 3; i++) {
					askDTO.getAsk_idx();
					answerDTO.setAnswer_idx(i);

					String anwerWriter = memberDTO.getWriter();
					answerDTO.setWriter(anwerWriter);
                    
					adminService.answerEnroll(answerDTO);
				}
			}
		}

		mav.setViewName("redirect:/adminQuesList");

		return mav;
	}

질문지 상세페이지

	// 질문지 상세페이지
	@Override
	@RequestMapping(value = "adminQuesView", method = { RequestMethod.GET, RequestMethod.POST })
	public ModelAndView quesView(@RequestParam("ask_idx") int ask_idx) throws Exception {

		Map<String, Object> articleMap = adminService.getAskNO(ask_idx);
        // adminQuesList에서 넘어온 ask_idx를 기준으로 상세페이지를 출력할 수 있도록 한다.

		ModelAndView mav = new ModelAndView();

		mav.setViewName("ezdiary/admin/adminQuesView");
		mav.addObject("articleMap", articleMap);
        
		return mav;
	}

질문지 수정하기

// 추가한 질문지 수정페이지의 수정하기
	@Override
	@RequestMapping(value = "adminQuesMod", method = RequestMethod.POST)
	public ModelAndView quesWriteUpdate(AdminAskDTO askDTO, 
    AdminAnswerDTO answerDTO, HttpServletRequest request,
			RedirectAttributes rttr) throws Exception {
		ModelAndView mav = new ModelAndView();

		String writer = memberDTO.getWriter();

		if (writer != null) {

			Map<String, Object> articleMap = new HashMap<>();

			askDTO.setEditor(writer);

			articleMap.put("editor", askDTO.getEditor());

			Enumeration enu = request.getParameterNames();
			while (enu.hasMoreElements()) {
				String name = (String) enu.nextElement();
				String value = request.getParameter(name);
				articleMap.put(name, value);
                // 수정된 질문지의 정보를 가져오기 위해 사용
			}

			String ask_idx = (String) articleMap.get("ask_idx");

			adminService.modifyQues(articleMap);

			for (int i = 1; i <= 3; i++) {
				askDTO.getAsk_idx();
				answerDTO.setAnswer_idx(i);

				articleMap.put("answer_idx", answerDTO.getAnswer_idx());

				String anwerWriter = memberDTO.getWriter();
				answerDTO.setWriter(anwerWriter);

				articleMap.put("editor", answerDTO.getWriter());
                // writer 정보를 수정 등록 기능이기 때문에 editor에 설정

				articleMap.put("answer_cntnt", answerDTO.getAnswer_cntnt());
                // 수정된 질문지의 정보를 가져오기 위해 사용
				adminService.modifyAnswer(articleMap);
			}

			mav.setViewName("redirect:/adminQuesView?ask_idx=" + ask_idx);
		}

		return mav;
	}

질문지 및 답변지 삭제하기

삭제하기 기능은 질문지 수정 기능과 비슷하다.
다만 delete가 아닌 update를 활용해 정보 상태만 delete의 약자인 'D'로 나타내는 걸로 표현했다.

// 추가한 질문지 상세페이지 삭제 기능
	@Override
	@RequestMapping(value = "removeQues", method = { RequestMethod.GET, RequestMethod.POST })
	public ModelAndView quesWriteRemove(AdminAskDTO askDTO, 
    AdminAnswerDTO answerDTO, HttpServletRequest request)
			throws Exception {
		ModelAndView mav = new ModelAndView();
		String writer = memberDTO.getWriter();

		if (writer != null) {

			Map<String, Object> articleMap = new HashMap<>();

			askDTO.setEditor(writer);

			articleMap.put("editor", askDTO.getEditor());

			Enumeration enu = request.getParameterNames();

			while (enu.hasMoreElements()) {
				String name = (String) enu.nextElement();
				String value = request.getParameter(name);
				articleMap.put(name, value);
			}

			int askNOresult = askDTO.getAsk_idx();

			System.out.println(askNOresult);

			articleMap.put("ask_idx", askDTO.getAsk_idx());

			adminService.removeQues(articleMap);

			askDTO.getAsk_idx();

			String anwerWriter = memberDTO.getWriter();
			answerDTO.setWriter(anwerWriter);
			articleMap.put("editor", answerDTO.getWriter());

			adminService.removeAnswer(articleMap);

			mav.setViewName("redirect:/adminQuesList");
		}

		return mav;
	}

++ 유저 메세지 게시판 코드도 추가 예정 (추가 및 수정 중)

profile
MAKE A WISH

0개의 댓글