diff --git a/app/src/main/java/org/sopt/and/data/ApiFactory.kt b/app/src/main/java/org/sopt/and/data/ApiFactory.kt new file mode 100644 index 0000000..4ad4168 --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/ApiFactory.kt @@ -0,0 +1,36 @@ +package org.sopt.and.data + +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.sopt.and.BuildConfig +import org.sopt.and.data.network.service.UserService +import retrofit2.Retrofit + +object ApiFactory { + private const val BASE_URL: String = BuildConfig.BASE_URL + + private val loggingInterceptor = HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BODY + } + + private val client = OkHttpClient.Builder() + .addInterceptor(loggingInterceptor) + .build() + + val retrofit: Retrofit by lazy { + Retrofit.Builder() + .baseUrl(BASE_URL) + .client(client) + .addConverterFactory(Json.asConverterFactory("application/json".toMediaType())) + .build() + } + + inline fun create(): T = retrofit.create(T::class.java) +} + +object ServicePool { + val userService = ApiFactory.create() +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserHobbyDto.kt b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserHobbyDto.kt new file mode 100644 index 0000000..0d960e3 --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserHobbyDto.kt @@ -0,0 +1,17 @@ +package org.sopt.and.data.model.dto + + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class ResponseUserHobbyDto( + @SerialName("result") + val result: Result +) { + @Serializable + data class Result( + @SerialName("hobby") + val hobby: String + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserSignUpDto.kt b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserSignUpDto.kt new file mode 100644 index 0000000..142aaed --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserSignUpDto.kt @@ -0,0 +1,17 @@ +package org.sopt.and.data.model.dto + + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class ResponseUserSignUpDto( + @SerialName("result") + val result: Result +) { + @Serializable + data class Result( + @SerialName("no") + val no: Int + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserTokenDto.kt b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserTokenDto.kt new file mode 100644 index 0000000..6735b18 --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/model/dto/ResponseUserTokenDto.kt @@ -0,0 +1,17 @@ +package org.sopt.and.data.model.dto + + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class ResponseUserTokenDto( + @SerialName("result") + val result: Result +) { + @Serializable + data class Result( + @SerialName("token") + val token: String + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/model/request/UserLoginRequest.kt b/app/src/main/java/org/sopt/and/data/model/request/UserLoginRequest.kt new file mode 100644 index 0000000..1c31bab --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/model/request/UserLoginRequest.kt @@ -0,0 +1,13 @@ +package org.sopt.and.data.model.request + + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class UserLoginRequest( + @SerialName("username") + val username: String, + @SerialName("password") + val password: String +) \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/model/request/UserSignUpRequest.kt b/app/src/main/java/org/sopt/and/data/model/request/UserSignUpRequest.kt new file mode 100644 index 0000000..fbe48f6 --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/model/request/UserSignUpRequest.kt @@ -0,0 +1,15 @@ +package org.sopt.and.data.model.request + + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class UserSignUpRequest( + @SerialName("username") + val username: String, + @SerialName("password") + val password: String, + @SerialName("hobby") + val hobby: String +) \ No newline at end of file diff --git a/app/src/main/java/org/sopt/and/data/network/service/UserService.kt b/app/src/main/java/org/sopt/and/data/network/service/UserService.kt new file mode 100644 index 0000000..33d76fd --- /dev/null +++ b/app/src/main/java/org/sopt/and/data/network/service/UserService.kt @@ -0,0 +1,29 @@ +package org.sopt.and.data.network.service + +import org.sopt.and.data.model.dto.ResponseUserHobbyDto +import org.sopt.and.data.model.dto.ResponseUserSignUpDto +import org.sopt.and.data.model.dto.ResponseUserTokenDto +import org.sopt.and.data.model.request.UserLoginRequest +import org.sopt.and.data.model.request.UserSignUpRequest +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.POST + +interface UserService { + @POST("/user") + fun postUserSignUp( + @Body body: UserSignUpRequest + ): Call + + @POST("/login") + fun postUserLogin( + @Body body: UserLoginRequest + ): Call + + @GET("/user/my-hobby") + fun getUserHobby( + @Header("token") token: String, + ): Call +} \ No newline at end of file