Skip to content

Commit

Permalink
Merge pull request #194 from falconArdente/iteration_4_review
Browse files Browse the repository at this point in the history
Iteration 4 review with critical issues
  • Loading branch information
falconArdente authored Aug 1, 2024
2 parents 25c8d93 + 4f202b6 commit 512e586
Show file tree
Hide file tree
Showing 55 changed files with 1,001 additions and 555 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "Area")
@Entity(tableName = "area")
data class AreaEntity(
@PrimaryKey
val id: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "Employer")
@Entity(tableName = "employer")
data class EmployerEntity(
@PrimaryKey(autoGenerate = true)
val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "JobInfo")
@Entity(tableName = "job_info")
data class JobInfoEntity(
@PrimaryKey(autoGenerate = true)
val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "Logos")
@Entity(tableName = "logos")
data class LogosEntity(
@PrimaryKey(autoGenerate = true)
val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "Salary")
@Entity(tableName = "salary")
data class SalaryEntity(
@PrimaryKey(autoGenerate = true)
val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.practicum.android.diploma.db.data.db.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "Vacancy")
@Entity(tableName = "vacancy")
data class VacancyEntity(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,9 @@ class JobDetailsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

viewModel.stateLiveData.observe(viewLifecycleOwner) {
viewModel.getState().observe(viewLifecycleOwner) {
initializeJobDetailsFragment(it)
}
viewModel.isFavorite.observe(viewLifecycleOwner) {
if (it) {
binding.jobHeartIcon.setImageResource(R.drawable.icon_heart_active)
} else {
binding.jobHeartIcon.setImageResource(R.drawable.icon_heart)
}
}

binding.jobShareIcon.setOnClickListener {
viewModel.shareVacancy()
Expand All @@ -74,31 +67,45 @@ class JobDetailsFragment : Fragment() {
}

private fun initializeJobDetailsFragment(vacancyDetailsState: VacancyDetailsState) {
setVisibilityOfMainElements(vacancyDetailsState)
when (vacancyDetailsState) {
is VacancyDetailsState.Content -> {
setVisibilityOfMainElements(vacancyDetailsState)

val vacancyDetails: VacancyDetails = vacancyDetailsState.data

binding.jobTitle.text = vacancyDetails.name

if (vacancyDetailsState is VacancyDetailsState.Content) {
val vacancyDetails: VacancyDetails = vacancyDetailsState.data
renderJobSalary(vacancyDetails)

binding.jobTitle.text = vacancyDetails.name
binding.jobCompany.text = vacancyDetails.employerInfo.employerName
binding.jobCity.text = vacancyDetails.employerInfo.area.name

renderJobSalary(vacancyDetails)
renderJobExperience(vacancyDetails)

binding.jobCompany.text = vacancyDetails.employerInfo.employerName
binding.jobCity.text = vacancyDetails.employerInfo.area.name
renderJobDetails(vacancyDetails)

renderJobExperience(vacancyDetails)
renderKeySkills(vacancyDetails)

renderJobDetails(vacancyDetails)
renderContacts(vacancyDetails)

renderKeySkills(vacancyDetails)
Glide.with(binding.jobImage)
.load(vacancyDetails.employerInfo.logo?.size240)
.transform(RoundedCorners(ROUNDED_CORNERS_SIZE))
.placeholder(R.drawable.placeholder_logo)
.into(binding.jobImage)
}

renderContacts(vacancyDetails)
is VacancyDetailsState.Favorite -> {
if (vacancyDetailsState.isFavorite) {
binding.jobHeartIcon.setImageResource(R.drawable.icon_heart_active)
} else {
binding.jobHeartIcon.setImageResource(R.drawable.icon_heart)
}
}

Glide.with(binding.jobImage)
.load(vacancyDetails.employerInfo.logo?.size240)
.transform(RoundedCorners(ROUNDED_CORNERS_SIZE))
.placeholder(R.drawable.placeholder_logo)
.into(binding.jobImage)
else -> {
setVisibilityOfMainElements(vacancyDetailsState)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package ru.practicum.android.diploma.details.presentation.state
import ru.practicum.android.diploma.details.domain.model.VacancyDetails

sealed class VacancyDetailsState {
class Content(val data: VacancyDetails) : VacancyDetailsState()
class Error(val message: String) : VacancyDetailsState()
data class Content(val data: VacancyDetails) : VacancyDetailsState()
data class Error(val message: String) : VacancyDetailsState()
data class Favorite(val isFavorite: Boolean) : VacancyDetailsState()
data object Loading : VacancyDetailsState()
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,10 @@ class VacancyDetailsViewModel(
private val detailsDbInteractor: DetailsDbInteractor,
private val vacancyId: String,
) : AndroidViewModel(application) {
private val _stateLiveData = MutableLiveData<VacancyDetailsState>(VacancyDetailsState.Loading)
val stateLiveData: LiveData<VacancyDetailsState> = _stateLiveData
private val _stateLiveData = MutableLiveData<VacancyDetailsState>()
fun getState(): LiveData<VacancyDetailsState> = _stateLiveData


private val _isFavorite = MutableLiveData<Boolean>()
val isFavorite: LiveData<Boolean> = _isFavorite

private var vacancyDetails: VacancyDetails? = null
private var isFavoriteJob: Job? = null
Expand All @@ -36,7 +35,7 @@ class VacancyDetailsViewModel(
processSearchVacancyResponse(it)
}
detailsDbInteractor.isExistsVacancy(vacancyId.toInt()).collect {
_isFavorite.value = it
_stateLiveData.postValue(VacancyDetailsState.Favorite(it))
}
}
}
Expand All @@ -45,7 +44,7 @@ class VacancyDetailsViewModel(
if (searchResult.data != null) {
val vacancyDetailsState = VacancyDetailsState.Content(searchResult.data)
vacancyDetails = vacancyDetailsState.data
_stateLiveData.value = vacancyDetailsState
_stateLiveData.postValue(vacancyDetailsState)
} else {
when (searchResult) {
is Resource.InternetConnectionError -> {
Expand All @@ -55,10 +54,10 @@ class VacancyDetailsViewModel(
}
if (isVacancyInFavorites) {
detailsDbInteractor.getVacancyById(vacancyId.toInt()).collect { vacancyDetails ->
_stateLiveData.value = VacancyDetailsState.Content(vacancyDetails!!)
_stateLiveData.postValue(VacancyDetailsState.Content(vacancyDetails!!))
}
} else {
_stateLiveData.value = VacancyDetailsState.Error(searchResult.message!!)
_stateLiveData.postValue(VacancyDetailsState.Error(searchResult.message!!))
}
}

Expand All @@ -70,10 +69,10 @@ class VacancyDetailsViewModel(
if (isVacancyInFavorites) {
detailsDbInteractor.deleteVacancy(vacancyId.toInt())
}
_stateLiveData.value = VacancyDetailsState.Error(searchResult.message!!)
_stateLiveData.postValue(VacancyDetailsState.Error(searchResult.message!!))
}

else -> _stateLiveData.value = VacancyDetailsState.Error(searchResult.message!!)
else -> _stateLiveData.postValue(VacancyDetailsState.Error(searchResult.message!!))
}
}
}
Expand All @@ -82,20 +81,18 @@ class VacancyDetailsViewModel(
if (isFavoriteJob?.isActive == true) return

isFavoriteJob = viewModelScope.launch {
if (_stateLiveData.value is VacancyDetailsState.Content) {
var isInFavoriteList = false
detailsDbInteractor.isExistsVacancy(vacancyId.toInt()).collect {
isInFavoriteList = it
}
if (isInFavoriteList) {
detailsDbInteractor.deleteVacancy(vacancyId.toInt())
_isFavorite.value = false
} else {
detailsDbInteractor.insertVacancy((_stateLiveData.value as VacancyDetailsState.Content).data)
_isFavorite.value = true
}
var isInFavoriteList = false
detailsDbInteractor.isExistsVacancy(vacancyId.toInt()).collect {
isInFavoriteList = it
}
if (isInFavoriteList) {
detailsDbInteractor.deleteVacancy(vacancyId.toInt())
_stateLiveData.postValue(VacancyDetailsState.Favorite(false))
} else {
Unit
if (vacancyDetails != null) {
detailsDbInteractor.insertVacancy(vacancyDetails!!)
_stateLiveData.postValue(VacancyDetailsState.Favorite(true))
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,6 @@ class FavoritesViewModel(private val getFavoritesListUseCase: GetFavoritesListUs
getFavoritesListUseCase.execute()
.collect { resource ->
when (resource) {
is Resource.Error -> {
mutableStateLiveData.postValue(FavoritesListState.Error)
}

is Resource.Success -> {
with(resource.data as List<VacancyDetails>) {
if (this.isEmpty()) {
Expand All @@ -49,7 +45,7 @@ class FavoritesViewModel(private val getFavoritesListUseCase: GetFavoritesListUs
}
}

else -> Unit
else -> mutableStateLiveData.postValue(FavoritesListState.Error)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,31 +68,23 @@ class FilterDictionariesRepositoryHHNetworkClientBased(private val client: HeadH
}
}

override suspend fun getAreasNormally(): Resource<List<Area>> {
val response = client.doRequest(HeadHunterRequest.Areas)
return if (response.resultCode == Response.SUCCESS) {
Resource.Success((response as AreasResponse).areasList.map { areaDto ->
FilterMapper.toArea(areaDto)
})
} else {
Resource.Error(areasErrorMessage)
}
}

override suspend fun getDetailedAreas(): Flow<Resource<List<Area>>> = flow {
val response = client.doRequest(HeadHunterRequest.Areas)
if (response.resultCode == Response.SUCCESS) {
val subAreasListOriginal = (response as AreasResponse).areasList.map { areaDto ->
FilterMapper.toArea(areaDto)
when (response.resultCode) {
Response.SUCCESS -> {
val subAreasListOriginal = (response as AreasResponse).areasList.map { areaDto ->
FilterMapper.toArea(areaDto)
}
val detailedAreaList = getMaximumDetailedArea(subAreasListOriginal)
val regionList = getRegionList(subAreasListOriginal)
val finalRegionList = regionList + detailedAreaList
val collator = Collator.getInstance()
val sortedDetailedList = finalRegionList.sortedWith(compareBy(collator) { it.name })
emit(Resource.Success(sortedDetailedList))
}
val detailedAreaList = getMaximumDetailedArea(subAreasListOriginal)
val regionList = getRegionList(subAreasListOriginal)
val finalRegionList = regionList + detailedAreaList
val collator = Collator.getInstance()
val sortedDetailedList = finalRegionList.sortedWith(compareBy(collator) { it.name })
emit(Resource.Success(sortedDetailedList))
} else {
emit(Resource.Error(areasErrorMessage))
Response.NOT_FOUND -> emit(Resource.NotFoundError(areasErrorMessage))
Response.NO_INTERNET -> emit(Resource.InternetConnectionError(areasErrorMessage))
else -> emit(Resource.Error(areasErrorMessage))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@ import ru.practicum.android.diploma.filter.domain.impl.FilterStorageRepository
import ru.practicum.android.diploma.filter.domain.model.AreaFilter
import ru.practicum.android.diploma.filter.domain.model.CountryFilter
import ru.practicum.android.diploma.filter.domain.model.FilterGeneral
import ru.practicum.android.diploma.filter.domain.model.IndustryDetailsFilterItem
import ru.practicum.android.diploma.filter.domain.model.IndustryFilter

class FilterStorageRepositoryImpl(private val filterStorage: FilterStorage) :
FilterStorageRepository {
private val finalFilterSaved = filterStorage.getAllFinalFilterParameters()
private var specificFilterSaved = filterStorage.getAllSavedParameter()
override fun saveAllFilterParameters(filter: FilterGeneral) {
filterStorage.saveFinalFilterParameters(filter)
}
Expand All @@ -31,31 +28,33 @@ class FilterStorageRepositoryImpl(private val filterStorage: FilterStorage) :
|| finalFilterSaved.hideNoSalaryItems)
}

override fun saveArea(area: AreaFilter) {
specificFilterSaved = specificFilterSaved.copy(area = area)
filterStorage.saveSpecificFilterParameters(specificFilterSaved)
override fun saveArea(area: AreaFilter?) {
val specificFilterSaved = filterStorage.getAllSavedParameter()
filterStorage.saveSpecificFilterParameters(specificFilterSaved.copy(area = area))
}

override fun saveCountry(country: CountryFilter) {
specificFilterSaved = specificFilterSaved.copy(country = country)
filterStorage.saveSpecificFilterParameters(specificFilterSaved)
override fun saveCountry(country: CountryFilter?) {
val specificFilterSaved = filterStorage.getAllSavedParameter()
filterStorage.saveSpecificFilterParameters(specificFilterSaved.copy(country = country))
}

override fun saveIndustry(industry: IndustryDetailsFilterItem) {
specificFilterSaved = specificFilterSaved.copy(
industry = IndustryFilter(industryId = industry.industryId, industryName = industry.industryName)
)
filterStorage.saveSpecificFilterParameters(specificFilterSaved)
override fun saveIndustry(industry: IndustryFilter?) {
val specificFilterSaved = filterStorage.getAllSavedParameter()
filterStorage.saveSpecificFilterParameters(specificFilterSaved.copy(industry = industry))
}

override fun saveExpectedSalary(salaryAmount: String) {
specificFilterSaved = specificFilterSaved.copy(expectedSalary = salaryAmount)
filterStorage.saveSpecificFilterParameters(specificFilterSaved)
val specificFilterSaved = filterStorage.getAllSavedParameter()
filterStorage.saveSpecificFilterParameters(specificFilterSaved.copy(expectedSalary = salaryAmount))
}

override fun saveHideNoSalaryItems(hideNoSalaryItems: Boolean) {
specificFilterSaved = specificFilterSaved.copy(hideNoSalaryItems = hideNoSalaryItems)
filterStorage.saveSpecificFilterParameters(specificFilterSaved)
val specificFilterSaved = filterStorage.getAllSavedParameter()
filterStorage.saveSpecificFilterParameters(specificFilterSaved.copy(hideNoSalaryItems = hideNoSalaryItems))

}

override fun clearAllSavedParameters() {
filterStorage.clearAllSavedParameters()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ interface FilterStorage {

fun clearAllFilterParameters()

fun clearAllSavedParameters()
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,9 @@ class SharedPrefsStorage(private val sharedPreferences: SharedPreferences, priva
val editor = sharedPreferences.edit()
editor.remove(FINAL_FILTER_KEY).apply()
}

override fun clearAllSavedParameters() {
val editor = sharedPreferences.edit()
editor.remove(SPECIFIC_FILTER_KEY).apply()
}
}
Loading

0 comments on commit 512e586

Please sign in to comment.