From fdaeb5863e1ae1f596e3d306df65051cdbb07a84 Mon Sep 17 00:00:00 2001 From: hyhyh Date: Sun, 2 Nov 2025 23:50:02 +0900 Subject: [PATCH] =?UTF-8?q?5=EC=A3=BC=EC=B0=A8=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 4 ++-- app/build.gradle.kts | 20 +++++++++++++++++++ .../kuit6_android_api/data/api/ApiService.kt | 20 +++++++++++++++++++ .../data/model/request/PostCreateRequest.kt | 9 +++++++++ .../data/model/response/AuthorResponse.kt | 9 +++++++++ .../data/model/response/BaseResponse.kt | 10 ++++++++++ .../data/model/response/PostResponse.kt | 13 ++++++++++++ 7 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/example/kuit6_android_api/data/api/ApiService.kt create mode 100644 app/src/main/java/com/example/kuit6_android_api/data/model/request/PostCreateRequest.kt create mode 100644 app/src/main/java/com/example/kuit6_android_api/data/model/response/AuthorResponse.kt create mode 100644 app/src/main/java/com/example/kuit6_android_api/data/model/response/BaseResponse.kt create mode 100644 app/src/main/java/com/example/kuit6_android_api/data/model/response/PostResponse.kt diff --git a/.idea/gradle.xml b/.idea/gradle.xml index a2cf405..639c779 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -9,8 +9,8 @@ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0c6dbbc..a01f761 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,6 @@ +//import org.jetbrains.kotlin.konan.properties.Properties +import java.util.Properties + plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) @@ -18,6 +21,15 @@ android { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + +// defaultConfig 블록 안에 추가 + val properties = Properties() + val localPropertiesFile = rootProject.file("local.properties") + if (localPropertiesFile.exists()) { + properties.load(localPropertiesFile.inputStream()) + } + val baseUrl = properties.getProperty("BASE_URL") ?: "http://10.0.2.2:8080/" + buildConfigField("String", "BASE_URL", "\"$baseUrl\"") } buildTypes { @@ -38,6 +50,7 @@ android { } buildFeatures { compose = true + buildConfig = true } } @@ -74,4 +87,11 @@ dependencies { androidTestImplementation(libs.androidx.espresso.core) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) + + //Retrofit & Okhttp + implementation(libs.retrofit) + implementation(libs.retrofit.converter.gson) + implementation(libs.okhttp) + implementation(libs.okhttp.logging.interceptor) + } diff --git a/app/src/main/java/com/example/kuit6_android_api/data/api/ApiService.kt b/app/src/main/java/com/example/kuit6_android_api/data/api/ApiService.kt new file mode 100644 index 0000000..ad8c8bf --- /dev/null +++ b/app/src/main/java/com/example/kuit6_android_api/data/api/ApiService.kt @@ -0,0 +1,20 @@ +package com.example.kuit6_android_api.data.api + +import com.example.kuit6_android_api.data.model.response.BaseResponse +import com.example.kuit6_android_api.data.model.response.PostResponse +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Body +import retrofit2.http.Query + + +interface ApiService { + @GET(value = "/api/posts") + suspend fun getPosts(): BaseResponse> + + @POST("/api/posts") + suspend fun createPost( + @Query("author") author: String = "규빈", + @Body request: PostCreateRequest + ): BaseResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/example/kuit6_android_api/data/model/request/PostCreateRequest.kt b/app/src/main/java/com/example/kuit6_android_api/data/model/request/PostCreateRequest.kt new file mode 100644 index 0000000..ce49d8f --- /dev/null +++ b/app/src/main/java/com/example/kuit6_android_api/data/model/request/PostCreateRequest.kt @@ -0,0 +1,9 @@ +package com.example.kuit6_android_api.data.model.request + +import kotlinx.serialization.SerialName + +data class PostCreateRequest( + @SerialName( value = "title" ) val title: String, + @SerialName( value = "content" ) val content: String, + @SerialName(value = "imageUrl" ) val imageUrl: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/example/kuit6_android_api/data/model/response/AuthorResponse.kt b/app/src/main/java/com/example/kuit6_android_api/data/model/response/AuthorResponse.kt new file mode 100644 index 0000000..9755f13 --- /dev/null +++ b/app/src/main/java/com/example/kuit6_android_api/data/model/response/AuthorResponse.kt @@ -0,0 +1,9 @@ +package com.example.kuit6_android_api.data.model.response + +import kotlinx.serialization.SerialName + +data class AuthorResponse( + @SerialName(value = "id") val id: Long, + @SerialName(value = "username") val username: String, + @SerialName(value = "profileImageUrl") val profileImageUrl: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/example/kuit6_android_api/data/model/response/BaseResponse.kt b/app/src/main/java/com/example/kuit6_android_api/data/model/response/BaseResponse.kt new file mode 100644 index 0000000..d883a42 --- /dev/null +++ b/app/src/main/java/com/example/kuit6_android_api/data/model/response/BaseResponse.kt @@ -0,0 +1,10 @@ +package com.example.kuit6_android_api.data.model.response + +import kotlinx.serialization.SerialName + +data class BaseResponse( + @SerialName(value = "success") val success: Boolean, + @SerialName(value = "message") val message: String?, + @SerialName(value = "data") val data: T?,//데이터가 안 올 수도 ? + @SerialName(value = "timestamp") val timestamp: String +) \ No newline at end of file diff --git a/app/src/main/java/com/example/kuit6_android_api/data/model/response/PostResponse.kt b/app/src/main/java/com/example/kuit6_android_api/data/model/response/PostResponse.kt new file mode 100644 index 0000000..dac12e3 --- /dev/null +++ b/app/src/main/java/com/example/kuit6_android_api/data/model/response/PostResponse.kt @@ -0,0 +1,13 @@ +package com.example.kuit6_android_api.data.model.response + +import kotlinx.serialization.SerialName + +data class PostResponse( + @SerialName(value = "id") val id: Long, + @SerialName(value = "title") val title: String, + @SerialName(value = "content") val content: String, + @SerialName(value = "imageUrl") val imageUrl: String?, + @SerialName(value = "author") val author: AuthorResponse, + @SerialName(value = "createdAt") val createdAt: String, + @SerialName(value = "updatedAt") val updatedAt: String +) \ No newline at end of file