Skip to content

Commit

Permalink
Merge pull request #89 from microservices-course-itmo/add-recommendation
Browse files Browse the repository at this point in the history
Add recommendation
  • Loading branch information
PeterBozhko authored Apr 6, 2021
2 parents d45da56 + 85acffa commit d718ad7
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@ class WineListRepository(private val api: WineRetrofitApi, private val searchPar

suspend fun getList(page: Int, amount: Int) = getListFromApi(page, amount, searchParams)

private suspend fun getListFromApi(page: Int, amount: Int, searchParams: String) = api.getWinePositionList(page, amount, searchParams)
private suspend fun getListFromApi(page: Int, amount: Int, searchParams: String) =
api.getWinePositionList(page, amount, searchParams)

suspend fun getRecommendationList(id: String) = api.getRecommendationList(id)

fun getHardcodedList(): List<WineModel> {
val wines = arrayListOf<WineModel>()
for (i in 0..9) {
wines.add(
WineModel(
"id1",
"Canti Merlot",
"Франция",
"красное",
Expand All @@ -40,5 +44,4 @@ class WineListRepository(private val api: WineRetrofitApi, private val searchPar
return wines

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ class GetWineListUseCase {
//todo: remove, just for test
fun getHardcodedList() = wineListRepository.getHardcodedList()

suspend fun getRecommendationList(id: String) = wineListRepository.getRecommendationList(id)

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.itmo.wineup.features.catalog.models
import java.io.Serializable

data class WineModel(
val id: String,
val name: String,
val country: String,
val color: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import android.graphics.Paint
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.itmo.wineup.R
Expand All @@ -13,7 +15,6 @@ import com.itmo.wineup.features.catalog.models.FeedbackModel
import com.itmo.wineup.features.catalog.models.WineModel
import com.itmo.wineup.features.catalog.presentation.adapters.FeedbackAdapter
import com.itmo.wineup.features.catalog.presentation.adapters.WinesAdapter
import kotlinx.android.synthetic.main.fragment_filter_price.*
import kotlinx.android.synthetic.main.wine_activity.*
import kotlinx.android.synthetic.main.wine_content.*

Expand All @@ -23,6 +24,8 @@ class WineInfoActivity : AppCompatActivity() {
const val FEEDBACK_MODEL_TAG = "FEEDBACK_MODEL"
}

private lateinit var viewModel: WineInfoViewModel

private var current: Int = 0
private var currentFeedback: Int = 0

Expand All @@ -37,15 +40,16 @@ class WineInfoActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(WineInfoViewModel::class.java)
viewModel.recommendationList.observe(this, Observer(this::renderRecommendationList))
setContentView(R.layout.wine_activity)

wineModel = intent.getSerializableExtra(WINE_MODEL_TAG) as WineModel
viewModel.getRecommendationList(wineModel.id)
populate()
similarRecyclerView.layoutManager =
LinearLayoutManager(baseContext, LinearLayoutManager.HORIZONTAL, false)
similarRecyclerView.adapter = adapter
similarRecyclerView.isNestedScrollingEnabled = false
renderVineList(getWineListUseCase.getHardcodedList())
button_back.alpha = 0.25F
setSimilarListeners()

Expand Down Expand Up @@ -111,7 +115,7 @@ class WineInfoActivity : AppCompatActivity() {
}
}

private fun renderVineList(vineList: List<WineModel>) {
private fun renderRecommendationList(vineList: List<WineModel>) {
adapter.updateList(vineList)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.itmo.wineup.features.wine_info

import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.itmo.wineup.features.catalog.domain.GetWineListUseCase
import com.itmo.wineup.features.catalog.models.WineModel
import com.itmo.wineup.network.retrofit.data.WinePositionConverter
import com.itmo.wineup.network.retrofit.data.WineRecommendationResponse
import kotlinx.coroutines.launch

class WineInfoViewModel : ViewModel() {

private val getWineListUseCase = GetWineListUseCase()

val recommendationList = MutableLiveData<List<WineModel>>()

fun getRecommendationList(id: String) {
viewModelScope.launch {
try{
val list = getWineListUseCase.getRecommendationList(id)
recommendationList.value = WinePositionConverter.toWineModel(list.recommendations)
} catch (e: Throwable){
Log.e("error", "error getting recommendations + ${e.message}")
//todo show error screen
}

}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.itmo.wineup.network.retrofit

import com.itmo.wineup.TokenMaster
import com.itmo.wineup.network.retrofit.data.WinePositionResponse
import com.itmo.wineup.network.retrofit.data.WineRecommendationResponse
import com.itmo.wineup.network.retrofit.data.WineResponse
import retrofit2.Call
import retrofit2.http.*
Expand All @@ -22,4 +23,10 @@ interface WineRetrofitApi {
@Header("Authorization") accessToken: String = "Bearer ${TokenMaster.accessToken}"
): List<WinePositionResponse>

@GET("rec/true/byId/{id}")
suspend fun getRecommendationList(
@Path("id") id: String,
@Header("Authorization") accessToken: String = "Bearer ${TokenMaster.accessToken}"
): WineRecommendationResponse

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ object WinePositionConverter {
Log.d("Wine", response.wine.name)
res.add(
WineModel(
id = response.winePositionId,
name = response.wine.name,
color = response.wine.color,
country = response.wine.region.firstOrNull()?.country ?: "",//todo
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.itmo.wineup.network.retrofit.data

import com.google.gson.annotations.SerializedName

data class WineRecommendationResponse (

@SerializedName("wine_position")
val winePosition: WinePositionResponse,

val recommendations: List<WinePositionResponse>

)
1 change: 0 additions & 1 deletion app/src/main/res/drawable/go_back_button_border.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="" />
<stroke android:width="1dp" android:color="@color/red"/>
<corners
android:radius="4dp" >
Expand Down

0 comments on commit d718ad7

Please sign in to comment.