Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

๐Ÿ–‹๏ธ ์ผ๊ธฐ ์ž‘์„ฑ - ์ผ๊ธฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ #38

Merged
merged 8 commits into from
Aug 5, 2024
Binary file added .DS_Store
Binary file not shown.
1 change: 1 addition & 0 deletions Nabi/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ package com.nabi.data.datasource

import com.nabi.data.model.BaseResponse
import com.nabi.data.model.PageableResponse
import com.nabi.data.model.diary.AddDiaryRequestDTO
import com.nabi.data.model.diary.AddDiaryResponseDTO
import com.nabi.data.model.diary.DiaryDetailResponseDTO
import com.nabi.data.model.diary.ResponseMonthDiaryDTO
import com.nabi.data.model.diary.SearchDiaryResponseDTO
import com.nabi.data.model.diary.UpdateDiaryRequestDTO
import com.nabi.data.model.diary.UpdateDiaryResponseDTO

interface DiaryRemoteDataSource {
suspend fun getMonthlyDiary(
Expand All @@ -19,5 +23,19 @@ interface DiaryRemoteDataSource {
sort: String
): Result<BaseResponse<PageableResponse<SearchDiaryResponseDTO>>>

suspend fun getDiaryDetail(accessToken: String, diaryId: Int): Result<BaseResponse<DiaryDetailResponseDTO>>
suspend fun getDiaryDetail(
accessToken: String,
diaryId: Int
): Result<BaseResponse<DiaryDetailResponseDTO>>

suspend fun addDiary(
accessToken: String,
body: AddDiaryRequestDTO
): Result<BaseResponse<AddDiaryResponseDTO>>

suspend fun updateDiary(
accessToken: String,
id: Int,
body: UpdateDiaryRequestDTO
): Result<BaseResponse<UpdateDiaryResponseDTO>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ package com.nabi.data.datasourceImpl
import com.nabi.data.datasource.DiaryRemoteDataSource
import com.nabi.data.model.BaseResponse
import com.nabi.data.model.PageableResponse
import com.nabi.data.model.diary.AddDiaryRequestDTO
import com.nabi.data.model.diary.AddDiaryResponseDTO
import com.nabi.data.model.diary.DiaryDetailResponseDTO
import com.nabi.data.model.diary.ResponseMonthDiaryDTO
import com.nabi.data.model.diary.SearchDiaryResponseDTO
import com.nabi.data.model.diary.UpdateDiaryRequestDTO
import com.nabi.data.model.diary.UpdateDiaryResponseDTO
import com.nabi.data.service.DiaryService
import javax.inject.Inject

Expand Down Expand Up @@ -80,4 +84,49 @@ class DiaryRemoteDataSourceImpl @Inject constructor(
Result.failure(e)
}
}

override suspend fun addDiary(
accessToken: String,
body: AddDiaryRequestDTO
): Result<BaseResponse<AddDiaryResponseDTO>> {
return try {
val response = diaryService.addDiary(accessToken, body)

if (response.isSuccessful) {
val diaryResponse = response.body()
if (diaryResponse != null) {
Result.success(diaryResponse)
} else {
Result.failure(Exception("Add Diary Fail: response body is null"))
}
} else {
Result.failure(Exception("Add Diary fail: ${response.message()}"))
}
} catch (e: Exception) {
Result.failure(e)
}
}

override suspend fun updateDiary(
accessToken: String,
id: Int,
body: UpdateDiaryRequestDTO
): Result<BaseResponse<UpdateDiaryResponseDTO>> {
return try {
val response = diaryService.updateDiary(accessToken, id, body)

if (response.isSuccessful) {
val diaryResponse = response.body()
if (diaryResponse != null) {
Result.success(diaryResponse)
} else {
Result.failure(Exception("Update Diary Fail: response body is null"))
}
} else {
Result.failure(Exception("Update Diary Fail: ${response.message()}"))
}
} catch (e: Exception) {
Result.failure(e)
}
}
}
2 changes: 1 addition & 1 deletion Nabi/data/src/main/java/com/nabi/data/mapper/HomeMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ object HomeMapper {
RecentFiveDiary(
content = diary.content,
diaryEntryDate = diary.diaryEntryDate,
emotion = diary.emotion
emotion = diary.emotion ?: ""
)
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.nabi.data.model.diary

data class AddDiaryRequestDTO(
val content: String,
val diaryEntryDate: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.nabi.data.model.diary


import com.google.gson.annotations.SerializedName

data class AddDiaryResponseDTO(
@SerializedName("content")
val content: String,
@SerializedName("diaryEntryDate")
val diaryEntryDate: String,
@SerializedName("id")
val id: Int
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.nabi.data.model.diary

data class UpdateDiaryRequestDTO (
val content: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.nabi.data.model.diary


import com.google.gson.annotations.SerializedName

data class UpdateDiaryResponseDTO(
@SerializedName("content")
val content: String,
@SerializedName("diaryEntryDate")
val diaryEntryDate: String,
@SerializedName("DiaryId")
val diaryId: Int,
@SerializedName("userId")
val userId: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ package com.nabi.data.repository

import com.nabi.data.datasource.DiaryRemoteDataSource
import com.nabi.data.mapper.DiaryMapper
import com.nabi.data.model.diary.AddDiaryRequestDTO
import com.nabi.data.model.diary.UpdateDiaryRequestDTO
import com.nabi.domain.model.PageableInfo
import com.nabi.domain.model.diary.AddDiaryInfo
import com.nabi.domain.model.diary.DiaryInfo
import com.nabi.domain.model.diary.SearchDiary
import com.nabi.domain.model.diary.UpdateDiaryInfo
import com.nabi.domain.repository.DiaryRepository
import javax.inject.Inject

Expand Down Expand Up @@ -50,13 +54,24 @@ class DiaryRepositoryImpl @Inject constructor(
if (res != null) {
val data = res.data
if (data != null) {
val pageableInfo = PageableInfo(totalPages = data.totalPages, totalElements = data.totalElements, elementSize = data.size, currentPageNumber = data.number, isLastPage = data.last)
val pageableInfo = PageableInfo(
totalPages = data.totalPages,
totalElements = data.totalElements,
elementSize = data.size,
currentPageNumber = data.number,
isLastPage = data.last
)

if(data.size == 0) {
if (data.size == 0) {
Result.success(Pair(pageableInfo, emptyList()))
}
else {
val searchDiaryList = data.content.map { SearchDiary(it.previewContent, it.diaryEntryDate, it.diaryId) }
} else {
val searchDiaryList = data.content.map {
SearchDiary(
it.previewContent,
it.diaryEntryDate,
it.diaryId
)
}
Result.success(Pair(pageableInfo, searchDiaryList))
}
} else {
Expand All @@ -78,14 +93,16 @@ class DiaryRepositoryImpl @Inject constructor(
if (res != null) {
val data = res.data
if (data != null) {
Result.success(DiaryInfo(
content = data.content,
diaryId = data.diaryId,
nickname = data.nickname,
emotion = data.emotion,
diaryEntryDate = data.diaryEntryDate,
isBookmarked = data.isBookmarked
))
Result.success(
DiaryInfo(
content = data.content,
diaryId = data.diaryId,
nickname = data.nickname,
emotion = data.emotion,
diaryEntryDate = data.diaryEntryDate,
isBookmarked = data.isBookmarked
)
)
} else {
Result.failure(Exception("Month diary List data is null"))
}
Expand All @@ -96,4 +113,64 @@ class DiaryRepositoryImpl @Inject constructor(
Result.failure(result.exceptionOrNull() ?: Exception("Unknown error"))
}
}

override suspend fun addDiary(
accessToken: String,
content: String,
diaryEntryDate: String
): Result<AddDiaryInfo> {
val result =
diaryRemoteDataSource.addDiary(accessToken, AddDiaryRequestDTO(content, diaryEntryDate))

return if (result.isSuccess) {
val res = result.getOrNull()
if (res != null) {
val data = res.data
if (data != null) {
val addDiaryInfo = AddDiaryInfo(
content = data.content,
diaryEntryDate = data.diaryEntryDate
)
Result.success(addDiaryInfo)
} else {
Result.failure(Exception("Add Diary Failed: data is null"))
}
} else {
Result.failure(Exception("Add Diary Failed: response body is null"))
}
} else {
Result.failure(result.exceptionOrNull() ?: Exception("Unknown error"))
}
}

override suspend fun updateDiary(
accessToken: String,
id: Int,
content: String
): Result<UpdateDiaryInfo> {
val result =
diaryRemoteDataSource.updateDiary(accessToken, id, UpdateDiaryRequestDTO(content))

return if (result.isSuccess) {
val res = result.getOrNull()
if (res != null) {
val data = res.data
if (data != null) {
val updateDiaryInfo = UpdateDiaryInfo(
diaryId = data.diaryId,
content = data.content,
diaryEntryDate = data.diaryEntryDate
)
Result.success(updateDiaryInfo)
} else {
Result.failure(Exception("Update Diary Failed: data is null"))
}
} else {
Result.failure(Exception("Update Diary Failed: response body is null"))
}
} else {
Result.failure(result.exceptionOrNull() ?: Exception("Unknown error"))
}
}

}
22 changes: 22 additions & 0 deletions Nabi/data/src/main/java/com/nabi/data/service/DiaryService.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package com.nabi.data.service

import com.nabi.data.model.BaseResponse
import com.nabi.data.model.MessageResponseDTO
import com.nabi.data.model.PageableResponse
import com.nabi.data.model.auth.SignInRequestDTO
import com.nabi.data.model.diary.AddDiaryRequestDTO
import com.nabi.data.model.diary.AddDiaryResponseDTO
import com.nabi.data.model.diary.DiaryDetailResponseDTO
import com.nabi.data.model.diary.ResponseMonthDiaryDTO
import com.nabi.data.model.diary.SearchDiaryResponseDTO
import com.nabi.data.model.diary.UpdateDiaryRequestDTO
import com.nabi.data.model.diary.UpdateDiaryResponseDTO
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

Expand All @@ -34,4 +43,17 @@ interface DiaryService {
@Header("Authorization") accessToken: String,
@Path("diaryId") diaryId: Int
): Response<BaseResponse<DiaryDetailResponseDTO>>

@POST("/diarys")
suspend fun addDiary(
@Header("Authorization") accessToken: String,
@Body body: AddDiaryRequestDTO
): Response<BaseResponse<AddDiaryResponseDTO>>

@PATCH("/diarys/{id}")
suspend fun updateDiary(
@Header("Authorization") accessToken: String,
@Path("id") id: Int,
@Body body: UpdateDiaryRequestDTO
): Response<BaseResponse<UpdateDiaryResponseDTO>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.nabi.domain.model.diary

data class AddDiaryInfo(
val content: String,
val diaryEntryDate: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.nabi.domain.model.diary

data class UpdateDiaryInfo(
val diaryId: Int,
val content: String,
val diaryEntryDate: String
)
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.nabi.domain.repository

import com.nabi.domain.model.PageableInfo
import com.nabi.domain.model.diary.AddDiaryInfo
import com.nabi.domain.model.diary.DiaryInfo
import com.nabi.domain.model.diary.SearchDiary
import com.nabi.domain.model.diary.UpdateDiaryInfo

interface DiaryRepository {
suspend fun getMonthlyDiary(accessToken: String, year: Int, month: Int): Result<List<DiaryInfo>>
Expand All @@ -16,4 +18,16 @@ interface DiaryRepository {
): Result<Pair<PageableInfo, List<SearchDiary>>>

suspend fun getDiaryDetail(accessToken: String, diaryId: Int): Result<DiaryInfo>

suspend fun addDiary(
accessToken: String,
content: String,
diaryEntryDate: String
): Result<AddDiaryInfo>

suspend fun updateDiary(
accessToken: String,
id: Int,
content: String
): Result<UpdateDiaryInfo>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.nabi.domain.usecase.diary

import com.nabi.domain.model.diary.AddDiaryInfo
import com.nabi.domain.repository.DiaryRepository

class AddDiaryUseCase(private val repository: DiaryRepository) {
suspend operator fun invoke(
accessToken: String,
content: String,
diaryEntryDate: String
): Result<AddDiaryInfo> {
return repository.addDiary("Bearer $accessToken", content, diaryEntryDate)
}
}
Loading