이번에 혼자 개발을 하다보니 팀의 중요성을 점점 깨닫고 있다..
저 구린 디자인을 보면 생각나는 디자이너분들...(나의 최선이다ㅠㅠ)
가공되지않은 데이터를 프론트에서 사용할 수 있게끔 잘 가공해준 백엔드분들..
많은 분들이 떠올라진다.. 혼자 개발을 하다보니 순전히 개발하는 시간보다 문서를 찾고 데이터 가공하는 시간이 더 오래걸리는 것 같다..
아직 갈길이 멀었지만 현재까지 진행상황과 앞으로의 진행예정인 상황들을 간단하게 공유할려고 한다.
기초작업을 끝낸 후 서치바를 생성한 뒤 이제 api호출을 하여 데이터를 가져올 일만 남았다. 근데 문서가 모두 영어로 되어있어서 어디서 어떻게 가져와야되는지 찾기가 어려웠다. 그래서 문서를 막 뒤지다가
/riot/account/v1/accounts/by-riot-id/{gameName}/{tagLine}
gameName - 롤에서의 닉네임이다. e.g. hideonbush
tagLine - 롤에서의 태그명이다. e.g. KR1
이 api를 이용하면 해당유저의 uuid를 준다. uuid는 78자의 고유값이며 이걸로 해당 유저의 매치정보를 조회 할 수 있다.
그래서 나의 계획은 매치리스트를 가져와서 해당 매치에 대한 정보를 다시 api를 호출하여 가져온 뒤 보여줄 생각이였다.
tft/match/v1/matches/by-puuid/{puuid}/ids
그래서 우선 매치리스트를 가져오는 api를 사용했다. 해당 결과값은list<String>
이다. 안에는 matchId가 들어있고 해당 matchId로
tft/match/v1/matches/{matchId}
이 api를 호출하여 정보를 가져오면 된다.
데이터는 모두 정상적으로 가져올 수 있었고 문제는 이미지였다.
매치정보에선 이미지 url을 주는 것이 아닌 이미지 id를 줬다.
그 이미지 id를 라이엇이 제공해주는 json파일에서 매칭시켜서 가져와야된다.
이 과정이 난 너무 복잡하다고 느껴서 비정상적인 방법으로 해결하고자 했다.
fun createImageUrl(id: String, type: String, version: String): String {
val regex = Regex("""\d+\.\d+""")
val match = regex.find(version)?.value
val currentVersion = "$match.1"
val imageName = when (type) {
ImageType.CHAMPION.type -> {
val season = Regex("""TFT(\d+)""").find(id)?.groupValues?.get(1)
"$id.TFT_Set$season"
}
else -> id
}
return "https://ddragon.leagueoflegends.com/cdn/$currentVersion/img/$type/$imageName.png"
}
}
이 로직을 잠깐 설명하자면 매치정보에서 주는 id값과 version값을 어떻게 파싱하여 url로 만들어줬다. 그래서 성공인 줄? 알았지만...
맨위에 보여지는 화면처럼 변수가 있었다. 몇몇의 챔피언들은 저 형식이 아닌 다른 형식이 있다는 점이였다. 그래서 그 예외되는 챔피언들만 예외처리를 해줄수도 있었지만 앞으로 버전이 늘어나면서 그러한 예외처리를 매번 해줄 수는 없을 것 같아서 방법을 바꾸기로 했다.
내가 생각한 해결방법은 우선 최신 버전들을 모아논 json파일이 있다.
https://ddragon.leagueoflegends.com/api/versions.json
이 파일을 스플래시에서 호출하여 최신버전이 있는 지 체크한다. (아마 sharedPreference로?)
체크 한 후 없으면 그대로 메인화면 이동하고 만약 있다면 그 버전의 asset.json파일을 호출하여 다운받는다. 다운을 받고 data class로 파싱한 후 room을 이용하여 로컬에 저장하고 이미지를 가져올 때 room에서 json파일 꺼내 이미지 id를 가져올 예정이다.
물론 3탄에서..