Skip to content

Commit

Permalink
Merge pull request #53 from PawWithU/feature/notice_detail
Browse files Browse the repository at this point in the history
feat/notice_detail: 이동봉사 공고 상세 화면 api 연결
  • Loading branch information
kang9366 authored Nov 22, 2023
2 parents a4965d9 + 5026384 commit f5c3e8c
Show file tree
Hide file tree
Showing 29 changed files with 355 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import com.kusitms.connectdog.core.data.api.model.Response
import com.kusitms.connectdog.core.data.api.model.ReviewResponseItem
import com.kusitms.connectdog.core.data.api.model.SocialLoginBody
import com.kusitms.connectdog.core.data.api.model.VolunteerResponse
import com.kusitms.connectdog.core.data.api.model.intermediator.IntermediatorInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.AnnouncementHomeResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.AnnouncementSearchResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.ApplicationCompletedResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.ApplicationInProgressResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.ApplicationWaitingResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BadgeResponse
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.NoticeDetailResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.UserInfoResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
Expand Down Expand Up @@ -111,4 +113,25 @@ internal interface ApiService {

@GET("/volunteers/my/bookmarks")
suspend fun getBookmarkData(): List<BookmarkResponseItem>

/**
* 이동봉사자 > 공고 상세조회
*/
@GET("/volunteers/posts/{postId}")
suspend fun getNoticeDetail(
@Path("postId") postId: Long
): NoticeDetailResponseItem

/**
* 이동봉사자 > 공고 상세조회 > 중개자 프로필 조회
*/
@GET("/volunteers/intermediaries/{intermediaryId}")
suspend fun getIntermediatorInfo(
@Path("intermediaryId") intermediaryId: Long
): IntermediatorInfoResponseItem

@GET("/volunteers/intermediaries/{intermediaryId}/posts")
suspend fun getIntermediatorReview(
@Path("intermediaryId") intermediaryId: Long
): List<BookmarkResponseItem>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.kusitms.connectdog.core.data.api.model.intermediator

data class IntermediatorInfoResponseItem(
val completedPostCount: Long,
val contact: String,
val dogStatusCount: Long,
val guide: String,
val intro: String,
val name: String,
val profileImage: String,
val reviewCount: Long,
val url: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kusitms.connectdog.core.data.api.model.volunteer

data class NoticeDetailResponseItem(
val arrivalLoc: String,
val content: String,
val departureLoc: String,
val dogGender: String,
val dogName: String,
val dogSize: String,
val dogWeight: Double,
val endDate: String,
val images: List<String>,
val intermediaryId: Int,
val intermediaryName: String,
val intermediaryProfileImage: String,
val isBookmark: Boolean,
val isKennel: Boolean,
val mainImage: String,
val pickUpTime: String,
val postId: Int,
val postStatus: String,
val specifics: String?,
val startDate: String
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.kusitms.connectdog.core.data.di

import com.kusitms.connectdog.core.data.api.ApiService
import com.kusitms.connectdog.core.data.repository.DetailRepository
import com.kusitms.connectdog.core.data.repository.DetailRepositoryImpl
import com.kusitms.connectdog.core.data.repository.HomeRepository
import com.kusitms.connectdog.core.data.repository.HomeRepositoryImpl
import com.kusitms.connectdog.core.data.repository.LoginRepository
Expand Down Expand Up @@ -42,4 +44,10 @@ internal class VolunteerDataModule {
fun provideMyPageRepository(apiService: ApiService): MyPageRepository {
return MyPageRepositoryImpl(apiService)
}

@Provides
@Singleton
fun provideNoticeRepository(apiService: ApiService): DetailRepository {
return DetailRepositoryImpl(apiService)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ internal fun AnnouncementHomeResponseItem.toData(): Announcement {
location = "${this.departureLoc}${this.arrivalLoc}",
date = dateRangeFormat(startDate, endDate),
organization = this.intermediaryName,
hasKennel = this.isKennel
hasKennel = this.isKennel,
postId = this.postId
)
}

Expand All @@ -21,6 +22,7 @@ internal fun AnnouncementSearchResponseItem.toData(): Announcement {
location = "${this.departureLoc}${this.arrivalLoc}",
date = dateRangeFormat(startDate, endDate),
organization = this.intermediaryName,
hasKennel = this.isKennel
hasKennel = this.isKennel,
postId = this.postId
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.model.intermediator.IntermediatorInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.NoticeDetailResponseItem

interface DetailRepository {
suspend fun getNoticeDetail(postId: Long): NoticeDetailResponseItem
suspend fun getIntermediatorInfo(intermediaryId: Long): IntermediatorInfoResponseItem
suspend fun getIntermediatorReview(intermediaryId: Long): List<BookmarkResponseItem>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.ApiService
import com.kusitms.connectdog.core.data.api.model.intermediator.IntermediatorInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.NoticeDetailResponseItem
import javax.inject.Inject

internal class DetailRepositoryImpl @Inject constructor(
private val api: ApiService
) : DetailRepository {
override suspend fun getNoticeDetail(postId: Long): NoticeDetailResponseItem {
return api.getNoticeDetail(postId)
}

override suspend fun getIntermediatorInfo(intermediaryId: Long): IntermediatorInfoResponseItem {
return api.getIntermediatorInfo(intermediaryId)
}

override suspend fun getIntermediatorReview(intermediaryId: Long): List<BookmarkResponseItem> {
return api.getIntermediatorReview(intermediaryId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ private fun ListForUserItemPreivew() {
ConnectDogTheme {
ListForUserItem(
imageUrl = "",
announcement = Announcement("", "이동봉사 위치", "YY.mm.dd(요일)", "단체이름", false),
announcement = Announcement("", "이동봉사 위치", "YY.mm.dd(요일)", "단체이름", false, -1),
isValid = false
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ data class Announcement(
val location: String,
val date: String,
val organization: String,
val hasKennel: Boolean
val hasKennel: Boolean,
val postId: Int
)
1 change: 1 addition & 0 deletions feature/home/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ dependencies {
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.runtime.livedata)

// test
implementation(libs.androidx.junit.ktx)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.kusitms.connectdog.feature.home

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kusitms.connectdog.core.data.api.model.volunteer.NoticeDetailResponseItem
import com.kusitms.connectdog.core.data.repository.DetailRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class DetailViewModel @Inject constructor(
private val detailRepository: DetailRepository
) : ViewModel() {
private val _detail = MutableLiveData<NoticeDetailResponseItem>()
val detail: LiveData<NoticeDetailResponseItem> = _detail

fun initNoticeDetail(postId: Long) {
viewModelScope.launch {
val response = detailRepository.getNoticeDetail(postId)
_detail.postValue(response)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.kusitms.connectdog.feature.home

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kusitms.connectdog.core.data.api.model.intermediator.IntermediatorInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.repository.DetailRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class IntermediatorProfileViewModel @Inject constructor(
private val detailRepository: DetailRepository
) : ViewModel() {
private val _intermediator = MutableLiveData<IntermediatorInfoResponseItem>()
val intermediator: LiveData<IntermediatorInfoResponseItem> = _intermediator

private val _review = MutableLiveData<List<BookmarkResponseItem>>()
val notice: LiveData<List<BookmarkResponseItem>> = _review

fun initIntermediatorProfile(intermediaryId: Long) {
viewModelScope.launch {
val response = detailRepository.getIntermediatorInfo(intermediaryId)
_intermediator.postValue(response)
}
}

fun initIntermediatorReview(intermediaryId: Long) {
viewModelScope.launch {
val response = detailRepository.getIntermediatorReview(intermediaryId)
_review.postValue(response)

Log.d("testtt", response.toString())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ fun NavController.navigateReview() {
navigate(HomeRoute.review)
}

fun NavController.navigateDetail() {
navigate(HomeRoute.detail)
fun NavController.navigateDetail(postId: Long) {
navigate("${HomeRoute.detail}/$postId")
}

fun NavController.navigateCertification() {
Expand All @@ -69,8 +69,8 @@ fun NavController.navigateComplete() {
navigate(HomeRoute.complete)
}

fun NavController.navigateIntermediatorProfile() {
navigate(HomeRoute.intermediatorProfile)
fun NavController.navigateIntermediatorProfile(intermediaryId: Long) {
navigate("${HomeRoute.intermediatorProfile}/$intermediaryId")
}

fun NavController.navigateNotification() {
Expand All @@ -84,11 +84,11 @@ fun NavGraphBuilder.homeNavGraph(
onNavigateToFilterSearch: () -> Unit,
onNavigateToFilter: (Filter) -> Unit,
onNavigateToReview: () -> Unit,
onNavigateToDetail: () -> Unit,
onNavigateToDetail: (Long) -> Unit,
onNavigateToCertification: () -> Unit,
onNavigateToApply: () -> Unit,
onNavigateToComplete: () -> Unit,
onNavigateToIntermediatorProfile: () -> Unit,
onNavigateToIntermediatorProfile: (Long) -> Unit,
onNavigateToNotification: () -> Unit,
onShowErrorSnackBar: (throwable: Throwable?) -> Unit
) {
Expand Down Expand Up @@ -156,12 +156,19 @@ fun NavGraphBuilder.homeNavGraph(
onBackClick = onBackClick
)
}

composable(route = HomeRoute.detail) {
composable(
route = "${HomeRoute.detail}/{postId}",
arguments = listOf(
navArgument("postId") {
type = NavType.LongType
}
)
) {
DetailScreen(
onBackClick = onBackClick,
onCertificationClick = onNavigateToCertification,
onIntermediatorProfileClick = onNavigateToIntermediatorProfile
onIntermediatorProfileClick = onNavigateToIntermediatorProfile,
postId = it.arguments!!.getLong("postId")
)
}

Expand All @@ -185,9 +192,17 @@ fun NavGraphBuilder.homeNavGraph(
)
}

composable(route = HomeRoute.intermediatorProfile) {
composable(
route = "${HomeRoute.intermediatorProfile}/{intermediaryId}",
arguments = listOf(
navArgument("intermediaryId") {
type = NavType.LongType
}
)
) {
IntermediatorProfileScreen(
onBackClick = onBackClick
onBackClick = onBackClick,
intermediaryId = it.arguments!!.getLong("intermediaryId")
)
}

Expand Down
Loading

0 comments on commit f5c3e8c

Please sign in to comment.