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

week4: 4차 필수과제 진행(Compose) #11

Merged
merged 2 commits into from
May 24, 2024
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
17 changes: 17 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.0'
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

android {
namespace 'com.sopt.now.compose'
compileSdk 34
Expand All @@ -18,6 +22,7 @@ android {
vectorDrawables {
useSupportLibrary true
}
buildConfigField "String", "AUTH_BASE_URL", properties["base.url"]
}

buildTypes {
Expand All @@ -35,6 +40,7 @@ android {
}
buildFeatures {
compose true
buildConfig true
}
composeOptions {
kotlinCompilerExtensionVersion '1.5.1'
Expand Down Expand Up @@ -64,4 +70,15 @@ dependencies {
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
debugImplementation 'androidx.compose.ui:ui-tooling'
debugImplementation 'androidx.compose.ui:ui-test-manifest'

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1'
implementation 'com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0'

// define a BOM and its version
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0"))

// define any required OkHttp artifacts without version
implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:logging-interceptor")
}
5 changes: 4 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
Expand All @@ -11,9 +13,10 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.NOWSOPTAndroid"
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:name=".main.MainActivity"
android:exported="true"
android:theme="@style/Theme.NOWSOPTAndroid">
<intent-filter>
Expand Down
25 changes: 25 additions & 0 deletions app/src/main/java/com/sopt/now/compose/ApiFactory.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.sopt.now.compose

import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.sopt.now.BuildConfig
import com.sopt.now.compose.service.AuthService
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import retrofit2.Retrofit

object ApiFactory {
private const val BASE_URL: String = BuildConfig.AUTH_BASE_URL

val retrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()
}

inline fun <reified T> create(): T = retrofit.create(T::class.java)
}
Comment on lines +10 to +21
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저희가 사용해야 하는 api는 두개랍니다 🤭

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
object ApiFactory {
private const val BASE_URL: String = BuildConfig.AUTH_BASE_URL
val retrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()
}
inline fun <reified T> create(): T = retrofit.create(T::class.java)
}
object ApiFactory {
private const val BASE_URL: String = BuildConfig.AUTH_BASE_URL
val retrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()
}
inline fun <reified T> create(): T = retrofit.create()
}

class Type을 매개변수로 넘겨주지 않아도 됩니다!


object ServicePool {
val authService = ApiFactory.create<AuthService>()
}
Comment on lines +23 to +25
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 해당 service 객체를 사용하고 있지 않습니다 👀

6 changes: 3 additions & 3 deletions app/src/main/java/com/sopt/now/compose/Scaffold.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
import com.sopt.now.compose.home.HomeScreen
import com.sopt.now.compose.mypage.MyPageScreen
import com.sopt.now.compose.search.SearchScreen
import com.sopt.now.compose.main.home.HomeScreen
import com.sopt.now.compose.main.mypage.MyPageScreen
import com.sopt.now.compose.main.search.SearchScreen

data class BottomNavigationItem(
val icon: ImageVector,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.sopt.now.compose
package com.sopt.now.compose.main

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.sopt.now.compose.Scaffold
import com.sopt.now.compose.signIn.SignInScreen
import com.sopt.now.compose.signUp.SignUpScreen

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.sopt.now.compose.home
package com.sopt.now.compose.main.home

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.sopt.now.compose.R

@Preview
@Composable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose.home
package com.sopt.now.compose.main.home
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main 이라는 package 명을 보면 동료개발자가 해당 패키지에 어떤 class들이 들어있는지 알 수 있을까요??


import com.sopt.now.compose.R

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose.home
package com.sopt.now.compose.main.home

import androidx.annotation.DrawableRes
import androidx.compose.foundation.Image
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose.mypage
package com.sopt.now.compose.main.mypage

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose.search
package com.sopt.now.compose.main.search

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/java/com/sopt/now/compose/request/RequestSignInDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.sopt.now.compose.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class RequestSignInDto(
@SerialName("authenticationId")
val authenticationId: String,
@SerialName("password")
val password: String
)
16 changes: 16 additions & 0 deletions app/src/main/java/com/sopt/now/compose/request/RequestSignUpDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.sopt.now.compose.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class RequestSignUpDto(
@SerialName("authenticationId")
val authenticationId: String,
@SerialName("password")
val password: String,
@SerialName("nickname")
val nickname: String,
@SerialName("phone")
val phone: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.sopt.now.compose.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseSignInDto(
@SerialName("code")
val code: Int,
@SerialName("message")
val message: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.sopt.now.compose.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseSignUpDto(
@SerialName("code")
val code: Int,
@SerialName("message")
val message: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.sopt.now.compose.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseUserInfoDto (
@SerialName("code")
val code: Int,
@SerialName("message")
val message: String,
@SerialName("data")
val data : UserInfo
)
@Serializable
data class UserInfo (
@SerialName("authenticationId")
val authenticationId: String,
@SerialName("nickname")
val nickname: String,
@SerialName("phone")
val phone: String
)
29 changes: 29 additions & 0 deletions app/src/main/java/com/sopt/now/compose/service/AuthService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.sopt.now.compose.service

import com.sopt.now.compose.request.RequestSignInDto
import com.sopt.now.compose.request.RequestSignUpDto
import com.sopt.now.compose.response.ResponseSignInDto
import com.sopt.now.compose.response.ResponseSignUpDto
import com.sopt.now.compose.response.ResponseUserInfoDto
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.POST

interface AuthService {
@POST("member/join") //http 메소드
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

fun signUp(
@Body request: RequestSignUpDto
): Call<ResponseSignUpDto> //비동기->callback
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다만, 불필요한 주석은 삭제해주세요!


@POST("member/login")
fun signIn(
@Body request : RequestSignInDto
) : Call<ResponseSignInDto>

@GET("/member/info")
fun getUserInfo(
@Header("memberId") userId : Int
) : Call<ResponseUserInfoDto>
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose
package com.sopt.now.compose.signIn

import android.content.Context
import androidx.compose.foundation.layout.Arrangement
Expand Down Expand Up @@ -29,6 +29,9 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import com.sopt.now.compose.R
import com.sopt.now.compose.SOPTOutlinedButton
import com.sopt.now.compose.showToast

@Composable
fun SignInScreen(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.sopt.now.compose
package com.sopt.now.compose.signUp

import android.content.Context
import androidx.compose.foundation.layout.Arrangement
Expand Down Expand Up @@ -31,6 +31,9 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import com.sopt.now.compose.R
import com.sopt.now.compose.SOPTOutlinedButton
import com.sopt.now.compose.showToast

@Composable
fun SignUpScreen(navController: NavController) {
Expand Down