Spring/프로젝트 코드 리뷰
Spring 클론코딩 프로젝트 콘텐츠 DetailPage( 출연/제작)
code2772
2023. 3. 5. 11:58
728x90
반응형
✔ 출연/제작 - Controller 부분
// 인물 리스트
List<String> peopleList = new ArrayList<>();
List<String> people = new ArrayList<>();
List<PersonResponse> personList = new ArrayList<>();
if(movie.people() != null){
peopleList = List.of(movie.people().split(","));
for(String per : peopleList){
people.add(per.split("\\(")[0] + "," + per.split("\\(")[1].split("\\)")[0]);
}
}
try{
personList = personService.personList(people);
}catch (Exception e){
System.out.println("** 인물정보가 없습니다 **");
}
1. 출연/제작 인물 리스트를 ArrayList로 먼저 만들어준다.
2. if 문을 사용하여 tb_movie 테이블의 people 이 있는지 확인하여 출력하게 한다
3. personList에서 split으로 ',' 기준으로 나눠준다 personList는 personService에서 만들어둔 내용이다.
per.split("\\(")[0] + "," + per.split("\\(")[1].split("\\)")[0] 사용하여 리스트를 추출하여 차 후 타임리프로 해당 정보들을 반복할 때 문제 없이 하기 위해 가공하였다.
@Transactional(readOnly = true)
public List<PersonResponse> personList(List<String> peopleList){
List<PersonResponse> personList = peopleList.stream().map(
per->{
PersonDto dto = PersonDto.from(personRepository.getReferenceById(Long.valueOf(per.split(",")[0])));
return PersonResponse.from(dto, per.split(",")[1]);
}
).toList();
return personList;
}
✔ tb_person 테이블의 인물 정보
✔ personResponse
public static PersonResponse from(PersonDto dto, String role){
return new PersonResponse(
dto.idx(),
dto.name(),
dto.photo(),
role,
null,
null,
null,
null,
null
);
}
4. 출연/제작에 필요한 정보들만 사용하기 위해 만들었으며 처음 null값 없이 구현하니 로딩에 많은 시간이 들고 프로그램이 무거워지는 문제가 발생하여 필요없는 값들은 null로 바꾸었다.
✔ 타임리프 출력
<attr sel="section#content_credits" th:if="${movie.people} != null">
<attr sel="ul.css-1br354h-VisualUl-PeopleStackableUl" th:remove="all-but-first">
<attr sel="li.css-54rr1e" th:each="person, i: ${people}">
<attr sel="div.css-1o7yycy-ProfilePhotoImage" th:style="${person.photo} != null ? 'background-image:url('+ ${person.photo} +');' : _"/>
<attr sel="div.css-17vuhtq" th:text="${person.name}"/>
<attr sel="div.css-1evnpxk-StyledSubtitle" th:text="${person.role}"/>
<attr sel=".css-1aaqvgs-InnerPartOfListWithImage" th:href="@{'/personDetail/'+${person.idx}}"/>
</attr>
</attr>
</attr>
5. 타임리프를 이용하여 페이지에 출력을 해주었다.
6. th:style="${person.photo} != null ? 'background-image:url('+ ${person.photo} +');' : _" 출연자의 이미지가 없는 경우 삼항연산자를 이용하여 처리
✔ 출연/제작 결과 페이지
반응형