Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .idea/misc.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,26 @@ package com.ssafy.tiggle.data.datasource.remote
import com.ssafy.tiggle.data.model.BaseResponse
import com.ssafy.tiggle.data.model.EmptyResponse
import com.ssafy.tiggle.data.model.piggybank.request.CreatePiggyBankRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.PiggyBankSettingRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.PrimaryAccountRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.SendSMSRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.VerificationCheckRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.VerificationRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.VerifySMSRequestDto
import com.ssafy.tiggle.data.model.piggybank.response.AccountHolderResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.CreatePiggyBankResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.MainAccountResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.PiggyBankAccountResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.PiggyBankSettingResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.VerificationCheckResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.VerifySMSResponseDto
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Query

interface PiggyBankApiService {
Expand Down Expand Up @@ -53,4 +60,20 @@ interface PiggyBankApiService {
suspend fun verifySMS(
@Body body: VerifySMSRequestDto
): BaseResponse<VerifySMSResponseDto>

@GET("accounts/primary")
suspend fun getMainAccount(): BaseResponse<MainAccountResponseDto>

@GET("piggybank/summary")
suspend fun getPiggyBankAccount(): BaseResponse<PiggyBankAccountResponseDto>

@PATCH("piggybank/settings")
suspend fun setPiggyBankSetting(
@Body body: PiggyBankSettingRequestDto
): BaseResponse<PiggyBankSettingResponseDto>

@PUT("piggybank/category/{categoryId}")
suspend fun setEsgCategory(
@Path("categoryId") categoryId: Int
): BaseResponse<PiggyBankSettingResponseDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.ssafy.tiggle.data.model.piggybank.request

data class PiggyBankSettingRequestDto(
val name: String? = null,
val targetAmount: Long? = null,
val autoDonation: Boolean? = null,
val autoSaving: Boolean? = null,
val esgCategoryId: Int? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.ssafy.tiggle.data.model.piggybank.response

import com.ssafy.tiggle.domain.entity.piggybank.AccountHolder
import com.ssafy.tiggle.domain.entity.piggybank.MainAccount

data class MainAccountResponseDto(
val accountName:String="",
val accountNo:String="",
val balance:String=""
)

fun MainAccountResponseDto.toDomain(): MainAccount =
MainAccount(
accountName = accountName,
accountNo= accountNo,
balance=balance
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.ssafy.tiggle.data.model.piggybank.response

import com.ssafy.tiggle.domain.entity.piggybank.PiggyBankAccount

data class PiggyBankAccountResponseDto (
val name:String="",
val currentAmount:Long=0L,
val lastWeekSavedAmount:Long=0L
)

fun PiggyBankAccountResponseDto.toDomain():PiggyBankAccount=
PiggyBankAccount(
name=name,
currentAmount=currentAmount,
lastWeekSavedAmount=lastWeekSavedAmount
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.ssafy.tiggle.data.model.piggybank.response

import com.ssafy.tiggle.domain.entity.piggybank.EsgCategory
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBank

data class PiggyBankSettingResponseDto(
val id: Int,
val name: String,
val currentAmount: Long,
val targetAmount: Long,
val savingCount: Int,
val donationCount: Int,
val donationTotalAmount: Long,
val autoDonation: Boolean,
val autoSaving: Boolean,
val esgCategory: EsgCategoryDto
)

data class EsgCategoryDto(
val id: Int,
val name: String,
val description: String,
val characterName: String
)

fun PiggyBankSettingResponseDto.toDomain(): PiggyBank =
PiggyBank(
id = id,
name = name,
currentAmount = currentAmount,
targetAmount = targetAmount,
savingCount = savingCount,
donationCount = donationCount,
donationTotalAmount = donationTotalAmount,
autoDonation = autoDonation,
autoSaving = autoSaving,
esgCategory = esgCategory.toDomain()
)

fun EsgCategoryDto.toDomain(): EsgCategory =
EsgCategory(
id = id,
name = name,
description = description,
characterName = characterName
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ssafy.tiggle.data.repository

import com.ssafy.tiggle.data.datasource.remote.PiggyBankApiService
import com.ssafy.tiggle.data.model.piggybank.request.CreatePiggyBankRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.PiggyBankSettingRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.PrimaryAccountRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.SendSMSRequestDto
import com.ssafy.tiggle.data.model.piggybank.request.VerificationCheckRequestDto
Expand All @@ -10,6 +11,9 @@ import com.ssafy.tiggle.data.model.piggybank.request.VerifySMSRequestDto
import com.ssafy.tiggle.data.model.piggybank.response.VerifySMSResponseDto
import com.ssafy.tiggle.data.model.piggybank.response.toDomain
import com.ssafy.tiggle.domain.entity.piggybank.AccountHolder
import com.ssafy.tiggle.domain.entity.piggybank.MainAccount
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBank
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBankAccount
import com.ssafy.tiggle.domain.repository.PiggyBankRepository
import javax.inject.Inject
import javax.inject.Singleton
Expand Down Expand Up @@ -147,4 +151,77 @@ class PiggyBankRepositoryImpl @Inject constructor(
}
}

override suspend fun getMainAccount(): Result<MainAccount> {
return try {
val response = piggyBankApiService.getMainAccount()

if (response.result && response.data != null) {
Result.success(response.data.toDomain())
} else {
Result.failure(Exception(response.message ?: "주계좌 정보를 불러오기에 실패했습니다."))
}
} catch (e: Exception) {
Result.failure(e)
}
}

override suspend fun getPiggyBankAccount(): Result<PiggyBankAccount> {
return try {
val response = piggyBankApiService.getPiggyBankAccount()

if (response.result && response.data != null) {
Result.success(response.data.toDomain())
} else {
Result.failure(Exception(response.message ?: "저금통 계좌 정보를 불러오기에 실패했습니다."))
}
} catch (e: Exception) {
Result.failure(e)
}
}

override suspend fun setPiggyBankSetting(
name: String?,
targetAmount: Long?,
autoDonation: Boolean?,
autoSaving: Boolean?,
esgCategory: Int?
): Result<PiggyBank> {
return try {
val response = piggyBankApiService.setPiggyBankSetting(
PiggyBankSettingRequestDto(
name,
targetAmount,
autoDonation,
autoSaving,
esgCategory
)
)

if (response.result && response.data != null) {
Result.success(response.data.toDomain())
} else {
Result.failure(Exception(response.message ?: "저금통 설정에 실패했습니다."))
}
} catch (e: Exception) {
Result.failure(e)
}

}

override suspend fun setEsgCategory(categoryId: Int): Result<PiggyBank> {
return try {
val response = piggyBankApiService.setEsgCategory(
categoryId = categoryId
)

if (response.result && response.data != null) {
Result.success(response.data.toDomain())
} else {
Result.failure(Exception(response.message ?: "카테고리 설정에 실패했습니다."))
}
} catch (e: Exception) {
Result.failure(e)
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.ssafy.tiggle.domain.entity.piggybank

data class MainAccount (
val accountName:String="",
val accountNo:String="",
val balance:String=""
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.ssafy.tiggle.domain.entity.piggybank

data class PiggyBank(
val id: Int = 0,
val name: String = "",
val currentAmount: Long = 0L,
val targetAmount: Long = 0L,
val savingCount: Int = 0,
val donationCount: Int = 0,
val donationTotalAmount: Long = 0L,
val autoDonation: Boolean = false,
val autoSaving: Boolean = false,
val esgCategory: EsgCategory? = null,
)

data class EsgCategory(
val id: Int = 0,
val name: String = "",
val description: String = "",
val characterName: String = ""
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.ssafy.tiggle.domain.entity.piggybank

data class PiggyBankAccount (
val name:String="",
val currentAmount:Long=0L,
val lastWeekSavedAmount:Long=0L
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ package com.ssafy.tiggle.domain.repository

import com.ssafy.tiggle.data.model.piggybank.response.VerifySMSResponseDto
import com.ssafy.tiggle.domain.entity.piggybank.AccountHolder
import com.ssafy.tiggle.domain.entity.piggybank.MainAccount
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBank
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBankAccount

interface PiggyBankRepository {
suspend fun getAccountHolder(accountNo: String): Result<AccountHolder>
Expand All @@ -14,5 +17,21 @@ interface PiggyBankRepository {

suspend fun createPiggyBank(name: String, targetAmount: Long, esgCategoryId: Int): Result<Unit>
suspend fun sendSMS(phone: String, purpose: String): Result<Unit>
suspend fun verifySMS(phone: String, code: String, purpose: String): Result<VerifySMSResponseDto>
suspend fun verifySMS(
phone: String,
code: String,
purpose: String
): Result<VerifySMSResponseDto>

suspend fun getMainAccount(): Result<MainAccount>
suspend fun getPiggyBankAccount(): Result<PiggyBankAccount>
suspend fun setPiggyBankSetting(
name: String?,
targetAmount: Long?,
autoDonation: Boolean?,
autoSaving: Boolean?,
esgCategory: Int?
): Result<PiggyBank>

suspend fun setEsgCategory(categoryId: Int): Result<PiggyBank>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssafy.tiggle.domain.usecase.piggybank

import com.ssafy.tiggle.domain.entity.piggybank.AccountHolder
import com.ssafy.tiggle.domain.entity.piggybank.MainAccount
import com.ssafy.tiggle.domain.repository.PiggyBankRepository
import javax.inject.Inject

class GetMainAccountUseCase @Inject constructor(
private val repository: PiggyBankRepository
) {
suspend operator fun invoke():Result<MainAccount> {
return repository.getMainAccount()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ssafy.tiggle.domain.usecase.piggybank

import com.ssafy.tiggle.domain.entity.piggybank.MainAccount
import com.ssafy.tiggle.domain.entity.piggybank.PiggyBankAccount
import com.ssafy.tiggle.domain.repository.PiggyBankRepository
import javax.inject.Inject

class GetPiggyBankAccountUseCase @Inject constructor(
private val repository: PiggyBankRepository
) {
suspend operator fun invoke():Result<PiggyBankAccount> {
return repository.getPiggyBankAccount()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,9 @@ data class PiggyBankUseCases @Inject constructor(
val registerPrimaryAccountUseCase: RegisterPrimaryAccountUseCase,
val createPiggyBankUseCase: CreatePiggyBankUseCase,
val sendSMSUseCase: SendSMSUseCase,
val verifySMSUseCase: VerifySMSUseCase
val verifySMSUseCase: VerifySMSUseCase,
val getMainAccountUseCase: GetMainAccountUseCase,
val getPiggyBankAccountUseCase: GetPiggyBankAccountUseCase,
val setPiggyBankSettingUseCase: SetPiggyBankSettingUseCase,
val setEsgCategoryUseCase: SetEsgCategoryUseCase
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ssafy.tiggle.domain.usecase.piggybank

import com.ssafy.tiggle.domain.entity.piggybank.PiggyBank
import com.ssafy.tiggle.domain.repository.PiggyBankRepository
import javax.inject.Inject

class SetEsgCategoryUseCase @Inject constructor(
private val repository: PiggyBankRepository
) {
suspend operator fun invoke(categoryId: Int): Result<PiggyBank> {
return repository.setEsgCategory(categoryId)
}
}
Loading