본문 바로가기
프로젝트/학습관리시스템(LMS)

수강 관리 - 강좌 목록 구현

by 허정주 2022. 11. 15.

회원의 강좌 목록을 구현할 것이다.

 

  • 강좌 목록 페이지 구현
  • 관리자 페이지에서 나오는 목록 리스트와 회원 페이지에서 나오는 목록 리스트는 같을 수 없으므로 회원 전용 페이지 메소드를 Service에 frontList로 따로 생성
  • Impl에서 frontList를 생성한 후 CourseController에서 사용
@Override
public List<CourseDto> frontList(CourseParam courseParam) {
	
	List<Course> courseList = courseRepository.findAll();
	
	return CourseDto.of(courseList);
}

 

□ 카테고리 보여주게 목록 설정

  • 카테고리 목록을 가져오기 위해서 CategoryMapper 인터페이스 생성하여 select 메소드 생성
  • resources/mybatis 에 해당하는 CategoryMapper.xml 생성하여 select문 추가
select c.*, (select count(*) from course where category_id = c.id) as course_count
        from category c where using_yn = 1 order by sort_value desc

 

  • course_count라는 추가 컬럼 CategoryDto에 추가
  • 이것을 사용할 서비스가 필요하므로 frontList 메소드 추가 후 구현
  • 컨트롤러에서 frontList를 사용하여 카테고리 정보들을 받아와 index에 넘겨줌
  • 카테고리명 출력 부분과 카테고리명들의 아이디 값을 매개로 그 페이지로 넘어가는 부분 추가
    • <a href="?"></a>는 현재 페이지 다시 불러오는 것
  • CourseController에서 카테고리 아이디 값을 가져올 수 있도록 courseParam에 categoryId 필드 추가
  • 전체가 아니면 카테고리ID로 카테고리를 찾아야하므로 repository에 findByCategoryId 추가
  • frontList 수정
@Override
public List<CourseDto> frontList(CourseParam parameter) {
	
	// 전체를 가져올 때
	if(parameter.getCategoryId() < 1) {
		List<Course> courseList = courseRepository.findAll();
		return CourseDto.of(courseList);
	}
	
	
	// 하나만 찾을 때
	Optional<List<Course>> optionalCourses = courseRepository.findByCategoryId(parameter.getCategoryId());
	if(optionalCourses.isPresent()) {
		return CourseDto.of(optionalCourses.get());
	}
	
	// 위와 똑같은 기능
	//return courseRepository.findByCategoryId(parameter.getCategoryId()).map(CourseDto::of).orElse(null);
		
	return null;
}

 

  • 카테고리별 개수 옆에 추가
	int courseTotalCount = 0;
        if(categoryList != null) {
        	for(CategoryDto x : categoryList) {
        		courseTotalCount += x.getCourseCount();
        	}
        }
        model.addAttribute("courseTotalCount", courseTotalCount);