스팀 앱 개발기 #84 - 보팅 리스트 화면 구현을 위한 데이터 클래스 추가/변경steemCreated with Sketch.

### 시작하며...


오늘은 보팅 리스트 화면을 구현에 필요한 데이터 클래스들을 추가 또는 수정하는 작업을 진행하고자 합니다.


---


### 작업 개요


* 도메인 모듈에 ActiveVote 데이터 클래스 정의

* 도메인 모듈의 PostItem 데이터 클래스에 activeVotes 필드 추가

* 데이터 모듈의 ActiveVoteDTO 데이터 클래스에 toActiveVote(netShares, payout) 메소드 추가

* 데이터 모듈의 PostItemDTO 데이터 클래스 수정


---


### 도메인 모듈에 ActiveVote 데이터 클래스 정의


데이터 모듈에 ActiveVoteDTO 데이터 클래스는 있었지만, 그에 대응하는 ActiveVote 클래스가 도메인 모듈에 없었습니다. 보팅 리스트 화면에 보여주기 위해 ActiveVote 데이터 클래스를 추가합니다.


</p><p>data class ActiveVote(</p><p> val voter: String,</p><p> val weight: String,</p><p> val value: String</p><p>)</p><p>


---


### 도메인 모듈의 PostItem 데이터 클래스에 activeVotes 필드 추가


PostItemDTO 데이터 클래스에 active_votes 필드가 있지만, PostItem 클래스에는 이에 대응하는 필드를 넣지 않았습니다. 이번 화면 구현을 위해 이 클래스에 activeVotes 필드를 추가했습니다.


</p><p>data class PostItem(</p><p> val title: String,</p><p> val thumbnailURL: String,</p><p> val content: String,</p><p> val tagOrCommunity: String,</p><p> val time: String,</p><p> val rewards: Float,</p><p> val upvoteCount: Int,</p><p> val downvoteCount: Int,</p><p> val activeVotes: List&lt;ActiveVote&gt;,</p><p> val account: String,</p><p> val reputation: Int,</p><p> val permlink: String</p><p>)</p><p>


---


### 데이터 모듈의 ActiveVoteDTO 데이터 클래스에 toActiveVote(netShares, payout) 메소드 추가


ActiveVoteDTO 데이터 클래스로부터 ActiveVote 객체를 생성하는 메소드를 만들었습니다.


</p><p>fun toActiveVote(netShares: Long, payout: Float): ActiveVote {</p><p> val currentRshare = this.rshares?.toLongOrNull() ?: 0L</p><p> val votingWeight = when {</p><p> (null == this.percent) -&gt; ""</p><p> else -&gt; String.format("%.2f%", (this.percent.toIntOrNull() ?: 0) / 100f)</p><p> }</p><p> val votingValue = when {</p><p> (null == payout) -&gt; ""</p><p> else -&gt; String.format("$%.3f", payout * (currentRshare.toFloat() / netShares.toFloat()))</p><p> }</p><p><br /></p><p> return ActiveVote(this.voter ?: "", votingWeight, votingValue)</p><p>}</p><p>


---


### 데이터 모듈의 PostItemDTO 데이터 클래스 수정


수정 사항은 다음과 같습니다.


* net_shares 필드의 데이터 타입을 Int?에서 Long?로 변경

* toPostItem() 메소드에서 List<ActiveVoteDTO> 리스트를 List<ActiveVote>로 변환 코드 추가


---


### GitHub Commit


(다음 포스트에서 통합 반영 예정)


---


### 마치며...


후기는 다음에 자세히 남길께요.


---


### 지난 스팀 앱 개발기


* #83 - 포스트의 보팅 리스트에서 각 보팅의 가치 계산 방법 정리

* #82 - 포스트의 보팅 리스트에서 각 보팅의 가치는 어떻게 계산해야 하나?

* #81 - 보팅 리스트 화면 개발 예정

* #80 - 버그 수정: 태그 화면 시작시 bridge.get_ranked_posts API가 여러 번 실행되는 문제

* #79 - 태그 화면에 새로 고침 기능 추가

* #78 - 태그 화면에서 포스트들의 디폴트 썸네일 변경

* #77 - 태그 화면에서 썸네일 없는 포스트 항목에 엉뚱한 썸네일이 보이는 오류

* #76 - 태그 검색시 앱이 죽는 버그 수정

* #75 - 태그 화면의 포스트 항목에 태그/커뮤니티 표시

* #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결

* #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용

* #72 - 태그 화면의 포스트 리스트에서 항목들 사이 분리선 보이기

* #71 - 태그 화면에서 포스트 항목들의 썸네일 로딩

* #70 - 태그 화면 1차 구현

* #69 - 태그 화면에 데이터 바인딩 적용

* #68 - 태그 화면(TagsFragment) 구성

* #67 - TagsViewModel 클래스에 포스트 리스트 구하는 메소드 그리고 라이브 데이터 추가

* #66 - bridge.get_ranked_posts API 연동 구현: ReadRankedPostsUseCase 클래스 추가

* #65 - bridge.get_ranked_posts API 연동 구현: SteemRepository 인터페이스, SteemRepositoryImpl 클래스 수정

* #64 - bridge.get_ranked_posts API 연동 구현: SteemService 인터페이스에 메소드 추가

* #63 - bridge.get_ranked_posts API 관련 데이터 클래스 추가 수정

* #62 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 수정

* #61 - layout_post_item.xml 수정 후 예상치 못한 빌드 오류

* #60 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 정의

* #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API

* #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용

* #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)

* #56 - 포스트 리스트를 구성할 항목의 레이아웃

* #55 - .gitignore 파일 작성

* #54 - RxJava 관련 메모리 누수 방지 코드 작성

* #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료

* #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?

* #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그

* #1 ~ #50



Posted through the AVLE Dapp (https://avle.io)

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57956.22
ETH 3126.99
USDT 1.00
SBD 2.45