Skip to content

Commit

Permalink
[feat] #46 오늘 할일/밀린 공부 + 정렬 API 연동
Browse files Browse the repository at this point in the history
  • Loading branch information
beom84 committed Jan 19, 2025
1 parent 5cd9a69 commit b685614
Show file tree
Hide file tree
Showing 12 changed files with 520 additions and 255 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.android.bbangzip.data.datasource.remote

import org.android.bbangzip.data.dto.response.ResponseTodayOrdersDto
import org.android.bbangzip.data.service.PieceService
import org.android.bbangzip.data.util.base.BaseResponse
import javax.inject.Inject

class TodayOrdersRemoteDataSource @Inject
constructor(
private val pieceService: PieceService,
) {
suspend fun getTodoInfo(
area: String,
year: Int,
semester: String,
sortOption: String
): BaseResponse<ResponseTodayOrdersDto> = pieceService.getTodoInfo(
area = area,
year = year,
semester = semester,
sortOption = sortOption
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.android.bbangzip.data.dto.request

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

@Serializable
data class RequestTodayOrdersDto(
@SerialName("area")
val area: String,
@SerialName("year")
val year: Int,
@SerialName("semester")
val semester: String,
@SerialName("sortOption")
val sortOption: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.android.bbangzip.data.dto.response


import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.android.bbangzip.domain.model.ToDoCardEntity
import org.android.bbangzip.domain.model.ToDoInfoEntity

@Serializable
data class ResponseTodayOrdersDto(
@SerialName("completeCount")
val completeCount: Int,
@SerialName("todoPieceStoList")
val todayList: List<TodoInfo>,
@SerialName("pendingCount")
val pendingCount: Int,
@SerialName("toadyCount")
val todayCount: Int,
) {
fun toTodoInfoEntity() =
ToDoInfoEntity(
todoList = todayList.map { todoItem ->
todoItem.toTodoCardEntity()
},
pendingCount = pendingCount,
remainingStudyCount = todayCount,
completeCount = completeCount
)
}


@Serializable
data class TodoInfo(
@SerialName("deadline")
val deadline: String,
@SerialName("examName")
val examName: String,
@SerialName("finishPage")
val finishPage: Int,
@SerialName("isFinished")
val isFinished: Boolean,
@SerialName("pieceId")
val pieceId: Int,
@SerialName("remainingDays")
val remainingDays: Int,
@SerialName("startPage")
val startPage: Int,
@SerialName("studyContents")
val studyContents: String,
@SerialName("subjectName")
val subjectName: String
) {
fun toTodoCardEntity() =
ToDoCardEntity(
pieceId = pieceId,
subjectName = subjectName,
examName = examName,
studyContents = studyContents,
startPage = startPage,
finishPage = finishPage,
deadline = deadline,
remainingDays = remainingDays,
isFinished = isFinished
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.android.bbangzip.data.repositoryImpl

import org.android.bbangzip.data.datasource.remote.TodayOrdersRemoteDataSource
import org.android.bbangzip.data.dto.request.RequestTodayOrdersDto
import org.android.bbangzip.domain.model.ToDoInfoEntity
import org.android.bbangzip.domain.repository.remote.PieceRepository
import javax.inject.Inject

class PieceRepositoryImpl
@Inject
constructor(
private val todayOrdersRemoteDateSource: TodayOrdersRemoteDataSource,
) : PieceRepository {
override suspend fun getTodoInfo(
area: String,
year: Int,
semester: String,
sortOption: String
): Result<ToDoInfoEntity> =
runCatching {
todayOrdersRemoteDateSource.getTodoInfo(
area = area,
year = year,
semester = semester,
sortOption = sortOption
).data.toTodoInfoEntity()
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.android.bbangzip.data.service

import org.android.bbangzip.data.dto.request.RequestTodayOrdersDto
import org.android.bbangzip.data.dto.response.ResponseTodayOrdersDto
import org.android.bbangzip.data.util.base.BaseResponse
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Query

interface PieceService {
@GET("/api/v1/pieces/today/orders")
suspend fun getTodoInfo(
@Query("area") area: String,
@Query("year") year: Int,
@Query("semester") semester: String,
@Query("sortOption") sortOption: String
): BaseResponse<ResponseTodayOrdersDto>
}
6 changes: 6 additions & 0 deletions app/src/main/java/org/android/bbangzip/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.android.bbangzip.data.repositoryImpl.DummyRepositoryImpl
import org.android.bbangzip.data.repositoryImpl.PieceRepositoryImpl
import org.android.bbangzip.data.repositoryImpl.UserRepositoryImpl
import org.android.bbangzip.domain.repository.local.UserRepository
import org.android.bbangzip.domain.repository.remote.DummyRepository
import org.android.bbangzip.domain.repository.remote.PieceRepository
import javax.inject.Singleton

@Module
Expand All @@ -20,4 +22,8 @@ abstract class RepositoryModule {
@Binds
@Singleton
abstract fun bindsUserRepository(repositoryImpl: UserRepositoryImpl): UserRepository

@Binds
@Singleton
abstract fun bindsPieceRepository(repositoryImpl: PieceRepositoryImpl): PieceRepository
}
8 changes: 8 additions & 0 deletions app/src/main/java/org/android/bbangzip/di/ServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.android.bbangzip.data.service.DummyService
import org.android.bbangzip.data.service.PieceService
import retrofit2.Retrofit
import javax.inject.Singleton

Expand All @@ -17,4 +18,11 @@ object ServiceModule {
@BbangZip retrofit: Retrofit,
): DummyService =
retrofit.create(DummyService::class.java)

@Provides
@Singleton
fun providePieceService(
@BbangZip retrofit: Retrofit,
): PieceService =
retrofit.create(PieceService::class.java)
}
7 changes: 7 additions & 0 deletions app/src/main/java/org/android/bbangzip/di/UseCaseModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.android.bbangzip.domain.repository.remote.DummyRepository
import org.android.bbangzip.domain.repository.remote.PieceRepository
import org.android.bbangzip.domain.usecase.FetchDummyUseCase
import org.android.bbangzip.domain.usecase.GetToInfoUseCase
import javax.inject.Singleton

@Module
Expand All @@ -15,4 +17,9 @@ class UseCaseModule {
@Singleton
fun providesDummyFetchUseCase(dummyRepository: DummyRepository): FetchDummyUseCase =
FetchDummyUseCase(dummyRepository = dummyRepository)

@Provides
@Singleton
fun providesTodoInfoFetchUseCase(pieceRepository: PieceRepository): GetToInfoUseCase =
GetToInfoUseCase(pieceRepository = pieceRepository)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.android.bbangzip.domain.repository.remote

import org.android.bbangzip.data.dto.request.RequestTodayOrdersDto
import org.android.bbangzip.domain.model.ToDoInfoEntity

interface PieceRepository {
suspend fun getTodoInfo(
area: String,
year: Int,
semester: String,
sortOption: String
): Result<ToDoInfoEntity>
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.android.bbangzip.domain.usecase

import org.android.bbangzip.domain.model.ToDoInfoEntity
import org.android.bbangzip.domain.repository.remote.PieceRepository

class GetToInfoUseCase(
private val pieceRepository: PieceRepository
) {
suspend operator fun invoke(
area: String,
year: Int,
semester: String,
sortOption: String
): Result<ToDoInfoEntity> =
pieceRepository.getTodoInfo(
area = area,
year = year,
semester = semester,
sortOption = sortOption
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class TodoContract {
val selectedFilterItem: ToDoFilterType = ToDoFilterType.RECENT,
val selectedItemList: List<Int> = listOf(),
val revertCompleteBottomSheetState: Boolean = false,
val screenType: ToDoScreenType = ToDoScreenType.EMPTY,
val screenType: ToDoScreenType = ToDoScreenType.DEFAULT,
) : BaseContract.State, Parcelable {
override fun toParcelable(): Parcelable = this
}
Expand Down
Loading

0 comments on commit b685614

Please sign in to comment.