Skip to content

Commit

Permalink
[feat] #13 친구 목록 조회 dto 생성
Browse files Browse the repository at this point in the history
  • Loading branch information
Hyobeen-Park committed May 30, 2024
1 parent 2dafe7e commit 706e700
Show file tree
Hide file tree
Showing 16 changed files with 146 additions and 68 deletions.
15 changes: 7 additions & 8 deletions app/src/main/java/com/sopt/now/data/ApiFactory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,23 @@ import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFact
import com.sopt.now.BuildConfig.AUTH_BASE_URL
import com.sopt.now.BuildConfig.USER_API_URL
import com.sopt.now.data.service.AuthService
import com.sopt.now.data.service.UserService
import com.sopt.now.data.service.FriendService
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import retrofit2.Retrofit

object ApiFactory {
fun retrofit(url: String) : Retrofit =
Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()

fun retrofit(url: String): Retrofit =
Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()


inline fun <reified T, B> create(url: B): T = retrofit(url.toString()).create(T::class.java)
}

object ServicePool {
val authService = ApiFactory.create<AuthService, String>(AUTH_BASE_URL)
val userService = ApiFactory.create<UserService, String>(USER_API_URL)
val friendService = ApiFactory.create<FriendService, String>(USER_API_URL)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.sopt.now.data.datasource

import com.sopt.now.data.model.response.ResponseFriendsDto
import com.sopt.now.util.BaseResponse

interface FriendRemoteDataSource {
suspend fun getFriendsList(page: Int): BaseResponse<ResponseFriendsDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.sopt.now.data.datasourceimpl

import com.sopt.now.data.ServicePool
import com.sopt.now.data.datasource.FriendRemoteDataSource
import com.sopt.now.data.model.response.ResponseFriendsDto
import com.sopt.now.util.BaseResponse

class FriendRemoteDataSourceImpl : FriendRemoteDataSource {
private val friendService = ServicePool.friendService

override suspend fun getFriendsList(page: Int): BaseResponse<ResponseFriendsDto> =
friendService.getFriendsList(page = page)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.sopt.now.data.mapper

import com.sopt.now.data.model.response.ResponseFriendsDto.ResponseFriend
import com.sopt.now.domain.model.Friend

fun ResponseFriend.toFriendModel() =
Friend(
id = this.id,
email = this.email,
firstName = this.firstName,
lastName = this.lastName,
avatar = this.avatar
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.sopt.now.data.mapper

import com.sopt.now.data.model.response.ResponseFriendsDto
import com.sopt.now.domain.model.FriendsList

fun ResponseFriendsDto.toFriendsListModel() =
FriendsList(
friendsList = this.data.map { it.toFriendModel() }
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.sopt.now.data.model.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseFriendsDto(
@SerialName("page")
val page: Int,
@SerialName("per_page")
val perPage: Int,
@SerialName("total")
val total: Int,
@SerialName("total_pages")
val totalPages: Int,
@SerialName("data")
val data: List<ResponseFriend>,
@SerialName("support")
val support: ResponseFriendsListSupportDto,
) {
@Serializable
data class ResponseFriend(
@SerialName("id")
val id: Int,
@SerialName("email")
val email: String,
@SerialName("firstName")
val firstName: String,
@SerialName("lastName")
val lastName: String,
@SerialName("avatar")
val avatar: String,
)

@Serializable
data class ResponseFriendsListSupportDto(
@SerialName("url")
val url: String,
@SerialName("text")
val text: String,
)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sopt.now.data.repository

import com.sopt.now.data.datasource.FriendRemoteDataSource
import com.sopt.now.data.mapper.toFriendsListModel
import com.sopt.now.data.model.response.ResponseFriendsDto
import com.sopt.now.data.service.FriendService
import com.sopt.now.domain.model.FriendsList
import com.sopt.now.domain.repository.FriendRepository

class FriendRepositoryImpl(
private val friendRemoteDataSource: FriendRemoteDataSource
): FriendRepository {
override suspend fun getFriendsList(page: Int): Result<FriendsList> =
runCatching {
friendRemoteDataSource.getFriendsList(page = page).data.toFriendsListModel()
}
}
13 changes: 13 additions & 0 deletions app/src/main/java/com/sopt/now/data/service/FriendService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.sopt.now.data.service

import com.sopt.now.data.model.response.ResponseFriendsDto
import com.sopt.now.util.BaseResponse
import retrofit2.http.GET
import retrofit2.http.Query

interface FriendService {
@GET("api/users")
fun getFriendsList(
@Query("page") page: Int,
): BaseResponse<ResponseFriendsDto>
}
13 changes: 0 additions & 13 deletions app/src/main/java/com/sopt/now/data/service/UserService.kt

This file was deleted.

9 changes: 9 additions & 0 deletions app/src/main/java/com/sopt/now/domain/model/Friend.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.sopt.now.domain.model

data class Friend(
val id: Int,
val email: String,
val firstName: String,
val lastName: String,
val avatar: String,
)
5 changes: 5 additions & 0 deletions app/src/main/java/com/sopt/now/domain/model/FriendsList.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.sopt.now.domain.model

data class FriendsList(
val friendsList: List<Friend>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.sopt.now.domain.repository

import com.sopt.now.domain.model.FriendsList

interface FriendRepository {
suspend fun getFriendsList(page: Int): Result<FriendsList>
}
18 changes: 0 additions & 18 deletions app/src/main/java/com/sopt/now/presentation/Home/Friend/Friend.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.sopt.now.databinding.ItemFriendBinding
import com.sopt.now.domain.model.Friend

class FriendAdapter(): RecyclerView.Adapter<FriendViewHolder>() {
private var friendList: List<Friend> = emptyList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.sopt.now.presentation.Home.Friend
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.sopt.now.databinding.ItemFriendBinding
import com.sopt.now.domain.model.Friend

class FriendViewHolder(private val binding: ItemFriendBinding): RecyclerView.ViewHolder(binding.root){
fun onBind(friendData: Friend) {
Expand Down

0 comments on commit 706e700

Please sign in to comment.