캐릭터 업데이트 수정
2024.09.24 닉네임 변경으로 인한 캐릭터 업데이트가 안되는 문제 수정
1. 현재 코드
@Transactional
public void updateCharacterList(String username) {
// 1. 회원 조회
Member member = memberDao.get(username);
// 2. 대표캐릭터 조회
String mainCharacter = member.getMainCharacterName();
// 3. 거래소, 콘텐츠 통계 데이터 조회
Map<String, Market> contentResource = marketDao.findContentResource();
List<DayContent> chaos = contentDao.findDayContent(Category.카오스던전);
List<DayContent> guardian = contentDao.findDayContent(Category.가디언토벌);
// 4. 대표캐릭터 이름으로 로스트아크 오픈 API를 통해 원정대 조회
List<CharacterJsonDto> characterJsonDtoList = lostarkCharacterDao.getCharacterJsonDtoList(mainCharacter, member.getApiKey());
for (CharacterJsonDto dto : characterJsonDtoList) {
// 4-1. 캐릭터 이미지 추가(캐릭터 조회 오픈 API)
dto.setCharacterImage(lostarkCharacterDao.getCharacterImageUrl(dto.getCharacterName(), member.getApiKey()));
// 4-2. 등록된 캐릭터와 이름같은 데이터 찾기
Optional<Character> find = member.getCharacters().stream()
.filter(character -> character.getCharacterName().equals(dto.getCharacterName())).findFirst();
// 4-3. 업데이트된 아이템 레벨을 바탕으로 일일숙제 수익 수정
DayTodo dayContent = new DayTodo().createDayContent(chaos, guardian, dto.getItemMaxLevel());
if (find.isPresent()) { // 4-4.이름 같은게 있으면 업데이트
Character character = find.get();
updateCharacter(character, dto, dayContent, contentResource);
} else { // 4-5. 이름 같은게 없으면 추가
Character character = addCharacter(dto, dayContent, member);
calculateDayTodo(character, contentResource);
member.getCharacters().add(character);
}
}
}문제
2. 수정
1) 이미지 URL에 있는 UUID(추정) 사용

2) 코드 수정
UUID 찾기 / 비교 메소드
원정대 검색할 캐릭터 닉네임 찾는 메소드
원정대 업데이트
3. 테스트
변경할 데이터


업데이트 메소드 실행

결과


Last updated