Skip to content

Commit 7f8fb6b

Browse files
committed
feat: shelterlist Roomdb에 저장
1 parent a420995 commit 7f8fb6b

File tree

14 files changed

+193
-80
lines changed

14 files changed

+193
-80
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.daepiro.numberoneproject.data.datasources
2+
3+
import androidx.room.Dao
4+
import androidx.room.Insert
5+
import androidx.room.OnConflictStrategy
6+
import androidx.room.Query
7+
import com.daepiro.numberoneproject.data.model.ShelterEntity
8+
9+
@Dao
10+
interface ShelterDAO {
11+
@Query("SELECT * FROM shelters")
12+
suspend fun getAllShelters(): List<ShelterEntity>
13+
14+
@Insert(onConflict = OnConflictStrategy.REPLACE)
15+
suspend fun saveShelters(shelters: List<ShelterEntity>)
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.daepiro.numberoneproject.data.datasources
2+
3+
import android.content.Context
4+
import androidx.room.Database
5+
import androidx.room.Room
6+
import androidx.room.RoomDatabase
7+
import com.daepiro.numberoneproject.data.model.ShelterEntity
8+
9+
@Database(entities = [ShelterEntity::class], version = 1)
10+
abstract class ShelterDatabase: RoomDatabase() {
11+
abstract fun shelterDao(): ShelterDAO
12+
}
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.daepiro.numberoneproject.data.model
22

3-
data class ShelterData(
4-
val id: Int,
5-
val facilityFullName:String,
6-
val fullAddress: String,
7-
val city: String,
8-
val district: String,
9-
val dong: String,
10-
val shelterType: String
11-
)
3+
import androidx.room.Entity
4+
import androidx.room.PrimaryKey
125

6+
@Entity(tableName = "shelters")
7+
data class ShelterEntity(
8+
val fullAddress: String = "",
9+
val city: String = "",
10+
val district: String = "",
11+
val dong: String="",
12+
) {
13+
@PrimaryKey(autoGenerate = true) var id: Int=0
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.daepiro.numberoneproject.data.model
2+
3+
data class ShelterUrlResponse(
4+
val link: String =""
5+
)

app/src/main/java/com/daepiro/numberoneproject/data/network/ApiService.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ import com.daepiro.numberoneproject.data.model.LoginTokenResponse
3030
import com.daepiro.numberoneproject.data.model.OnlineResponse
3131
import com.daepiro.numberoneproject.data.model.RegisterFamilyResponse
3232
import com.daepiro.numberoneproject.data.model.SendSafetyResponse
33-
import com.daepiro.numberoneproject.data.model.ShelterData
33+
import com.daepiro.numberoneproject.data.model.ShelterEntity
3434
import com.daepiro.numberoneproject.data.model.ShelterListResponse
3535
import com.daepiro.numberoneproject.data.model.ShelterRequestBody
36+
import com.daepiro.numberoneproject.data.model.ShelterUrlResponse
3637
import com.daepiro.numberoneproject.data.model.SupportRequest
3738
import com.daepiro.numberoneproject.data.model.SupportResponse
3839
import com.daepiro.numberoneproject.data.model.TokenRequestBody
@@ -92,11 +93,17 @@ interface ApiService {
9293
@Body body: DisasterRequestBody
9394
): ApiResult<DisasterResponse>
9495

95-
//대피소 전체 데이터 가진 링크 가져오기
96+
//대피소 전체 데이터 가진 json파일
97+
//곧 삭제될 코드
9698
@GET("/api/admin/address-info")
9799
suspend fun getShelters(
98100
@Header("Authorization") token:String
99-
): ApiResult<List<ShelterData>>
101+
): ApiResult<List<ShelterEntity>>
102+
103+
@GET("/api/shelters/init")
104+
suspend fun getShelterFromUrl(
105+
@Header("Authorization") token:String
106+
): ApiResult<ShelterUrlResponse>
100107

101108

102109
// 후원 목록 최신순 조회
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.daepiro.numberoneproject.data.repositoryimpl
2-
3-
import com.daepiro.numberoneproject.data.model.ShelterData
2+
import com.daepiro.numberoneproject.data.model.ShelterUrlResponse
43
import com.daepiro.numberoneproject.data.network.ApiResult
54
import com.daepiro.numberoneproject.data.network.ApiService
65
import com.daepiro.numberoneproject.domain.repository.GetShelterRepository
@@ -9,8 +8,8 @@ import javax.inject.Inject
98
class GetShelterRepositoryImpl @Inject constructor(
109
private val service: ApiService,
1110
): GetShelterRepository {
12-
override suspend fun getShelterDaraLocal(token: String): ApiResult<List<ShelterData>>{
13-
return service.getShelters(token)
11+
override suspend fun getShelterUrl(token: String): ApiResult<ShelterUrlResponse> {
12+
return service.getShelterFromUrl(token)
1413
}
1514

1615
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.daepiro.numberoneproject.domain.repository
22

3-
import com.daepiro.numberoneproject.data.model.ShelterData
3+
import com.daepiro.numberoneproject.data.model.ShelterUrlResponse
44
import com.daepiro.numberoneproject.data.network.ApiResult
55

66
interface GetShelterRepository {
7-
suspend fun getShelterDaraLocal(token: String) : ApiResult<List<ShelterData>>
7+
suspend fun getShelterUrl(token: String): ApiResult<ShelterUrlResponse>
88
}
Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,14 @@
11
package com.daepiro.numberoneproject.domain.usecase
2-
3-
import android.util.Log
4-
import com.daepiro.numberoneproject.data.model.ShelterData
2+
import com.daepiro.numberoneproject.data.model.ShelterUrlResponse
53
import com.daepiro.numberoneproject.data.network.ApiResult
6-
import com.daepiro.numberoneproject.data.network.onSuccess
74
import com.daepiro.numberoneproject.domain.repository.GetShelterRepository
8-
import com.google.gson.Gson
9-
import com.google.gson.JsonSyntaxException
10-
import java.io.File
11-
import java.io.IOException
125
import javax.inject.Inject
136

147
class GetShelterUseCase @Inject constructor(
15-
private val getShelterRepository: GetShelterRepository
8+
private val getShelterRepository: GetShelterRepository,
9+
1610
) {
17-
suspend operator fun invoke(token:String, file: File): ApiResult<List<ShelterData>>{
18-
return try{
19-
val response = getShelterRepository.getShelterDaraLocal(token)
20-
response.onSuccess { data->
21-
try{
22-
val json = Gson().toJson(data)
23-
file.writeText(json)
24-
Log.d("GetShelterUseCase", "저장성공")
25-
}catch (ioException : IOException){
26-
Log.e("GetShelterUseCase", "파일쓰기 실패 $ioException")
27-
ApiResult.Failure.NetworkError(ioException)
28-
}
29-
catch (jsonSyntaxException: JsonSyntaxException){
30-
Log.e("GetShelterUseCase", "json 파싱 실패 $jsonSyntaxException")
31-
ApiResult.Failure.UnknownApiError(jsonSyntaxException)
32-
}
33-
}
34-
response
35-
}catch (e:Exception){
36-
Log.e("GetShelterUseCase", "예외발생 $e")
37-
ApiResult.Failure.UnknownApiError(e)
38-
}
11+
suspend operator fun invoke(token:String): ApiResult<ShelterUrlResponse> {
12+
return getShelterRepository.getShelterUrl(token)
3913
}
4014
}

app/src/main/java/com/daepiro/numberoneproject/presentation/di/AppModule.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.daepiro.numberoneproject.presentation.di
22

33
import android.content.Context
4+
import androidx.room.Room
45
import com.daepiro.numberoneproject.BuildConfig
6+
import com.daepiro.numberoneproject.data.datasources.ShelterDatabase
57
import com.daepiro.numberoneproject.data.network.ApiResultCallAdapterFactory
68
import com.daepiro.numberoneproject.data.network.ApiService
79
import com.daepiro.numberoneproject.data.repositoryimpl.AlarmRepositoryImpl
@@ -131,5 +133,22 @@ object AppModule {
131133
fun provideFilesDir(@ApplicationContext context: Context): File {
132134
return context.filesDir
133135
}
136+
}
137+
138+
@InstallIn(SingletonComponent::class)
139+
@Module
140+
object DBModule {
141+
@Singleton
142+
@Provides
143+
fun provideAppDatabase(@ApplicationContext context: Context) =
144+
Room.databaseBuilder(
145+
context,
146+
ShelterDatabase::class.java,
147+
"shelter.db"
148+
).fallbackToDestructiveMigration()
149+
.build()
150+
151+
@Provides
152+
fun provideShelterDao(appDatabase: ShelterDatabase) = appDatabase.shelterDao()
153+
}
134154

135-
}

app/src/main/java/com/daepiro/numberoneproject/presentation/view/home/HomeFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
101101

102102
override fun setupInit() {
103103
//로컬에 대피소 저장하기 위해 호출
104-
shelterVM.getSheltersetLocal()
104+
//shelterVM.getSheltersetLocal()
105105

106106
requestPermission()
107107
setSheltersViewPager()

0 commit comments

Comments
 (0)