Commit 75525e6a authored by Vladislav Bogdashkin's avatar Vladislav Bogdashkin 🎣

merge explication

parents 150c032a 3d3e623a
package com.biganto.visual.roompark.data.data_provider
import com.biganto.visual.androidplayer.data.repository.local.ILocalStore
import com.biganto.visual.roompark.data.local.UserState
import com.biganto.visual.roompark.data.repository.api.IRoomParkApi
import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import com.biganto.visual.roompark.data.repository.mapper.fromRaw
import com.biganto.visual.roompark.data.repository.mapper.fromRawList
import com.biganto.visual.roompark.domain.contract.DealContract
import com.biganto.visual.roompark.domain.custom_exception.CustomApiException
import com.biganto.visual.roompark.domain.model.EstateModel
import com.biganto.visual.roompark.domain.model.fromEntity
import io.reactivex.Observable
import timber.log.Timber
import javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 29.10.2019.
*/
//
class EstateRepository @Inject constructor(
private val local: ILocalStore,
private val api: IRoomParkApi,
private val db: IDb
): DealContract {
init {
Timber.d("Estate Repository Created")
}
private val getFavoritesApi: Observable<List<EstateEntity>> =
local.recentUser()
.flatMap {
when (it) {
is UserState.Authenticated -> db.fetchUser(it.uuid.toInt())
else -> throw CustomApiException.NotAuthorizedException()
}
}
.flatMap { user ->
api.getFavorites(user.authToken)
.doOnError(Timber::e)
.map { fromRawList(it, ::fromRaw) }
.doOnNext {
it.forEach { estate ->
estate.setFavorite(true)
estate.user = user
}
}
.doOnNext(db::blockingUpsert)
}
private val getFavoritesDb: Observable<List<EstateEntity>> =
local.recentUser()
.flatMap {
when (it) {
is UserState.Authenticated -> db.fetchUser(it.uuid.toInt()).take(1)
else -> throw CustomApiException.NotAuthorizedException()
}
}
.flatMap {
db.getUserFavorites(it.uuid)
.doOnError(Timber::e)
.toList().toObservable()
}
override fun getFavorites(): Observable<List<EstateModel>> {
return Observable.mergeDelayError(
arrayListOf(
getFavoritesApi, getFavoritesDb
)
).map { fromEntity(it, ::fromEntity) }
.doOnError(Timber::e)
}
}
...@@ -62,6 +62,7 @@ class UserHolder @Inject constructor(val context : Application) : ILocalStore ...@@ -62,6 +62,7 @@ class UserHolder @Inject constructor(val context : Application) : ILocalStore
.observe() .observe()
.map { .map {
Timber.d(" AUTH VALUE: $it") Timber.d(" AUTH VALUE: $it")
Timber.d(" EMPTY_PREF_VALUE_KEY: $EMPTY_PREF_VALUE_KEY")
if (it == EMPTY_PREF_VALUE_KEY) return@map UserState.NotAuthenticated() if (it == EMPTY_PREF_VALUE_KEY) return@map UserState.NotAuthenticated()
else return@map UserState.Authenticated(it) else return@map UserState.Authenticated(it)
} }
......
...@@ -35,8 +35,7 @@ data class EstateRaw( ...@@ -35,8 +35,7 @@ data class EstateRaw(
val plan_jpg:PlanRaw?, val plan_jpg:PlanRaw?,
val url:String, val url:String,
val album_id:Int, val album_id:Int,
val multitour_id:Int?, val multitour_id:Int?
val explications: List<ExplicationRaw>?
) )
data class PlanRaw( data class PlanRaw(
...@@ -48,6 +47,7 @@ data class PlanRaw( ...@@ -48,6 +47,7 @@ data class PlanRaw(
data class CommonInfoRaw( data class CommonInfoRaw(
val building: Int, val building: Int,
val section_begin:Int, val section_begin:Int,
val section_end:Int?,
val floor:Int, val floor:Int,
val floor_max:Int, val floor_max:Int,
val area: Float?, val area: Float?,
...@@ -65,8 +65,6 @@ data class CommonInfoRaw( ...@@ -65,8 +65,6 @@ data class CommonInfoRaw(
val rooms:Int? val rooms:Int?
) )
data class ExplicationRaw(val plan_id:Int,val items:List<EstateRoomRaw>)
data class EstateRoomRaw( data class EstateRoomRaw(
val title:String, val title:String,
val living:Boolean, val living:Boolean,
...@@ -138,7 +136,8 @@ data class ResolutionRaw( ...@@ -138,7 +136,8 @@ data class ResolutionRaw(
data class PlanTypeRaw( data class PlanTypeRaw(
val plan_id:Int, val plan_id:Int,
val title:String, val title:String,
val features: List<String> val features: List<String>,
val explication: List<EstateRoomRaw>?
) )
data class MultiTourRaw( data class MultiTourRaw(
......
...@@ -26,4 +26,6 @@ interface IDb { ...@@ -26,4 +26,6 @@ interface IDb {
fun getPhotos(albumId: Int): Observable<GalleryPhotoEntity> fun getPhotos(albumId: Int): Observable<GalleryPhotoEntity>
fun getPhoto(photoId: Int): Observable<GalleryPhotoEntity> fun getPhoto(photoId: Int): Observable<GalleryPhotoEntity>
fun getAlbum(albumId: Int): Observable<ImageAlbumEntity> fun getAlbum(albumId: Int): Observable<ImageAlbumEntity>
fun getUserFavorites(uuid: Int): Observable<EstateEntity>
fun fetchAllUsers(): Observable<List<UserEntity>>
} }
\ No newline at end of file
...@@ -33,7 +33,6 @@ class DbModule{ ...@@ -33,7 +33,6 @@ class DbModule{
// source.setLoggingEnabled(true) // source.setLoggingEnabled(true)
// source.setWriteAheadLoggingEnabled(true) // source.setWriteAheadLoggingEnabled(true)
source.setTableCreationMode(TableCreationMode.DROP_CREATE) source.setTableCreationMode(TableCreationMode.DROP_CREATE)
val store = KotlinEntityDataStore<Persistable>(source.configuration) val store = KotlinEntityDataStore<Persistable>(source.configuration)
Timber.d("Kotlin store %s",source) Timber.d("Kotlin store %s",source)
return KotlinReactiveEntityStore(store) return KotlinReactiveEntityStore(store)
...@@ -123,8 +122,12 @@ class RequeryRepository @Inject constructor( ...@@ -123,8 +122,12 @@ class RequeryRepository @Inject constructor(
.firstOrNull() .firstOrNull()
override fun fetchUser(uuid: Int): Observable<UserEntity> = override fun fetchUser(uuid: Int): Observable<UserEntity> =
fetchAll<UserEntity>().where(UserEntity.UUID.eq(uuid)).get().observable() store.select(UserEntity::class).where(UserEntity.UUID.eq(uuid)).get().observable()
// fetchAll<UserEntity>().where(UserEntity.UUID.eq(uuid)).get().observable()
override fun fetchAllUsers(): Observable<List<UserEntity>> =
store.select(UserEntity::class).get().observable().toList().toObservable()
fun upsertFeeds(entity: List<FeedEntity>) = fun upsertFeeds(entity: List<FeedEntity>) =
store.upsert(entity) store.upsert(entity)
...@@ -134,4 +137,9 @@ class RequeryRepository @Inject constructor( ...@@ -134,4 +137,9 @@ class RequeryRepository @Inject constructor(
.where(UserEntity.UUID.eq(uuid)) .where(UserEntity.UUID.eq(uuid))
.get() .get()
.observableResult() .observableResult()
override fun getUserFavorites(uuid: Int): Observable<EstateEntity> =
store.select(EstateEntity::class)
.where(EstateEntity.USER_ID.eq(uuid))
.get().observable()
} }
\ No newline at end of file
...@@ -20,4 +20,9 @@ interface Deal : Persistable { ...@@ -20,4 +20,9 @@ interface Deal : Persistable {
@get:ForeignKey(references = Estate::class ) @get:ForeignKey(references = Estate::class )
@get:OneToOne(cascade = [CascadeAction.NONE]) @get:OneToOne(cascade = [CascadeAction.NONE])
var estate:Estate var estate:Estate
@get:Nullable
@get:Column(name = "UserContainer")
@get:ForeignKey(references = User::class )
@get:OneToOne(mappedBy = "uuid",cascade = [CascadeAction.NONE])
var user:User?
} }
\ No newline at end of file
...@@ -41,8 +41,6 @@ interface Estate : Persistable { ...@@ -41,8 +41,6 @@ interface Estate : Persistable {
val info_building: Int val info_building: Int
val info_section_begin: Int val info_section_begin: Int
val info_floor: Int val info_floor: Int
@get:OneToMany(mappedBy = "id")
val explications: Set<Explication>?
val info_floor_max: Int val info_floor_max: Int
@get:Nullable @get:Nullable
val url: String? val url: String?
...@@ -56,4 +54,25 @@ interface Estate : Persistable { ...@@ -56,4 +54,25 @@ interface Estate : Persistable {
val info_dependent: Boolean? val info_dependent: Boolean?
@get:Nullable @get:Nullable
val info_decoration: String? val info_decoration: String?
@get:Nullable
val info_window_face: String?
@get:Nullable
val info_price: Int?
@get:Nullable
val info_price_meter: Int?
@get:Nullable
val info_ceiling: Float?
@get:Nullable
val info_direction: String?
@get:OneToMany(mappedBy = "id", cascade = [CascadeAction.SAVE, CascadeAction.DELETE])
val planPreset: MutableList<PlanPreset>
val favorite : Boolean
@get:Nullable
@get:Column(name = "UserContainer")
@get:ForeignKey(references = User::class )
@get:OneToOne(mappedBy = "uuid",cascade = [CascadeAction.NONE])
var user:User?
} }
\ No newline at end of file
package com.biganto.visual.roompark.data.repository.db.requrey.model package com.biganto.visual.roompark.data.repository.db.requrey.model
import io.requery.* import io.requery.Entity
import io.requery.Generated
import io.requery.Key
import io.requery.Persistable
/** /**
* Created by Vladislav Bogdashkin on 24.09.2019. * Created by Vladislav Bogdashkin on 24.09.2019.
...@@ -11,9 +14,6 @@ interface Explication : Persistable { ...@@ -11,9 +14,6 @@ interface Explication : Persistable {
@get:Key @get:Key
@get:Generated @get:Generated
val id: Int val id: Int
@get:ForeignKey(references = PlanPreset::class)
@get:ManyToOne
val planId: Int
val living: Boolean val living: Boolean
val area: Float val area: Float
val title: String val title: String
......
...@@ -20,4 +20,6 @@ interface PlanPreset : Persistable { ...@@ -20,4 +20,6 @@ interface PlanPreset : Persistable {
val title:String val title:String
@get:Convert(StringListConverter::class) @get:Convert(StringListConverter::class)
val features:List<String> val features:List<String>
@get:OneToMany(mappedBy = "id", cascade = [CascadeAction.SAVE, CascadeAction.DELETE])
val explication:MutableList<Explication>
} }
\ No newline at end of file
...@@ -93,6 +93,63 @@ fun fromRaw(raw:ResolutionRaw) = ...@@ -93,6 +93,63 @@ fun fromRaw(raw:ResolutionRaw) =
fun fromRaw(raw:EstateRaw):EstateEntity{
val entity = EstateEntity()
entity.setId(raw.id)
entity.setType(raw.type)
entity.setNumber(raw.number)
entity.setSectionBegin(raw.common_info.section_begin)
entity.setSectionEnd(raw.common_info.section_end)
entity.setPlanJpgUrl(raw.plan_jpg?.url)
entity.setPlanJpgWidth(raw.plan_jpg?.width)
entity.setPlanJpgHeight(raw.plan_jpg?.height)
entity.setPlanPngUrl(raw.plan_png?.url)
entity.setPlanPngWidth(raw.plan_png?.width)
entity.setPlanPngHeight(raw.plan_png?.height)
entity.setRooms(raw.common_info.rooms)
entity.setAlbumId(raw.album_id)
entity.setMultitourId(raw.multitour_id)
entity.setUrl(raw.url)
entity.setInfo_floor_max(raw.common_info.floor_max)
entity.setInfo_area(raw.common_info.area)
entity.setInfo_area_living(raw.common_info.area_living)
entity.setInfo_kind(raw.common_info.kind)
entity.setInfo_dependent(raw.common_info.dependent)
entity.setInfo_decoration(raw.common_info.decoration)
entity.setInfo_building(raw.common_info.building)
entity.setInfo_section_begin(raw.common_info.section_begin)
entity.setInfo_floor(raw.common_info.floor)
entity.setInfo_window_face(raw.common_info.windows_face)
entity.setInfo_price(raw.common_info.price)
entity.setInfo_price_meter(raw.common_info.price_meter)
entity.setInfo_ceiling(raw.common_info.ceiling)
entity.setInfo_direction(raw.common_info.direction)
entity.setFavorite(false)
return entity
}
fun fromRaw(raw:PlanTypeRaw):PlanPresetEntity{
val entity = PlanPresetEntity()
entity.setFeatures(raw.features)
entity.setPlanId(raw.plan_id)
entity.setTitle(raw.title)
entity.explication.clear()
entity.explication.addAll(fromRawList(raw.explication!!,::fromRaw))
return entity
}
fun fromRaw(raw:EstateRoomRaw):ExplicationEntity{
val entity = ExplicationEntity()
entity.setArea(raw.area)
entity.setLiving(raw.living)
entity.setTitle(raw.title)
return entity
}
//fun fromRaw(raw: List<FeedRaw>):List<FeedEntity> = List(raw.displaySize) { index-> fromRaw(raw[index]) } //fun fromRaw(raw: List<FeedRaw>):List<FeedEntity> = List(raw.displaySize) { index-> fromRaw(raw[index]) }
......
...@@ -9,6 +9,7 @@ import com.biganto.visual.roompark.data.repository.api.retrofit.di.RetrofitModul ...@@ -9,6 +9,7 @@ import com.biganto.visual.roompark.data.repository.api.retrofit.di.RetrofitModul
import com.biganto.visual.roompark.data.repository.db.IDb import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.DbModule import com.biganto.visual.roompark.data.repository.db.requrey.DbModule
import com.biganto.visual.roompark.domain.contract.AuthContract import com.biganto.visual.roompark.domain.contract.AuthContract
import com.biganto.visual.roompark.domain.contract.DealContract
import com.biganto.visual.roompark.domain.contract.DevProgressContract import com.biganto.visual.roompark.domain.contract.DevProgressContract
import com.biganto.visual.roompark.domain.contract.FeedsContract import com.biganto.visual.roompark.domain.contract.FeedsContract
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
...@@ -51,6 +52,8 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{ ...@@ -51,6 +52,8 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{
fun feedsAlb(): DevProgressContract fun feedsAlb(): DevProgressContract
fun estateRep(): DealContract
fun provideLocal():ILocalStore fun provideLocal():ILocalStore
......
...@@ -21,7 +21,7 @@ const val ESTATES_CACHE_LIMIT_SECONDS_INACTIVE = 200L ...@@ -21,7 +21,7 @@ const val ESTATES_CACHE_LIMIT_SECONDS_INACTIVE = 200L
const val FILES_CACHE_LIMIT_SIZE = 10000 const val FILES_CACHE_LIMIT_SIZE = 10000
const val FILES_CACHE_LIMIT_SECONDS_INACTIVE = 60L const val FILES_CACHE_LIMIT_SECONDS_INACTIVE = 60L
const val DATABASE_VERSION = 8 const val DATABASE_VERSION = 9
@Module @Module
abstract class AppModule{ abstract class AppModule{
......
...@@ -2,6 +2,7 @@ package com.biganto.visual.roompark.di.dagger ...@@ -2,6 +2,7 @@ package com.biganto.visual.roompark.di.dagger
import com.biganto.visual.roompark.data.data_provider.AlbumsContractModule import com.biganto.visual.roompark.data.data_provider.AlbumsContractModule
import com.biganto.visual.roompark.data.data_provider.AuthContractModule import com.biganto.visual.roompark.data.data_provider.AuthContractModule
import com.biganto.visual.roompark.data.data_provider.EstateRepository
import com.biganto.visual.roompark.data.data_provider.FeedsContractModule import com.biganto.visual.roompark.data.data_provider.FeedsContractModule
import com.biganto.visual.roompark.data.local.LocalStorage import com.biganto.visual.roompark.data.local.LocalStorage
import com.biganto.visual.roompark.data.repository.api.IRoomParkApi import com.biganto.visual.roompark.data.repository.api.IRoomParkApi
...@@ -11,6 +12,7 @@ import com.biganto.visual.roompark.data.repository.db.IDb ...@@ -11,6 +12,7 @@ import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.DbModule import com.biganto.visual.roompark.data.repository.db.requrey.DbModule
import com.biganto.visual.roompark.data.repository.db.requrey.RequeryRepository import com.biganto.visual.roompark.data.repository.db.requrey.RequeryRepository
import com.biganto.visual.roompark.domain.contract.AuthContract import com.biganto.visual.roompark.domain.contract.AuthContract
import com.biganto.visual.roompark.domain.contract.DealContract
import com.biganto.visual.roompark.domain.contract.DevProgressContract import com.biganto.visual.roompark.domain.contract.DevProgressContract
import com.biganto.visual.roompark.domain.contract.FeedsContract import com.biganto.visual.roompark.domain.contract.FeedsContract
import dagger.Binds import dagger.Binds
...@@ -34,6 +36,9 @@ abstract class ContractRepositoryModule { ...@@ -34,6 +36,9 @@ abstract class ContractRepositoryModule {
@Binds @Binds
abstract fun provideDevProgressContract(impl: AlbumsContractModule): DevProgressContract abstract fun provideDevProgressContract(impl: AlbumsContractModule): DevProgressContract
@Binds
abstract fun provideEstateContract(impl: EstateRepository): DealContract
} }
......
...@@ -10,5 +10,5 @@ import io.reactivex.rxjava3.core.Observable ...@@ -10,5 +10,5 @@ import io.reactivex.rxjava3.core.Observable
interface DealContract{ interface DealContract{
fun getFavorites() : Observable<List<EstateModel>> fun getFavorites() : io.reactivex.Observable<List<EstateModel>>
} }
\ No newline at end of file
...@@ -94,83 +94,83 @@ class DealsInteractor @Inject constructor( ...@@ -94,83 +94,83 @@ class DealsInteractor @Inject constructor(
section_begin = 14, section_begin = 14,
windows_face = "\u0414\u0432\u043e\u0440 \u0438 \u0423\u043b\u0438\u0446\u0430" windows_face = "\u0414\u0432\u043e\u0440 \u0438 \u0423\u043b\u0438\u0446\u0430"
), ),
explications = arrayListOf(ExplicationListModel( // explications = arrayListOf(ExplicationListModel(
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
area = 16.9f, // area = 16.9f,
living = true, // living = true,
title = "\u0413\u043e\u0441\u0442\u0438\u043d\u0430\u044f" // title = "\u0413\u043e\u0441\u0442\u0438\u043d\u0430\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 14.6f, // area = 14.6f,
living = true, // living = true,
title = "\u0421\u043f\u0430\u043b\u044c\u043d\u044f" // title = "\u0421\u043f\u0430\u043b\u044c\u043d\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 10.8f, // area = 10.8f,
living = false, // living = false,
title = "\u041a\u0443\u0445\u043d\u044f" // title = "\u041a\u0443\u0445\u043d\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 3.6f, // area = 3.6f,
living = false, // living = false,
title = "\u041a\u043e\u0440\u0438\u0434\u043e\u0440" // title = "\u041a\u043e\u0440\u0438\u0434\u043e\u0440"
),ExplicationModel( // ),ExplicationModel(
area = 3.4f, // area = 3.4f,
living = false, // living = false,
title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b" // title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b"
),ExplicationModel( // ),ExplicationModel(
area = 2.8f, // area = 2.8f,
living = false, // living = false,
title = "\u041f\u0440\u0438\u0445\u043e\u0436\u0430\u044f" // title = "\u041f\u0440\u0438\u0445\u043e\u0436\u0430\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 1.9f, // area = 1.9f,
living = false, // living = false,
title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b" // title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b"
),ExplicationModel( // ),ExplicationModel(
area = 1.4f, // area = 1.4f,
living = false, // living = false,
title = "\u041b\u043e\u0434\u0436\u0438\u044f" // title = "\u041b\u043e\u0434\u0436\u0438\u044f"
) // )
), // ),
planId = 0 // planId = 0
), // ),
ExplicationListModel( // ExplicationListModel(
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
area = 16.2f, // area = 16.2f,
living = true, // living = true,
title = "\u0413\u043e\u0441\u0442\u0438\u043d\u0430\u044f" // title = "\u0413\u043e\u0441\u0442\u0438\u043d\u0430\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 13.7f, // area = 13.7f,
living = true, // living = true,
title = "\u0421\u043f\u0430\u043b\u044c\u043d\u044f" // title = "\u0421\u043f\u0430\u043b\u044c\u043d\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 10.2f, // area = 10.2f,
living = false, // living = false,
title = "\u041a\u0443\u0445\u043d\u044f" // title = "\u041a\u0443\u0445\u043d\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 4.3f, // area = 4.3f,
living = false, // living = false,
title = "\u041a\u043e\u0440\u0438\u0434\u043e\u0440" // title = "\u041a\u043e\u0440\u0438\u0434\u043e\u0440"
),ExplicationModel( // ),ExplicationModel(
area = 4.2f, // area = 4.2f,
living = false, // living = false,
title = "\u041f\u0440\u0438\u0445\u043e\u0436\u0430\u044f" // title = "\u041f\u0440\u0438\u0445\u043e\u0436\u0430\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 4.1f, // area = 4.1f,
living = false, // living = false,
title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b" // title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b"
),ExplicationModel( // ),ExplicationModel(
area = 1.4f, // area = 1.4f,
living = false, // living = false,
title = "\u041b\u043e\u0434\u0436\u0438\u044f" // title = "\u041b\u043e\u0434\u0436\u0438\u044f"
),ExplicationModel( // ),ExplicationModel(
area = 1.3f, // area = 1.3f,
living = false, // living = false,
title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b" // title = "\u0421\u0430\u043d\u0443\u0437\u0435\u043b"
) // )
), // ),
planId = 1 // planId = 1
) // )
), // ),
id = 75, id = 75,
multitourId = 4911, multitourId = 4911,
number = "1086", number = "1086",
...@@ -218,68 +218,68 @@ class DealsInteractor @Inject constructor( ...@@ -218,68 +218,68 @@ class DealsInteractor @Inject constructor(
section_begin = 2, section_begin = 2,
windows_face = "Двор" windows_face = "Двор"
), ),
explications = arrayListOf( // explications = arrayListOf(
ExplicationListModel( // ExplicationListModel(
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
area = 15.8f, // area = 15.8f,
living = true, // living = true,
title = "Гостиная" // title = "Гостиная"
),ExplicationModel( // ),ExplicationModel(
area = 14.5f, // area = 14.5f,
living = true, // living = true,
title = "Спальня" // title = "Спальня"
),ExplicationModel( // ),ExplicationModel(
area = 20.2f, // area = 20.2f,
living = false, // living = false,
title = "Кухня" // title = "Кухня"
),ExplicationModel( // ),ExplicationModel(
area = 5.0f, // area = 5.0f,
living = false, // living = false,
title = "Прихожая" // title = "Прихожая"
),ExplicationModel( // ),ExplicationModel(
area = 4.1f, // area = 4.1f,
living = false, // living = false,
title = "Санузел" // title = "Санузел"
),ExplicationModel( // ),ExplicationModel(
area = 1.6f, // area = 1.6f,
living = false, // living = false,
title = "Лоджия" // title = "Лоджия"
) // )
), // ),
planId = 0 // planId = 0
), // ),
ExplicationListModel( // ExplicationListModel(
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
area = 15.5f, // area = 15.5f,
living = true, // living = true,
title = "Спальня" // title = "Спальня"
),ExplicationModel( // ),ExplicationModel(
area = 14.5f, // area = 14.5f,
living = true, // living = true,
title = "Спальня" // title = "Спальня"
),ExplicationModel( // ),ExplicationModel(
area = 20.2f, // area = 20.2f,
living = false, // living = false,
title = "Кухня-гостиная" // title = "Кухня-гостиная"
),ExplicationModel( // ),ExplicationModel(
area = 5.3f, // area = 5.3f,
living = false, // living = false,
title = "Прихожая" // title = "Прихожая"
),ExplicationModel( // ),ExplicationModel(
area = 4.1f, // area = 4.1f,
living = false, // living = false,
title = "Санузел" // title = "Санузел"
),ExplicationModel( // ),ExplicationModel(
area = 1.6f, // area = 1.6f,
living = false, // living = false,
title = "Лоджия" // title = "Лоджия"
) // )
), // ),
planId = 1 // planId = 1
) // )
), // ),
id = 1201, id = 1201,
multitourId = 6500, multitourId = 6500,
number = "88", number = "88",
......
package com.biganto.visual.roompark.domain.interactor package com.biganto.visual.roompark.domain.interactor
import com.biganto.visual.roompark.domain.model.* import com.biganto.visual.roompark.domain.model.CommonInfoModel
import io.reactivex.Single import com.biganto.visual.roompark.domain.model.EstateModel
import com.biganto.visual.roompark.domain.model.PlanModel
import com.biganto.visual.roompark.domain.use_case.EstateUseCase
import javax.inject.Inject import javax.inject.Inject
/** /**
...@@ -9,9 +11,12 @@ import javax.inject.Inject ...@@ -9,9 +11,12 @@ import javax.inject.Inject
*/ */
class FavoritesInteractor @Inject constructor( class FavoritesInteractor @Inject constructor(
private val estateUseCase: EstateUseCase
) { ) {
fun getFavoritesForCurrentUser() = Single.just(parkingEstateSample ) fun getFavoritesForCurrentUser() =
estateUseCase.fetchFavorites()
// Single.just(parkingEstateSample )
companion object { companion object {
...@@ -45,7 +50,6 @@ class FavoritesInteractor @Inject constructor( ...@@ -45,7 +50,6 @@ class FavoritesInteractor @Inject constructor(
planJPG = null, planJPG = null,
albumId = 10, albumId = 10,
multitourId = null, multitourId = null,
explications = null,
url = null url = null
), ),
EstateModel( EstateModel(
...@@ -75,7 +79,6 @@ class FavoritesInteractor @Inject constructor( ...@@ -75,7 +79,6 @@ class FavoritesInteractor @Inject constructor(
planJPG = null, planJPG = null,
albumId = 10, albumId = 10,
multitourId = null, multitourId = null,
explications = null,
url = null url = null
), ),
EstateModel( EstateModel(
...@@ -113,107 +116,107 @@ class FavoritesInteractor @Inject constructor( ...@@ -113,107 +116,107 @@ class FavoritesInteractor @Inject constructor(
), ),
albumId = 10, albumId = 10,
url = null, url = null,
multitourId = 5790, multitourId = 5790
explications = arrayListOf<ExplicationListModel>( // ,explications = arrayListOf<ExplicationListModel>(
ExplicationListModel( // ExplicationListModel(
planId = 0, // planId = 0,
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
living = true, // living = true,
area = 16.30f, // area = 16.30f,
title = "Спальня" // title = "Спальня"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 11.40f, // area = 11.40f,
title = "Кухня" // title = "Кухня"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 1.90f, // area = 1.90f,
title = "Прихожая" // title = "Прихожая"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 5.20f, // area = 5.20f,
title = "Коридор" // title = "Коридор"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 1.70f, // area = 1.70f,
title = "Лоджия" // title = "Лоджия"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 3.50f, // area = 3.50f,
title = "Санузел" // title = "Санузел"
) // )
) // )
), ExplicationListModel( // ), ExplicationListModel(
planId = 1, // planId = 1,
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
living = true, // living = true,
area = 16.30f, // area = 16.30f,
title = "Спальня" // title = "Спальня"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 11.40f, // area = 11.40f,
title = "Кухня" // title = "Кухня"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 5.20f, // area = 5.20f,
title = "Коридор" // title = "Коридор"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 1.90f, // area = 1.90f,
title = "Прихожая" // title = "Прихожая"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 3.50f, // area = 3.50f,
title = "Санузел" // title = "Санузел"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 1.70f, // area = 1.70f,
title = "Лоджия" // title = "Лоджия"
) // )
) // )
), ExplicationListModel( // ), ExplicationListModel(
planId = 2, // planId = 2,
items = arrayListOf( // items = arrayListOf(
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 1.00f, // area = 1.00f,
title = "Кухня-гостиная" // title = "Кухня-гостиная"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 2.00f, // area = 2.00f,
title = "Коридор" // title = "Коридор"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 3.00f, // area = 3.00f,
title = "Прихожая" // title = "Прихожая"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 4.00f, // area = 4.00f,
title = "Санузел" // title = "Санузел"
), // ),
ExplicationModel( // ExplicationModel(
living = false, // living = false,
area = 5.00f, // area = 5.00f,
title = "Лоджия" // title = "Лоджия"
) // )
) // )
) // )
) // )
) )
) )
......
package com.biganto.visual.roompark.domain.model package com.biganto.visual.roompark.domain.model
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
/** /**
* Created by Vladislav Bogdashkin on 23.09.2019. * Created by Vladislav Bogdashkin on 23.09.2019.
*/ */
...@@ -37,10 +39,45 @@ data class EstateModel( ...@@ -37,10 +39,45 @@ data class EstateModel(
val albumId:Int?=null, val albumId:Int?=null,
val multitourId:Int?=null, val multitourId:Int?=null,
val commonInfo:CommonInfoModel? = null, val commonInfo:CommonInfoModel? = null,
val explications:List<ExplicationListModel>? = null,
val url:String? val url:String?
) )
fun fromEntity(entity:EstateEntity): EstateModel {
val model = EstateModel(
id = entity.id,
type = entity.type,
number = entity.number,
sectionBegin = entity.sectionBegin,
sectionEnd = entity.sectionEnd,
planPNG = null,
planJPG = null,
rooms = entity.rooms,
albumId = entity.albumId,
multitourId = entity.multitourId,
commonInfo = CommonInfoModel(
building = entity.info_building,
section_begin = entity.sectionBegin,
floor = entity.info_floor,
floor_max = entity.info_floor_max,
area = entity.info_area,
area_living = entity.info_area_living,
kind = entity.info_kind,
dependent = entity.info_dependent,
decoration = entity.info_decoration,
ceiling = entity.info_ceiling,
windows_face = entity.info_window_face,
direction = entity.info_direction,
price_meter = entity.info_price_meter,
price = entity.info_price,
// discount = entity.di
// discount_amount = entity
rooms = entity.rooms
),
url = entity.url
)
return model
}
data class PlanModel( data class PlanModel(
val url:String, val url:String,
val width:Int, val width:Int,
...@@ -50,7 +87,7 @@ data class PlanModel( ...@@ -50,7 +87,7 @@ data class PlanModel(
data class CommonInfoModel( data class CommonInfoModel(
val building: Int, val building: Int,
val section_begin: Int, val section_begin: Int?,
val floor: Int, val floor: Int,
val floor_max: Int, val floor_max: Int,
val area: Float?, val area: Float?,
...@@ -63,8 +100,8 @@ data class CommonInfoModel( ...@@ -63,8 +100,8 @@ data class CommonInfoModel(
val direction: String?, val direction: String?,
val price_meter: Int?, val price_meter: Int?,
val price: Int?, val price: Int?,
val discount: Float?, val discount: Float? = null,
val discount_amount: Int?, val discount_amount: Int? = null,
val rooms: Int? val rooms: Int?
) )
......
package com.biganto.visual.roompark.domain.use_case
import com.biganto.visual.roompark.domain.contract.DealContract
import javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 24.09.2019.
*/
class EstateUseCase @Inject constructor(
private val contract: DealContract
){
fun fetchFavorites() = contract.getFavorites()
}
\ No newline at end of file
...@@ -15,6 +15,7 @@ import com.biganto.visual.roompark.R ...@@ -15,6 +15,7 @@ import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication import com.biganto.visual.roompark.base.RoomParkApplication
import com.biganto.visual.roompark.base.RoomParkMainActivity import com.biganto.visual.roompark.base.RoomParkMainActivity
import com.biganto.visual.roompark.conductor.BigantoBaseController import com.biganto.visual.roompark.conductor.BigantoBaseController
import com.biganto.visual.roompark.util.extensions.formatToSimple
import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
...@@ -151,7 +152,7 @@ class ArticleScreenController : ...@@ -151,7 +152,7 @@ class ArticleScreenController :
contentView.text = parsedHtml contentView.text = parsedHtml
articleDate.text = viewState.item.published.toString() articleDate.text = viewState.item.published.formatToSimple
Picasso.get() Picasso.get()
.load(viewState.item.previewUrl) .load(viewState.item.previewUrl)
......
...@@ -8,10 +8,9 @@ import com.biganto.visual.roompark.R ...@@ -8,10 +8,9 @@ import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.domain.model.ArticlePreviewModel import com.biganto.visual.roompark.domain.model.ArticlePreviewModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.biganto.visual.roompark.util.extensions.formatToSimple
import com.biganto.visual.roompark.util.extensions.setGone import com.biganto.visual.roompark.util.extensions.setGone
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import java.text.SimpleDateFormat
import java.util.*
/** /**
...@@ -28,15 +27,13 @@ class ArticlesPreviewAdapter : CommonRecyclerAdapter<ArticlePreviewViewHolder,Ar ...@@ -28,15 +27,13 @@ class ArticlesPreviewAdapter : CommonRecyclerAdapter<ArticlePreviewViewHolder,Ar
class ArticlePreviewViewHolder(itemView: View) : CommonViewHolder<ArticlePreviewModel>(itemView) { class ArticlePreviewViewHolder(itemView: View) : CommonViewHolder<ArticlePreviewModel>(itemView) {
private val dateFormatter = SimpleDateFormat("dd / MM / yyyy", Locale.getDefault())
@BindView(R.id.imageHolder) lateinit var preview:ImageView @BindView(R.id.imageHolder) lateinit var preview:ImageView
@BindView(R.id.feed_date_text_view) lateinit var articleDate:TextView @BindView(R.id.feed_date_text_view) lateinit var articleDate:TextView
@BindView(R.id.feed_title_info_text_view) lateinit var articleTitle:TextView @BindView(R.id.feed_title_info_text_view) lateinit var articleTitle:TextView
@BindView(R.id.feed_read) lateinit var articleIsRead:View @BindView(R.id.feed_read) lateinit var articleIsRead:View
override fun onViewBound(model: ArticlePreviewModel) { override fun onViewBound(model: ArticlePreviewModel) {
articleDate.text = dateFormatter.format(model.published) articleDate.text = model.published.formatToSimple
articleTitle.text = model.title articleTitle.text = model.title
articleIsRead.setGone(model.isRead) articleIsRead.setGone(model.isRead)
......
...@@ -6,13 +6,19 @@ import android.graphics.RectF ...@@ -6,13 +6,19 @@ import android.graphics.RectF
import android.view.View import android.view.View
import timber.log.Timber import timber.log.Timber
import java.text.DecimalFormat import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.*
/** /**
* Created by Vladislav Bogdashkin on 23.10.2019. * Created by Vladislav Bogdashkin on 23.10.2019.
*/ */
private val dateFormatter = SimpleDateFormat("dd / MM / yyyy", Locale.getDefault())
val Date.formatToSimple: String
get() = dateFormatter.format(this)
val Boolean?.asInt val Boolean?.asInt
get() = if (this != null && this) 1 else 0 get() = if (this != null && this) 1 else 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment