Skip to content

Commit

Permalink
feat: cập nhật flip card status cho flashcard
Browse files Browse the repository at this point in the history
- sửa lại response cập nhật starred
- sửa đổi giao diện đẹp và logic hơn
  • Loading branch information
dieunn committed Oct 22, 2024
1 parent 9e96f4c commit b00068e
Show file tree
Hide file tree
Showing 23 changed files with 629 additions and 174 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.pwhs.quickmem.core.data

enum class FlipCardStatus {
NONE, STILL_LEARNING, KNOW
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.pwhs.quickmem.data.dto.flashcard

import com.google.gson.annotations.SerializedName
import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class FlashCardResponseDto(
Expand All @@ -20,6 +21,8 @@ data class FlashCardResponseDto(
val studySetId: String,
@SerializedName("rating")
val rating: String = Rating.NOT_STUDIED.name,
@SerializedName("flipStatus")
val flipStatus: String = FlipCardStatus.NONE.name,
@SerializedName("isStarred")
val isStarred: Boolean,
@SerializedName("createdAt")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.pwhs.quickmem.data.dto.flashcard

import com.google.gson.annotations.SerializedName

data class FlipFlashCardDto(
@SerializedName("flipStatus")
val flipStatus: String
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.pwhs.quickmem.data.dto.flashcard

import com.google.gson.annotations.SerializedName
import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class StudySetFlashCardResponseDto(
Expand All @@ -18,6 +19,8 @@ data class StudySetFlashCardResponseDto(
val explanation: String?,
@SerializedName("rating")
val rating: String = Rating.NOT_STUDIED.name,
@SerializedName("flipStatus")
val flipStatus: String = FlipCardStatus.NONE.name,
@SerializedName("isStarred")
val isStarred: Boolean,
@SerializedName("createdAt")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.pwhs.quickmem.data.dto.flashcard

import com.google.gson.annotations.SerializedName
import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class UpdateFlashCardResponseDto(
@SerializedName("id")
val id: String,
@SerializedName("message")
val message: String,
@SerializedName("isStarred")
val isStarred: Boolean? = false,
@SerializedName("rating")
val rating: String? = Rating.NOT_STUDIED.name,
@SerializedName("flipStatus")
val flipStatus: String? = FlipCardStatus.NONE.name,
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ fun StudySetFlashCardResponseDto.toModel() = StudySetFlashCardResponseModel(
hint = hint,
explanation = explanation,
rating = rating,
flipStatus = flipStatus,
createdAt = createdAt,
updatedAt = updatedAt,
isStarred = isStarred
Expand All @@ -24,6 +25,7 @@ fun StudySetFlashCardResponseModel.toDto() = StudySetFlashCardResponseDto(
hint = hint,
explanation = explanation,
rating = rating,
flipStatus = flipStatus,
createdAt = createdAt,
updatedAt = updatedAt,
isStarred = isStarred
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.pwhs.quickmem.data.mapper.flashcard

import com.pwhs.quickmem.data.dto.flashcard.UpdateFlashCardResponseDto
import com.pwhs.quickmem.domain.model.flashcard.UpdateFlashCardResponseModel

fun UpdateFlashCardResponseDto.toModel() = UpdateFlashCardResponseModel(
id = id,
message = message,
isStarred = isStarred,
rating = rating,
flipStatus = flipStatus,
)

fun UpdateFlashCardResponseModel.toDto() = UpdateFlashCardResponseDto(
id = id,
message = message,
isStarred = isStarred,
rating = rating,
flipStatus = flipStatus,
)
11 changes: 10 additions & 1 deletion app/src/main/java/com/pwhs/quickmem/data/remote/ApiService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import com.pwhs.quickmem.data.dto.auth.VerifyEmailRequestDto
import com.pwhs.quickmem.data.dto.flashcard.CreateFlashCardDto
import com.pwhs.quickmem.data.dto.flashcard.EditFlashCardDto
import com.pwhs.quickmem.data.dto.flashcard.FlashCardResponseDto
import com.pwhs.quickmem.data.dto.flashcard.FlipFlashCardDto
import com.pwhs.quickmem.data.dto.flashcard.ToggleStarredFlashCardDto
import com.pwhs.quickmem.data.dto.flashcard.UpdateFlashCardResponseDto
import com.pwhs.quickmem.data.dto.study_set.CreateStudySetRequestDto
import com.pwhs.quickmem.data.dto.study_set.CreateStudySetResponseDto
import com.pwhs.quickmem.data.dto.study_set.GetStudySetResponseDto
Expand Down Expand Up @@ -123,5 +125,12 @@ interface ApiService {
@Header("Authorization") token: String,
@Path("id") id: String,
@Body toggleStarredFlashCardDto: ToggleStarredFlashCardDto
): FlashCardResponseDto
): UpdateFlashCardResponseDto

@PATCH("flashcard/{id}/flip-status")
suspend fun updateFlipFlashCard(
@Header("Authorization") token: String,
@Path("id") id: String,
@Body flipFlashCardDto: FlipFlashCardDto
): UpdateFlashCardResponseDto
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.pwhs.quickmem.data.remote.repository

import com.pwhs.quickmem.core.utils.Resources
import com.pwhs.quickmem.data.dto.flashcard.FlipFlashCardDto
import com.pwhs.quickmem.data.dto.flashcard.ToggleStarredFlashCardDto
import com.pwhs.quickmem.data.mapper.flashcard.toDto
import com.pwhs.quickmem.data.mapper.flashcard.toModel
import com.pwhs.quickmem.data.remote.ApiService
import com.pwhs.quickmem.domain.model.flashcard.CreateFlashCardModel
import com.pwhs.quickmem.domain.model.flashcard.EditFlashCardModel
import com.pwhs.quickmem.domain.model.flashcard.FlashCardResponseModel
import com.pwhs.quickmem.domain.model.flashcard.UpdateFlashCardResponseModel
import com.pwhs.quickmem.domain.repository.FlashCardRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
Expand Down Expand Up @@ -60,7 +62,7 @@ class FlashCardRepositoryImpl @Inject constructor(
token: String,
id: String,
isStarred: Boolean
): Flow<Resources<Unit>> {
): Flow<Resources<UpdateFlashCardResponseModel>> {
return flow {
emit(Resources.Loading(true))
try {
Expand All @@ -69,7 +71,7 @@ class FlashCardRepositoryImpl @Inject constructor(
ToggleStarredFlashCardDto(isStarred)
)
Timber.d("toggleStarredFlashCard: $response")
emit(Resources.Success(Unit))
emit(Resources.Success(response.toModel()))
} catch (e: HttpException) {
Timber.e(e)
emit(Resources.Error(e.toString()))
Expand Down Expand Up @@ -106,6 +108,27 @@ class FlashCardRepositoryImpl @Inject constructor(
}
}

override suspend fun updateFlipFlashCard(
token: String,
id: String,
flipStatus: String
): Flow<Resources<UpdateFlashCardResponseModel>> {
return flow {
try {
val response =
apiService.updateFlipFlashCard(token, id, FlipFlashCardDto(flipStatus))
Timber.d("updateFlipFlashCard: $response")
emit(Resources.Success(response.toModel()))
} catch (e: HttpException) {
Timber.e(e)
emit(Resources.Error(e.toString()))
} catch (e: IOException) {
Timber.e(e)
emit(Resources.Error(e.toString()))
}
}
}

override suspend fun getFlashCardsByStudySetId(
token: String,
studySetId: String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pwhs.quickmem.domain.model.flashcard

import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class FlashCardResponseModel(
Expand All @@ -11,6 +12,7 @@ data class FlashCardResponseModel(
val explanation: String?,
val studySetId: String,
val rating: String = Rating.NOT_STUDIED.name,
val flipStatus: String = FlipCardStatus.NONE.name,
val isStarred: Boolean,
val createdAt: String,
val updatedAt: String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pwhs.quickmem.domain.model.flashcard

import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class StudySetFlashCardResponseModel(
Expand All @@ -10,6 +11,7 @@ data class StudySetFlashCardResponseModel(
val hint: String? = null,
val explanation: String? = null,
val rating: String = Rating.NOT_STUDIED.name,
val flipStatus: String = FlipCardStatus.NONE.name,
val isStarred: Boolean = false,
val createdAt: String = "",
val updatedAt: String = ""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.pwhs.quickmem.domain.model.flashcard

import com.pwhs.quickmem.core.data.FlipCardStatus
import com.pwhs.quickmem.core.data.Rating

data class UpdateFlashCardResponseModel(
val id: String,
val message: String,
val isStarred: Boolean? = false,
val rating: String? = Rating.NOT_STUDIED.name,
val flipStatus: String? = FlipCardStatus.NONE.name,
)
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.pwhs.quickmem.domain.repository

import com.pwhs.quickmem.core.utils.Resources
import com.pwhs.quickmem.data.dto.flashcard.FlipFlashCardDto
import com.pwhs.quickmem.domain.model.flashcard.CreateFlashCardModel
import com.pwhs.quickmem.domain.model.flashcard.EditFlashCardModel
import com.pwhs.quickmem.domain.model.flashcard.FlashCardResponseModel
import com.pwhs.quickmem.domain.model.flashcard.UpdateFlashCardResponseModel
import kotlinx.coroutines.flow.Flow

interface FlashCardRepository {
Expand All @@ -21,14 +23,20 @@ interface FlashCardRepository {
token: String,
id: String,
isStarred: Boolean
): Flow<Resources<Unit>>
): Flow<Resources<UpdateFlashCardResponseModel>>

suspend fun updateFlashCard(
token: String,
id: String,
editFlashCardModel: EditFlashCardModel
): Flow<Resources<FlashCardResponseModel>>

suspend fun updateFlipFlashCard(
token: String,
id: String,
flipStatus: String
): Flow<Resources<UpdateFlashCardResponseModel>>

suspend fun getFlashCardsByStudySetId(
token: String,
studySetId: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ class StudySetDetailViewModel @Inject constructor(
}

is Resources.Success -> {
Timber.d(resource.data?.message)
_uiEvent.send(StudySetDetailUiEvent.FlashCardStarred)
}

Expand Down
Loading

0 comments on commit b00068e

Please sign in to comment.