Skip to content

Commit

Permalink
Merge pull request #145 from ElchinGasymov/iteration_4_review
Browse files Browse the repository at this point in the history
Iteration 4 review
  • Loading branch information
G-dev-ui authored Aug 26, 2024
2 parents 45d4357 + 8ccc171 commit 51edd36
Show file tree
Hide file tree
Showing 29 changed files with 206 additions and 188 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package ru.practicum.android.diploma.data.db

import androidx.room.Database
import androidx.room.RoomDatabase

import ru.practicum.android.diploma.data.db.dao.AreaDao
import ru.practicum.android.diploma.data.db.dao.KeySkillDao
import ru.practicum.android.diploma.data.db.dao.PhoneDao
Expand All @@ -11,14 +10,16 @@ import ru.practicum.android.diploma.data.db.entity.AreaEntity
import ru.practicum.android.diploma.data.db.entity.KeySkillEntity
import ru.practicum.android.diploma.data.db.entity.PhoneEntity
import ru.practicum.android.diploma.data.db.entity.VacancyEntity
import ru.practicum.android.diploma.data.db.entity.BdAllCrossEntity

@Database(
version = 3,
version = 4,
entities = [
VacancyEntity::class,
PhoneEntity::class,
KeySkillEntity::class,
AreaEntity::class,
BdAllCrossEntity::class
]
)
abstract class AppDatabase : RoomDatabase() {
Expand All @@ -29,4 +30,4 @@ abstract class AppDatabase : RoomDatabase() {
abstract fun keySkillDao(): KeySkillDao

abstract fun areaDao(): AreaDao
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,47 +40,47 @@ class ConverterIntoEntity {
}

fun intoPhoneEntity(vacancy: VacancyDetails): List<PhoneEntity> {
val listPhone = ArrayList<PhoneEntity>()
vacancy.contacts?.phones?.forEach { phonesModel ->
listPhone.add(
PhoneEntity(
idVacancy = vacancy.id,
cityCode = phonesModel.cityCode,
comment = phonesModel.comment,
countryCode = phonesModel.countryCode,
formatted = phonesModel.formatted,
number = phonesModel.number
return buildList {
vacancy.contacts?.phones?.forEach { phonesModel ->
add(
PhoneEntity(
idVacancy = vacancy.id,
cityCode = phonesModel.cityCode,
comment = phonesModel.comment,
countryCode = phonesModel.countryCode,
formatted = phonesModel.formatted,
number = phonesModel.number
)
)
)
}
}
return listPhone
}

fun intoKeySkillEntity(vacancy: VacancyDetails): List<KeySkillEntity> {
val listKey = ArrayList<KeySkillEntity>()
vacancy.keySkills?.forEach { keySkillsModel ->
listKey.add(
KeySkillEntity(
idVacancy = vacancy.id,
name = keySkillsModel.name
return buildList {
vacancy.keySkills?.forEach { keySkillsModel ->
add(
KeySkillEntity(
idVacancy = vacancy.id,
name = keySkillsModel.name
)
)
)
}
}
return listKey
}

fun intoAreaEntity(vacancy: VacancyDetails): List<AreaEntity> {
val listArea = ArrayList<AreaEntity>()
vacancy.area?.areas?.forEach { area ->
listArea.add(
AreaEntity(
idVacancy = vacancy.id,
idArea = area.id,
name = area.name,
countryId = area.countryId
return buildList {
vacancy.area?.areas?.forEach { area ->
add(
AreaEntity(
idVacancy = vacancy.id,
idArea = area.id,
name = area.name,
countryId = area.countryId
)
)
)
}
}
return listArea
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import ru.practicum.android.diploma.data.db.entity.AreaEntity

@Dao
interface AreaDao {
@Query("SELECT * FROM `area_table` WHERE `area_table`.`idVacancy` =:vacancyId")
suspend fun getSelectedArea(vacancyId: String): List<AreaEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertArea(areaEntity: List<AreaEntity>)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import ru.practicum.android.diploma.data.db.entity.KeySkillEntity

@Dao
interface KeySkillDao {
@Query("SELECT * FROM `key_skill_table` WHERE `key_skill_table`.`idVacancy` =:vacancyId")
suspend fun getSelectedKeySkill(vacancyId: String): List<KeySkillEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertKeySkill(keySkillEntity: List<KeySkillEntity>)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import ru.practicum.android.diploma.data.db.entity.PhoneEntity

@Dao
interface PhoneDao {
@Query("SELECT * FROM `phone_table` WHERE `phone_table`.`idVacancy` =:vacancyId")
suspend fun getSelectedPhone(vacancyId: String): List<PhoneEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertPhone(phoneEntity: List<PhoneEntity>)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,26 @@ import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import ru.practicum.android.diploma.data.db.entity.VacancyAndMany
import ru.practicum.android.diploma.data.db.entity.VacancyEntity

@Dao
interface VacancyDao {
@Query("SELECT * FROM `vacancy_table`")
suspend fun getSelectedVacancies(): List<VacancyEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertVacancy(vacancy: VacancyEntity)

@Query("DELETE FROM `vacancy_table` WHERE id=:vacancyId")
@Query("DELETE FROM `vacancy_table` WHERE id=:vacancyId ")
suspend fun deleteVacancy(vacancyId: String)

@Query("SELECT * FROM `vacancy_table` WHERE `vacancy_table`.id = :vacancyId")
suspend fun findVacancy(vacancyId: String): VacancyEntity

@Query("SELECT COUNT(`vacancy_table`.`id`) FROM `vacancy_table` WHERE `vacancy_table`.`id` = :vacancyId;")
suspend fun hasLike(vacancyId: String): Int

@Query("SELECT * FROM `vacancy_table` WHERE `vacancy_table`.id = :vacancyId")
suspend fun findVacancy(vacancyId: String): VacancyAndMany

@Transaction
@Query("SELECT * FROM vacancy_table")
suspend fun getSelectedVacancies(): List<VacancyAndMany>

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.room.PrimaryKey
@Entity(tableName = "area_table")
data class AreaEntity(
@PrimaryKey(autoGenerate = true)
val idDb: Int = 0,
val idAreaBd: Int = 0,
val idVacancy: String,
val idArea: String?,
val name: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.practicum.android.diploma.data.db.entity

import androidx.room.Entity

@Entity(primaryKeys = ["idVacancyBd", "idAreaBd", "idPhoneBd", "idKeySkillBd"])
data class BdAllCrossEntity(
val idVacancyBd: Int,
val idAreaBd: Int,
val idPhoneBd: Int,
val idKeySkillBd: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.room.PrimaryKey
@Entity(tableName = "key_skill_table")
data class KeySkillEntity(
@PrimaryKey(autoGenerate = true)
val idDb: Int = 0,
val idKeySkillBd: Int = 0,
val idVacancy: String,
val name: String?
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.room.PrimaryKey
@Entity(tableName = "phone_table")
data class PhoneEntity(
@PrimaryKey(autoGenerate = true)
val idDb: Int = 0,
val idPhoneBd: Int = 0,
val idVacancy: String,
val cityCode: String?,
val comment: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ru.practicum.android.diploma.data.db.entity

import androidx.room.Embedded
import androidx.room.Junction
import androidx.room.Relation

data class VacancyAndMany(
@Embedded val vacancy: VacancyEntity,
@Relation(
parentColumn = "idVacancyBd",
entityColumn = "idPhoneBd",
associateBy = Junction(BdAllCrossEntity::class)
)
val phones: List<PhoneEntity>,
@Relation(
parentColumn = "idVacancyBd",
entityColumn = "idAreaBd",
associateBy = Junction(BdAllCrossEntity::class)
)
val areas: List<AreaEntity>,
@Relation(
parentColumn = "idVacancyBd",
entityColumn = "idKeySkillBd",
)
val keySkills: List<KeySkillEntity>
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.room.PrimaryKey
@Entity(tableName = "vacancy_table")
data class VacancyEntity(
@PrimaryKey(autoGenerate = true)
val idDb: Int = 0,
val idVacancyBd: Int = 0,
val id: String,
val idAreaModel: String?,
val nameAreaModel: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ class FavouriteVacanciesRepositoryImpl(
val vacancy = vacanciesDatabase.vacancyDao().findVacancy(vacancyId)
if (vacancy != null) {
return converterIntoModel.intoVacancyDetail(
listPhone = vacanciesDatabase.phoneDao().getSelectedPhone(vacancyId),
listKey = vacanciesDatabase.keySkillDao().getSelectedKeySkill(vacancyId),
vacancyEntity = vacancy,
areaEntity = vacanciesDatabase.areaDao().getSelectedArea(vacancyId)
listPhone = vacancy.phones,
listKey = vacancy.keySkills,
vacancyEntity = vacancy.vacancy,
areaEntity = vacancy.areas
)
} else {
return null
Expand All @@ -47,8 +47,8 @@ class FavouriteVacanciesRepositoryImpl(
vacanciesDatabase.vacancyDao().getSelectedVacancies().forEach { vacancyEntity ->
listVacancy.add(
converterIntoModel.intoVacancy(
vacancy = vacancyEntity,
areas = vacanciesDatabase.areaDao().getSelectedArea(vacancyEntity.id)
vacancy = vacancyEntity.vacancy,
areas = vacancyEntity.areas
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package ru.practicum.android.diploma.data.impl

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import ru.practicum.android.diploma.data.dto.CountriesRequest
import ru.practicum.android.diploma.data.dto.CountriesResponse
import ru.practicum.android.diploma.data.dto.IndustriesRequest
Expand Down Expand Up @@ -35,7 +37,7 @@ class FilterRepositoryImpl(

else -> emit(responseToError(response))
}
}
}.flowOn(Dispatchers.IO)

override fun getRegions(id: String): Flow<ResponseData<List<Region>>> = flow {
when (val response = networkClient.doRequest(RegionsRequest(id))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,10 @@ class SharedPrefsRepositoryImpl(
) : SharedPrefsRepository {
override suspend fun readSharedPrefs(): SaveFiltersSharedPrefs? {
val json = sharedPreferences.getString(HISTORY, null) ?: return null
/*SaveFiltersSharedPrefs(
Industries("", "", false),
Country("", ""),
Region("", "", null),
"",
false
)*/
return gson.fromJson(json, SaveFiltersSharedPrefs::class.java)
}

override suspend fun writeSharedPrefs(filters: SaveFiltersSharedPrefs) {
/* val oldShared = readSharedPrefs()
val newShared = oldShared.copy(
industries = filters.industries ?: oldShared.industries,
country = filters.country ?: oldShared.country,
region = filters.region ?: oldShared.region,
currency = filters.currency ?: oldShared.currency,
noCurrency = filters.noCurrency
)*/
sharedPreferences.edit().putString(HISTORY, gson.toJson(filters)).apply()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import ru.practicum.android.diploma.data.network.RetrofitNetworkClient
const val HISTORY_MAIN = "historyMain"
const val BASE_URL = "https://api.hh.ru/"
val dataModule = module {
factory<NetworkClient> {
single<NetworkClient> {
RetrofitNetworkClient(
hhApiService = get(),
context = androidContext()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class FilterIndustryViewModel(
if (industry.id == industries.id) {
newList.add(industry.copy(isChecked = !industry.isChecked))
_hasSelected.postValue(!industry.isChecked)
selectedId = industries.id
if (!industry.isChecked) _selectedIndustry.postValue(industry)
} else {
newList.add(industry.copy(isChecked = false))
Expand Down Expand Up @@ -66,15 +67,14 @@ class FilterIndustryViewModel(

private fun whenList(industry: Industries?, list: ResponseData.Data<List<Industries>>) {
if (industry != null) {
val newList = ArrayList<Industries>()
list.value.forEach { industryItem ->
if (industryItem.id == industry.id) {
newList.add(industryItem.copy(isChecked = true))
_selectedIndustry.postValue(industryItem)
val newList = list.value.map {
if (industry.id == it.id) {
_selectedIndustry.postValue(it)
_hasSelected.postValue(true)
selectedId = industryItem.id
selectedId = it.id
Industries(it.id, it.name, true)
} else {
newList.add(industryItem)
it
}
}
_industries.postValue(newList)
Expand All @@ -84,19 +84,20 @@ class FilterIndustryViewModel(
}

fun search(request: String) {
val sortedList = mutableListOf<Industries>()
val newSortedList = mutableListOf<Industries>()
sortedList.addAll(listOfIndustries)
sortedList.removeAll {
!it.name.contains(request, true)
val sortedList = listOfIndustries.mapNotNull {
if (it.name.contains(request, true)) {
it
} else {
null
}
}
sortedList.forEach {
val newSortedList = sortedList.map {
if (it.id == selectedId) {
newSortedList.add(Industries(it.id, it.name, true))
_selectedIndustry.postValue(it)
_hasSelected.postValue(true)
Industries(it.id, it.name, true)
} else {
newSortedList.add(it)
it
}
}
if (sortedList.isNotEmpty()) {
Expand All @@ -105,7 +106,6 @@ class FilterIndustryViewModel(
_industries.postValue(newSortedList)
_error.postValue(ResponseError.NOT_FOUND)
}

}
}

Loading

0 comments on commit 51edd36

Please sign in to comment.