import kr.loner.shared.BlogType
/*
* 블로그 데이터 클래스입니다.
* id : 고유값
* title : 블로그의 타이틀명입니다.
* info : 블로그에 대한 설명글 입니다.
* img : view의 표시될 하나의 이미지입니다.
* blogUrl : 아이템을 눌렀을 때, 웹뷰로 전달할 url입니다.
* type : blog의 종류를 결정하는 타입 값입니다. (enum)
* */
data class Blog(
val id: Long,
val title: String?,
val info: String?,
val img: String?,
val blogUrl: String?,
val type: BlogType
)
BlogType
enum class BlogType {
Naver,
Daum
}
다음은 User 입니다.
User 클래스 역시 UserType으로 구글과 카카오 유저를
구분할 수 있게 수정하였습니다.
User.kt
import kr.loner.shared.UserType
import kr.loner.shared.model.sooyeol.blog.Blog
import kr.loner.shared.model.sooyeol.place.GoodPlace
/*
* 유저 추상 클래스입니다.
* id: 고유값,
* name: 사용자 이름 (기획에서는 이름의 필요성이 언급되진 않았지만, 혹시 몰라 넣어보았습니다!)
* myGoodPlaces : 사용자가 등록해 놓은 맛집의 리스트입니다.
* wishList : 사용자의 블로그 목록입니다.
* type : 카카오와 구글 로그인의 구분을 짓는 타입입니다.
* */
data class User(
val id: Long,
val name: String,
val myGoodPlaces: List<GoodPlace>,
val wishList: List<Blog>,
val type: UserType
)
UserType
enum class UserType {
Google,
Kakao
}
마지막으로 맛집은 클래스가 아닌 인터페이스를 사용했습니다.
맛집보다는 상위 표현인 장소가 어울리다는 의견이 있었고,
Place로 명명하고, 추후에 장소와 관련하여 범용적으로
여러 장소가 모델로 쓰일 가능성을 미루어 보아 Place라는 인터페이스를 구축하였고,
이 Place를 구현한 맛집 클래스인 GoodPlace의 코드입니다.
Place.kt
/*
* 장소 기본 데이터 인터페이스입니다.
* id : 고유값
* latitude : 장소의 위도입니다.
* longitude : 장소의 경도입니다.
* */
interface Place {
val id: Long
val latitude: String?
val longitude: String?
}
GoodPlace.kt
/*
* 사용자의 맛집 모델입니다.
* id, name, info : GoodPlaceData interface에 설명이 표기되어 있습니다.
* name : 맛집의 이름입니다.
* info : 맛집에 대한 설명글 입니다.
* imgs : 등록해놓은 맛집의 이미지 리스트입니다.
* starPoint : 맛집의 평가 별점입니다. ex) 1 -> 1점, 5 -> 5점
* date : 맛집을 등록한 날짜입니다.
* phoneNum : 맛집의 전화번호입니다.
* address : 맛집의 주소입니다.
* */
data class GoodPlace(
override val id: Long,
override val latitude: String?,
override val longitude: String?,
val name: String?,
val info: String?,
val imgs: List<String?>,
val rating: Double?,
val date: String?,
val phoneNum: String?,
val address: String?
) : Place