Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 이미지 업로드 로직 수정 #174

Merged
merged 120 commits into from
Apr 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
d169cba
feat: 이미지 업로드를 위한 AWSS3Api 인터페이스 생성
nueijeel Mar 24, 2024
c54656c
feat: 이미지 업로드를 위한 Retrofit Client 구현
nueijeel Mar 24, 2024
e67e41c
feat: AWSS3 Repository 구현
nueijeel Mar 24, 2024
b370b23
feat: AWSS3 Repository 구현체와 모듈 생성
nueijeel Mar 24, 2024
1708ba1
feat: 이미지 업로드를 위해 AWSS3Response 데이터 클래스 생성
nueijeel Mar 24, 2024
285c153
feat: 이미지 업로드를 위한 ViewModel 추가
nueijeel Mar 24, 2024
5f4e1af
feat: 이미지 uri의 Multipart 변환을 위해 Util 객체 생성
nueijeel Mar 24, 2024
83ea4a5
feat: aws 클라우드에 이미지 저장 시 사용할 폴더 경로를 관리하기 위한 Constants 파일 생성
nueijeel Mar 24, 2024
5fb2692
refactor: ProfileFragment 리팩토링
nueijeel Mar 24, 2024
7394066
feat: 프로필 이미지 수정을 위해 preSigned URL 받아오는 로직 구현
nueijeel Mar 24, 2024
c8c63ce
feat: preSigned URL을 이용해 클라우드에 프로필 이미지 업로드하는 로직 구현
nueijeel Mar 24, 2024
b1b6d33
fix: UserPreferences의 함수 접근제한자 제거
nueijeel Mar 24, 2024
b2a4898
feat: UserViewModel에 UserPreferences 관련 로직 추가
nueijeel Mar 24, 2024
28a3ea6
fix: View에서 LoginRepository와 UserPreferences를 직접 주입받지 않도록 수정
nueijeel Mar 24, 2024
12a961e
fix: AWS S3 Retrofit Client의 Builder baseUrl을 운영 서버 도메인으로 변경
nueijeel Mar 24, 2024
0054b6d
rename: ProfileImageUtils -> AWSS3ImageUtils로 변경
nueijeel Mar 27, 2024
b053ad5
feat: UserViewModel에 RefreshToken, IsFirstLogin, Email 값 수정하는 로직 추가
nueijeel Mar 27, 2024
d7902af
feat: AWSS3ImageUtil 파일에 Multipart 파일 이름 추출하는 함수 작성
nueijeel Mar 27, 2024
ccef1f6
fix: 프로필 화면에서 파일 이름 추출하는 로직 getMultipartFileName 함수로 대체
nueijeel Mar 27, 2024
8c73927
fix: binding 객체명 수정
nueijeel Mar 27, 2024
84f1741
fix: Login Fragment에서 mainActivity 객체 제거
nueijeel Mar 27, 2024
f650219
fix: Login Fragment에서 UserPreferences 직접 주입받지 않도록 수정
nueijeel Mar 27, 2024
276ffb2
refactor: Login Fragment 리팩토링
nueijeel Mar 27, 2024
a1b6ef8
fix: 온보딩 Fragment에서 mainActivity 객체 제거
nueijeel Mar 28, 2024
c4e916a
fix: binding 객체명 수정
nueijeel Mar 28, 2024
c48b782
fix: 온보딩 Fragment에서 UserPreferences 직접 주입받지 않도록 수정
nueijeel Mar 28, 2024
0d18156
fix: 온보딩 Fragment의 불필요한 import 문 및 미참조 객체 제거
nueijeel Mar 28, 2024
50c5262
fix: 온보딩 Fragment 내 Gender enum class 분리
nueijeel Mar 28, 2024
261c1f7
fix: 온보딩 Fragment 내 날짜 포맷 함수 Util 객체에서 관리
nueijeel Mar 28, 2024
b1ea9a5
fix: 온보딩 Fragment 내 데이터 처리 함수 Util 객체에서 관리
nueijeel Mar 28, 2024
8d799fb
refactor: 강아지 등록 Fragment 리팩토링
nueijeel Mar 29, 2024
2839592
fix: 강아지 등록 Fragment 내 이미지 업로드 로직 변경
nueijeel Mar 29, 2024
a9e0e81
fix: 강아지 정보 수정 화면에서 MainActivity 객체 제거
nueijeel Mar 29, 2024
dd7d1ec
fix: 강아지 정보 수정 화면 뷰 초기화 및 livedata 옵저버 onViewCreated() 에서 수행
nueijeel Mar 29, 2024
3f5c32e
fix: 온보딩 Fragment에서 UserPreferences 및 LoginRepository객체 참조 삭제
nueijeel Mar 29, 2024
c65bd4e
fix: 강아지 정보수정 프래그먼트 LiveData Observe 로직 initObserves() 함수에서 수행하도록 수정
nueijeel Mar 29, 2024
876b97e
fix: 강아지 정보수정 프래그먼트 뷰 초기화 로직 initViews() 함수에서 수행하도록 수정
nueijeel Mar 29, 2024
6c284bb
fix: 강아지 정보 수정 Fragment 내 이미지 업로드 로직 변경
nueijeel Mar 30, 2024
911ee3c
fix: 강아지 정보 수정 Fragment 내 createMultipartFromUrl 함수 AWSS3ImageUtils로 이동
nueijeel Mar 30, 2024
d4f0ce4
fix: 사료 추가 시 이미지 업로드 로직 수정
nueijeel Mar 30, 2024
b8c2c1c
fix: 대소변 정보 등록 시 이미지 업로드 로직 수정
nueijeel Mar 30, 2024
9dadbb3
rename: ProfileImageUtils -> AWSS3ImageUtils로 이름 변경
nueijeel Mar 30, 2024
d86439c
fix: 강아지 정보 화면에서 사용하던 엔터티와 함수의 패키지 변경에 따른 import 문 수정
nueijeel Mar 30, 2024
ef14a16
fix: 프로필 Fragment에서 불필요한 코루틴 사용 제거
nueijeel Mar 30, 2024
3add794
fix: 영양제 정보 등록 시 이미지 업로드 로직 수정
nueijeel Mar 30, 2024
060921a
fix: 사료 정보 수정 시 이미지 업로드 로직 수정
nueijeel Mar 30, 2024
1d8115e
fix: 대소변 수정 Fragment 이미지 업로드 로직 수정
nueijeel Mar 30, 2024
f090bf1
rename: Dog 클래스명을 DogPostRequest로 변경
nueijeel Apr 1, 2024
8140d60
fix: API 변경에 따라 강아지 Post 시 Request Body 수정
nueijeel Apr 1, 2024
0109486
fix: DogPostRequest에 imageURL 프로퍼티 추가
nueijeel Apr 1, 2024
9802bf6
fix: 강아지 추가 레포지토리와 구현체 수정
nueijeel Apr 1, 2024
21f0842
fix: DogAddViewModel의 postDogInfo 함수 매개변수 수정
nueijeel Apr 1, 2024
ed0ce47
feat: 강아지 추가 화면에서 AWS에 이미지 저장 성공 시 강아지 정보 POST 기능 구현
nueijeel Apr 1, 2024
98fb5c8
chore: 앱수준 gradle에 aws 이미지 base url을 BuildConfigField로 등록
nueijeel Apr 3, 2024
15462f8
fix: AWS로 이미지 업로드하는 api 수정
nueijeel Apr 3, 2024
39ac5d4
fix: AWS 이미지 업로드 Repository, Implement, ViewModel의 메서드 인자 수정
nueijeel Apr 3, 2024
1dc326b
fix: DogPostRequest 클래스의 imageURL 프로퍼티 nullable 선언
nueijeel Apr 3, 2024
90497c1
feat: uri를 file로 변환하는 converUriToFile 함수 선언
nueijeel Apr 3, 2024
8bf22a5
refactor: postDogInfo 함수에 반려동물 정보 POST하는 로직 삽입
nueijeel Apr 3, 2024
bf86a28
fix: 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
4628cd1
fix: ExcretaInfo 클래스 수정
nueijeel Apr 3, 2024
2d68dcc
fix: 백엔드 Excreta Post API 변경에 따른 Excreta Post 로직 수정
nueijeel Apr 3, 2024
85bc87b
fix: ExcretaAddFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
90de115
remove: ExcretaInfoUtils에서 불필요한 import 및 메서드 삭제
nueijeel Apr 3, 2024
a7af7c2
fix: FeedInfo 클래스 수정
nueijeel Apr 3, 2024
774414f
fix: 백엔드 Feed Post API 변경에 따른 Feed Post 로직 수정
nueijeel Apr 3, 2024
e250039
fix: FeedAddFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
5d8e70e
remove: FeedInfoUtils에서 불필요한 import 및 메서드 삭제
nueijeel Apr 3, 2024
499dd4c
fix: SupplementDto 클래스 수정
nueijeel Apr 3, 2024
abf7e22
fix: 백엔드 Supplement Post API 변경에 따른 Supplement Post 로직 수정
nueijeel Apr 3, 2024
738624f
fix: SupplementAddFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
18bf49a
remove: SupplementData 클래스에서 미참조 클래스 제거
nueijeel Apr 3, 2024
4a8e591
remove: SupplementUtils에서 불필요한 import 및 메서드 삭제
nueijeel Apr 3, 2024
e451f2e
remove: FeedAddFragment에서 불필요한 import 삭제
nueijeel Apr 3, 2024
929297c
fix: ExcretaInfoPatch 클래스 수정
nueijeel Apr 3, 2024
a70def9
fix: Excreta Patch API 변경에 따른 Excreta Patch 로직 수정
nueijeel Apr 3, 2024
ce1cb1a
fix: ExcretaDetailGetResponse의 excretaImageURL 프로퍼티 nullable로 수정
nueijeel Apr 3, 2024
b45c78f
fix: 대소변 정보 화면 excretaImageURL null 대응
nueijeel Apr 3, 2024
49595f3
fix: ExcretaEditFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
3828fa8
remove: ExcretaInfoUtils에서 불필요한 import 및 메서드 삭제
nueijeel Apr 3, 2024
693af97
fix: 사료 추가 화면 이미지 미등록 시 Post api 호출
nueijeel Apr 3, 2024
8a74222
fix: FeedPutInfo 클래스 수정
nueijeel Apr 3, 2024
2e30ebe
fix: Feed Put API 변경에 따른 Feed Put 로직 수정
nueijeel Apr 3, 2024
679b3d4
fix: FeedEditFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
db7f677
fix: Feed 클래스의 imageURL 프로퍼티 nullable로 변경
nueijeel Apr 3, 2024
59359b9
fix: FeedDetailGetResponse 클래스의 imageURL 프로퍼티 nullable로 변경
nueijeel Apr 3, 2024
fa294b8
fix: FeedPartRecord 클래스의 feedImageURL 프로퍼티 nullable로 변경
nueijeel Apr 3, 2024
8ef1414
fix: FeedRecord 클래스의 imageURL 프로퍼티 nullable로 변경
nueijeel Apr 3, 2024
e02826d
fix: FeedInfoFragment 클래스에서 imageURL null 대응
nueijeel Apr 3, 2024
0f8e80f
remove: FeedInfoUtils에서 불필요한 import문 및 미사용 메서드 제거
nueijeel Apr 3, 2024
3510249
remove: FeedEditFragment에서 불필요한 import문 제거
nueijeel Apr 3, 2024
300affa
feat: 강아지 Put api 호출 시 필요한 DogPutRequest 클래스 정의
nueijeel Apr 3, 2024
35bd120
fix: Dog Put API 변경에 따른 Dog Put 로직 수정
nueijeel Apr 3, 2024
f61db6e
fix: PetEditFragment의 이미지 업로드 로직 수정
nueijeel Apr 3, 2024
275290d
feat: 프로필 Patch api 호출 시 필요한 ProfilePatchRequest 클래스 정의
nueijeel Apr 9, 2024
f45a94f
fix: 프로필 Patch API 변경에 따른 로직 수정
nueijeel Apr 9, 2024
626c55d
fix: ProfileFragment의 프로필 이미지 Patch 로직 수정
nueijeel Apr 9, 2024
e1269fc
remove: AWSS3ImageUtils에서 미사용 import문 및 메서드 제거
nueijeel Apr 9, 2024
f9261e3
remove: ExcretaInfoUtils에서 미사용 import문 및 메서드 제거
nueijeel Apr 9, 2024
53717a1
remove: FeedPostViewModel에서 미사용 import문 제거
nueijeel Apr 9, 2024
20547fc
remove: FeedPutViewModel에서 미사용 import문 제거
nueijeel Apr 9, 2024
b5ed291
remove: SettingFragment에서 미사용 import문 제거
nueijeel Apr 9, 2024
6ceab0b
remove: DogAddViewModel에서 미사용 import문 제거
nueijeel Apr 9, 2024
3d5f694
remove: ExcretaUploadRequest 클래스 제거
nueijeel Apr 9, 2024
d67cf1b
remove: FeedUploadRequest 클래스 제거
nueijeel Apr 9, 2024
da28e60
Merge branch 'develop' into feature/fix_image_upload_logic
nueijeel Apr 9, 2024
9089d65
refactor: ExcretaRepositoryImpl 클래스 함수 인자 끝 콤마 추가
nueijeel Apr 9, 2024
a37bc1c
refactor: ExcretaAddFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
83bc262
refactor: ExcretaEditFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
ba6d90d
refactor: FeedEditFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
c38a5ca
refactor: ProfilePatchRequest 클래스 마지막 줄 개행
nueijeel Apr 9, 2024
ecfcc27
refactor: PetEditFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
a8bb531
refactor: PetEditFragment 클래스 주석 앞 공백 추가
nueijeel Apr 9, 2024
916e734
refactor: PetEditFragment 클래스 onViewCreated 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
2fb6b19
refactor: ProfileFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
f9eeef3
refactor: ProfileFragment 클래스 onViewCreated 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
6b06d4a
refactor: LoginFragment 클래스 onViewCreated 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
5bd9084
refactor: DogAddOnBoardingFragment 클래스 onViewCreated 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
4a8bee8
refactor: SupplementAddFragment 클래스 uploadImage 메서드 인자 개행 및 콤마 추가
nueijeel Apr 9, 2024
72b40c4
refactor: SupplementAddFragment 클래스 addSupplement 메서드 호출 구문 매개변수 끝 콤마 추가
nueijeel Apr 9, 2024
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
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ android {
buildConfigField "String", "NAVER_OAUTH_CLIENT_SECRET", properties['naver_oauth_client_secret']
buildConfigField "String", "NAVER_OAUTH_CLIENT_NAME", properties['naver_oauth_client_name']
buildConfigField "String", "GOOGLE_CLIENT_ID", properties['google_client_id']
buildConfigField "String", "AWS_S3_BASE_URL", properties['aws_s3_base_url']
manifestPlaceholders["kakaoNativeAppKeyManifest"] = properties["kakao_native_app_key_manifest"] as String
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.project.meongcare.aws.model.data.remote

import com.project.meongcare.aws.model.entities.AWSS3Response
import okhttp3.RequestBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.PUT
import retrofit2.http.Query
import retrofit2.http.Url

interface AWSS3Api {
@GET("aws/s3")
suspend fun getPreSignedUrl(
@Header("AccessToken") accessToken: String,
@Query("fileName") fileName: String,
): Response<AWSS3Response>

@PUT
suspend fun uploadImageToS3(
@Url preSignedUrl: String,
@Body image: RequestBody,
): Response<Int>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.project.meongcare.aws.model.data.remote

import com.project.meongcare.BuildConfig
import okhttp3.ResponseBody
import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.lang.reflect.Type
import javax.inject.Inject

class AWSS3RetrofitClient
@Inject
constructor() {
val awsS3Api: AWSS3Api by lazy {
Retrofit.Builder()
.baseUrl(BuildConfig.SEMOBAN_DOMAIN)
.addConverterFactory(nullOnEmptyConverterFactory)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(AWSS3Api::class.java)
}

private val nullOnEmptyConverterFactory =
object : Converter.Factory() {
fun converterFactory() = this

override fun responseBodyConverter(
type: Type,
annotations: Array<out Annotation>,
retrofit: Retrofit,
) = object : Converter<ResponseBody, Any?> {
val nextResponseBodyConverter =
retrofit.nextResponseBodyConverter<Any?>(
converterFactory(),
type,
annotations,
)

override fun convert(value: ResponseBody) =
if (value.contentLength() != 0L) nextResponseBodyConverter.convert(value) else null
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.project.meongcare.aws.model.data.repository

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
object AWSS3Module {
@Provides
fun provideAWSS3Repository(awsS3RepositoryImpl: AWSS3RepositoryImpl): AWSS3Repository {
return awsS3RepositoryImpl
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.project.meongcare.aws.model.data.repository

import com.project.meongcare.aws.model.entities.AWSS3Response
import okhttp3.RequestBody

interface AWSS3Repository {
suspend fun getPreSignedUrl(
accessToken: String,
fileName: String,
): AWSS3Response?

suspend fun uploadImageToS3(
preSignedUrl: String,
image: RequestBody,
): Int?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.project.meongcare.aws.model.data.repository

import android.util.Log
import com.project.meongcare.aws.model.data.remote.AWSS3RetrofitClient
import com.project.meongcare.aws.model.entities.AWSS3Response
import okhttp3.RequestBody
import org.json.JSONObject
import java.lang.Exception
import javax.inject.Inject

class AWSS3RepositoryImpl
@Inject
constructor(private val awsS3RetrofitClient: AWSS3RetrofitClient) : AWSS3Repository {
override suspend fun getPreSignedUrl(
accessToken: String,
fileName: String,
): AWSS3Response? {
return try {
val response = awsS3RetrofitClient.awsS3Api.getPreSignedUrl(accessToken, fileName)
if (response.isSuccessful) {
Log.d("AWSS3Repo-getPreUrl", "통신 성공 ${response.code()}")
response.body()
} else {
val stringToJson = JSONObject(response.errorBody()?.string()!!)
Log.e("AWSS3Repo-getPreUrl", "통신 실패 ${response.code()}\n$stringToJson")
null
}
} catch (e: Exception) {
e.printStackTrace()
null
}
}

override suspend fun uploadImageToS3(
preSignedUrl: String,
image: RequestBody,
): Int? {
return try {
val response = awsS3RetrofitClient.awsS3Api.uploadImageToS3(preSignedUrl, image)
if (response.isSuccessful) {
Log.d("AWSS3Repo-upload", "통신 성공 ${response.code()}")
response.code()
} else {
val stringToJson = JSONObject(response.errorBody()?.string()!!)
Log.e("AWSS3Repo-upload", "통신 실패 ${response.code()}\n$stringToJson")
response.code()
}
} catch (e: Exception) {
e.printStackTrace()
null
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.project.meongcare.aws.model.entities

data class AWSS3Response(
val preSignedUrl: String,
)
12 changes: 12 additions & 0 deletions app/src/main/java/com/project/meongcare/aws/util/AWSS3Constants.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.project.meongcare.aws.util

// Parent Folder
const val PARENT_FOLDER_PATH = "meongcare/"

// Sub Folder
const val DOG_FOLDER_PATH = "dog/"
const val EXCRETA_FOLDER_PATH = "excreta/"
const val FEED_FOLDER_PATH = "feed/"
const val MEDICAL_RECORD_FOLDER_PATH = "medical-record/"
const val MEMBER_FOLDER_PATH = "member/"
const val SUPPLEMENTS_FOLDER_PATH = "supplements/"
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.project.meongcare.aws.util

import android.content.Context
import android.net.Uri
import java.io.File
import java.io.FileOutputStream
import java.util.UUID

object AWSS3ImageUtils {
private fun createUUID(): String {
return UUID.randomUUID().toString()
}

fun convertUriToFile(
context: Context,
uri: Uri,
): File {
val contentResolver = context.contentResolver
val file = File(context.cacheDir, createUUID())
file.deleteOnExit()

contentResolver.openInputStream(uri).use { inputStream ->
FileOutputStream(file).use { outputStream ->
inputStream?.copyTo(outputStream)
}
}

return file
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.project.meongcare.aws.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.project.meongcare.aws.model.data.repository.AWSS3Repository
import com.project.meongcare.aws.model.entities.AWSS3Response
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import okhttp3.RequestBody
import javax.inject.Inject

@HiltViewModel
class AWSS3ViewModel
@Inject
constructor(private val awsS3Repository: AWSS3Repository) : ViewModel() {
private val _preSignedUrl = MutableLiveData<AWSS3Response?>()
val preSignedUrl: LiveData<AWSS3Response?>
get() = _preSignedUrl

private val _uploadImageResponse = MutableLiveData<Int?>()
val uploadImageResponse: LiveData<Int?>
get() = _uploadImageResponse

fun getPreSignedUrl(
accessToken: String,
fileName: String,
) {
viewModelScope.launch {
_preSignedUrl.value = awsS3Repository.getPreSignedUrl(accessToken, fileName)
}
}

fun uploadImageToS3(
preSignedUrl: String,
image: RequestBody,
) {
viewModelScope.launch {
_uploadImageResponse.value = awsS3Repository.uploadImageToS3(preSignedUrl, image)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package com.project.meongcare.excreta.model.data.remote

import android.util.Log
import com.project.meongcare.excreta.model.entities.ExcretaDetailGetResponse
import com.project.meongcare.excreta.model.entities.ExcretaPatchRequest
import com.project.meongcare.excreta.model.entities.ExcretaPostRequest
import com.project.meongcare.excreta.model.entities.ExcretaRecordGetRequest
import com.project.meongcare.excreta.model.entities.ExcretaRecordGetResponse
import com.project.meongcare.excreta.model.entities.ExcretaUploadRequest
import com.project.meongcare.excreta.utils.SUCCESS
import org.json.JSONObject
import javax.inject.Inject
Expand All @@ -16,14 +17,13 @@ class ExcretaRemoteDataSource

suspend fun postExcreta(
accessToken: String,
excretaPostRequest: ExcretaUploadRequest,
excretaPostRequest: ExcretaPostRequest,
): Int? {
try {
val postResponse =
excretaApiService.postExcreta(
accessToken,
excretaPostRequest.dto,
excretaPostRequest.file,
excretaPostRequest,
)

if (postResponse.code() != SUCCESS) {
Expand Down Expand Up @@ -120,14 +120,13 @@ class ExcretaRemoteDataSource

suspend fun patchExcreta(
accessToken: String,
excretaUploadRequest: ExcretaUploadRequest,
excretaPatchRequest: ExcretaPatchRequest,
): Int? {
try {
val patchResponse =
excretaApiService.patchExcreta(
accessToken,
excretaUploadRequest.dto,
excretaUploadRequest.file,
excretaPatchRequest,
)

if (patchResponse.code() != SUCCESS) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
package com.project.meongcare.excreta.model.data.remote

import com.project.meongcare.excreta.model.entities.ExcretaDetailGetResponse
import com.project.meongcare.excreta.model.entities.ExcretaPatchRequest
import com.project.meongcare.excreta.model.entities.ExcretaPostRequest
import com.project.meongcare.excreta.model.entities.ExcretaRecordGetResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Multipart
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Path
import retrofit2.http.Query

interface ExcretaService {
@Multipart
@POST("excreta")
suspend fun postExcreta(
@Header("AccessToken") accessToken: String,
@Part("dto") dto: RequestBody,
@Part file: MultipartBody.Part,
@Body excretaPostRequest: ExcretaPostRequest,
): Response<Int>

@GET("excreta/{dogId}")
Expand All @@ -43,11 +40,9 @@ interface ExcretaService {
@Query("excretaIds") excretaIds: IntArray,
): Response<Int>

@Multipart
@PATCH("excreta")
suspend fun patchExcreta(
@Header("AccessToken") accessToken: String,
@Part("dto") dto: RequestBody,
@Part file: MultipartBody.Part,
@Body excretaPatchRequest: ExcretaPatchRequest,
): Response<Int>
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.project.meongcare.excreta.model.data.repository

import com.project.meongcare.excreta.model.entities.ExcretaDetailGetResponse
import com.project.meongcare.excreta.model.entities.ExcretaPatchRequest
import com.project.meongcare.excreta.model.entities.ExcretaPostRequest
import com.project.meongcare.excreta.model.entities.ExcretaRecordGetRequest
import com.project.meongcare.excreta.model.entities.ExcretaRecordGetResponse
import com.project.meongcare.excreta.model.entities.ExcretaUploadRequest

interface ExcretaRepository {
suspend fun postExcreta(
accessToken: String,
excretaUploadRequest: ExcretaUploadRequest,
excretaPostRequest: ExcretaPostRequest,
): Int?

suspend fun getExcretaRecord(
Expand All @@ -28,6 +29,6 @@ interface ExcretaRepository {

suspend fun patchExcreta(
accessToken: String,
excretaUploadRequest: ExcretaUploadRequest,
excretaPatchRequest: ExcretaPatchRequest,
): Int?
}
Loading