Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into chongdae
Browse files Browse the repository at this point in the history
# Conflicts:
#	android/app/src/main/java/com/zzang/chongdae/presentation/view/commentdetail/CommentDetailActivity.kt
#	android/app/src/main/java/com/zzang/chongdae/presentation/view/commentdetail/CommentDetailViewModel.kt
#	android/app/src/main/java/com/zzang/chongdae/presentation/view/commentdetail/adapter/comment/CommentAdapter.kt
#	android/app/src/main/java/com/zzang/chongdae/presentation/view/commentdetail/adapter/comment/CommentViewType.kt
#	android/app/src/main/java/com/zzang/chongdae/presentation/view/commentdetail/adapter/comment/DateSeparatorViewHolder.kt
#	android/app/src/main/res/layout/item_date_separator.xml
#	backend/src/main/java/com/zzang/chongdae/offering/domain/UpdatedOffering.java
#	backend/src/main/java/com/zzang/chongdae/offering/service/OfferingService.java
  • Loading branch information
ChooSeoyeon committed Oct 23, 2024
2 parents a09368f + 3c7316a commit bc0c723
Show file tree
Hide file tree
Showing 125 changed files with 2,953 additions and 369 deletions.
28 changes: 20 additions & 8 deletions .github/workflows/backend-dev-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ jobs:
- name: Set Application yml for dev
run: |
echo "${{ secrets.APPLICATION_PROPERTIES_DEV }}" > src/main/resources/application.properties
mkdir -p src/main/resources/fcm
echo '${{ secrets.FCM_SECRET_KEY }}' > src/main/resources/fcm/chongdaemarket-fcm-key.json
mkdir -p src/test/resources/fcm
echo '${{ secrets.FCM_SECRET_KEY }}' > src/test/resources/fcm/chongdaemarket-fcm-key.json
working-directory: ./backend

- name: Build with Gradle Wrapper
Expand All @@ -57,16 +61,24 @@ jobs:
docker tag ${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }} ${{ secrets.BE_DOCKERHUB_USERNAME }}/${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }}:${GITHUB_SHA::7}
docker push ${{ secrets.BE_DOCKERHUB_USERNAME }}/${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }}:${GITHUB_SHA::7}
deploy:
deploy-new-container:
needs: build-and-test
runs-on: [ self-hosted, dev ]
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Deploy new container
run: |
bash launch_next_container.sh ${GITHUB_SHA::7} dev ${{ secrets.BE_DOCKERHUB_USERNAME }} ${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }}
working-directory: backend/deploy

switch-new-container:
needs: deploy-new-container
runs-on: [ self-hosted, dev ]

steps:
- name: Pull Image And Restart Container
- name: Switch from old to new container
run: |
docker login -u ${{ secrets.BE_DOCKERHUB_USERNAME }} -p ${{ secrets.BE_DOCKERHUB_PASSWORD }}
docker stop ${{ secrets.BE_DOCKER_CONTAINER_NAME }} | true
docker rm ${{ secrets.BE_DOCKER_CONTAINER_NAME }} | true
docker image prune -a -f
docker pull ${{ secrets.BE_DOCKERHUB_USERNAME }}/${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }}:${GITHUB_SHA::7}
docker run --name ${{ secrets.BE_DOCKER_CONTAINER_NAME }} -d -p 80:8080 -v /logs:/logs -e SPRING_PROFILES_ACTIVE=dev ${{ secrets.BE_DOCKERHUB_USERNAME }}/${{ secrets.BE_DOCKER_IMAGE_NAME_DEV }}:${GITHUB_SHA::7}
bash switch_blue_green_container.sh
working-directory: backend/deploy
4 changes: 4 additions & 0 deletions .github/workflows/backend-prod-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ jobs:
- name: Set Application yml for prod
run: |
echo "${{ secrets.APPLICATION_PROPERTIES_PROD }}" > src/main/resources/application.properties
mkdir -p src/main/resources/fcm
echo '${{ secrets.FCM_SECRET_KEY }}' > src/main/resources/fcm/chongdaemarket-fcm-key.json
mkdir -p src/test/resources/fcm
echo '${{ secrets.FCM_SECRET_KEY }}' > src/test/resources/fcm/chongdaemarket-fcm-key.json
working-directory: ./backend

- name: Build with Gradle Wrapper
Expand Down
11 changes: 8 additions & 3 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ android {
applicationId = "com.zzang.chongdae"
minSdk = 26
targetSdk = 34
versionCode = 6
versionName = "1.1.4"
versionCode = 7
versionName = "1.2.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments["runnerBuilder"] = "de.mannodermaus.junit5.AndroidJUnit5Builder"
testInstrumentationRunnerArguments["runnerBuilder"] =
"de.mannodermaus.junit5.AndroidJUnit5Builder"
vectorDrawables {
useSupportLibrary = true
}
Expand Down Expand Up @@ -154,6 +155,7 @@ dependencies {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.message)

// 카카오 로그인
implementation(libs.kakao.sdk)
Expand All @@ -168,6 +170,9 @@ dependencies {
// Hilt
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)

// Skeleton-UI
implementation(libs.shimmer)
}

kapt {
Expand Down
10 changes: 9 additions & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@
android:usesCleartextTraffic="true"
tools:targetApi="33">

<service
android:name="com.zzang.chongdae.common.firebase.fcm.ChongdaeFirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

<activity
android:name=".presentation.view.login.LoginActivity"
android:exported="true"
Expand All @@ -35,7 +43,7 @@
</activity>

<activity
android:name=".presentation.view.MainActivity"
android:name=".presentation.view.main.MainActivity"
android:exported="true"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan">

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.zzang.chongdae.auth.api

import com.zzang.chongdae.auth.dto.request.AccessTokenRequest
import com.zzang.chongdae.auth.dto.request.TokensRequest
import com.zzang.chongdae.auth.dto.response.MemberResponse
import retrofit2.Response
import retrofit2.http.Body
Expand All @@ -9,7 +9,7 @@ import retrofit2.http.POST
interface AuthApiService {
@POST("/auth/login/kakao")
suspend fun postLogin(
@Body accessToken: AccessTokenRequest,
@Body tokensRequest: TokensRequest,
): Response<MemberResponse>

@POST("/auth/refresh")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class AccessTokenRequest(
data class TokensRequest(
@SerialName("accessToken") val accessToken: String,
@SerialName("fcmToken") val fcmToken: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import com.zzang.chongdae.common.handler.DataError
import com.zzang.chongdae.common.handler.Result

interface AuthRepository {
suspend fun saveLogin(accessToken: String): Result<Member, DataError.Network>
suspend fun saveLogin(
accessToken: String,
fcmToken: String,
): Result<Member, DataError.Network>

suspend fun saveRefresh(): Result<Unit, DataError.Network>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.zzang.chongdae.auth.repository

import com.zzang.chongdae.auth.dto.request.AccessTokenRequest
import com.zzang.chongdae.auth.dto.request.TokensRequest
import com.zzang.chongdae.auth.mapper.toDomain
import com.zzang.chongdae.auth.model.Member
import com.zzang.chongdae.auth.source.AuthRemoteDataSource
Expand All @@ -14,9 +14,12 @@ class AuthRepositoryImpl
constructor(
@AuthDataSourceQualifier private val authRemoteDataSource: AuthRemoteDataSource,
) : AuthRepository {
override suspend fun saveLogin(accessToken: String): Result<Member, DataError.Network> {
override suspend fun saveLogin(
accessToken: String,
fcmToken: String,
): Result<Member, DataError.Network> {
return authRemoteDataSource.saveLogin(
accessTokenRequest = AccessTokenRequest(accessToken),
tokensRequest = TokensRequest(accessToken, fcmToken),
).map { it.toDomain() }
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.zzang.chongdae.auth.source

import com.zzang.chongdae.auth.dto.request.AccessTokenRequest
import com.zzang.chongdae.auth.dto.request.TokensRequest
import com.zzang.chongdae.auth.dto.response.MemberResponse
import com.zzang.chongdae.common.handler.DataError
import com.zzang.chongdae.common.handler.Result

interface AuthRemoteDataSource {
suspend fun saveLogin(accessTokenRequest: AccessTokenRequest): Result<MemberResponse, DataError.Network>
suspend fun saveLogin(tokensRequest: TokensRequest): Result<MemberResponse, DataError.Network>

suspend fun saveRefresh(): Result<Unit, DataError.Network>
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.zzang.chongdae.auth.source

import com.zzang.chongdae.auth.api.AuthApiService
import com.zzang.chongdae.auth.dto.request.AccessTokenRequest
import com.zzang.chongdae.auth.dto.request.TokensRequest
import com.zzang.chongdae.auth.dto.response.MemberResponse
import com.zzang.chongdae.common.handler.DataError
import com.zzang.chongdae.common.handler.Result
Expand All @@ -14,8 +14,8 @@ class AuthRemoteDataSourceImpl
constructor(
@AuthApiServiceQualifier private val service: AuthApiService,
) : AuthRemoteDataSource {
override suspend fun saveLogin(accessTokenRequest: AccessTokenRequest): Result<MemberResponse, DataError.Network> {
return safeApiCall { service.postLogin(accessTokenRequest) }
override suspend fun saveLogin(tokensRequest: TokensRequest): Result<MemberResponse, DataError.Network> {
return safeApiCall { service.postLogin(tokensRequest) }
}

override suspend fun saveRefresh(): Result<Unit, DataError.Network> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package com.zzang.chongdae.common.datastore

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import com.zzang.chongdae.di.annotations.DataStoreQualifier
Expand Down Expand Up @@ -35,6 +37,21 @@ class UserPreferencesDataStore
preferences[REFRESH_TOKEN_KEY]
}

val fcmTokenFlow: Flow<String?> =
dataStore.data.map { preferences ->
preferences[FCM_TOKEN_KEY]
}

val notificationActivateFlow: Flow<Boolean> =
dataStore.data.map { preferences ->
preferences[NOTIFICATION_ACTIVATE_KEY] ?: DEFAULT_NOTIFICATION_ACTIVATE
}

val notificationImportanceFlow: Flow<Int> =
dataStore.data.map { preferences ->
preferences[NOTIFICATION_IMPORTANCE_KEY] ?: DEFAULT_NOTIFICATION_IMPORTANCE
}

suspend fun saveMember(
memberId: Long,
nickName: String,
Expand All @@ -45,7 +62,7 @@ class UserPreferencesDataStore
}
}

suspend fun saveTokens(
suspend fun saveAccountTokens(
accessToken: String,
refreshToken: String,
) {
Expand All @@ -55,16 +72,39 @@ class UserPreferencesDataStore
}
}

suspend fun saveFcmToken(fcmToken: String) {
dataStore.edit { preferences ->
preferences[FCM_TOKEN_KEY] = fcmToken
}
}

suspend fun setNotificationActivate(activate: Boolean) {
dataStore.edit { preferences ->
preferences[NOTIFICATION_ACTIVATE_KEY] = activate
}
}

suspend fun setNotificationImportance(importance: Int) {
dataStore.edit { preferences ->
preferences[NOTIFICATION_IMPORTANCE_KEY] = importance
}
}

suspend fun removeAllData() {
dataStore.edit { preferences ->
preferences.clear()
}
}

companion object {
val MEMBER_ID_KEY = longPreferencesKey("member_id_key")
val NICKNAME_KEY = stringPreferencesKey("nickname_key")
val ACCESS_TOKEN_KEY = stringPreferencesKey("access_token_key")
val REFRESH_TOKEN_KEY = stringPreferencesKey("refresh_token_key")
private val MEMBER_ID_KEY = longPreferencesKey("member_id_key")
private val NICKNAME_KEY = stringPreferencesKey("nickname_key")
private val ACCESS_TOKEN_KEY = stringPreferencesKey("access_token_key")
private val REFRESH_TOKEN_KEY = stringPreferencesKey("refresh_token_key")
private val FCM_TOKEN_KEY = stringPreferencesKey("fcm_token_key")
private val NOTIFICATION_ACTIVATE_KEY = booleanPreferencesKey("notification_activate_key")
private val NOTIFICATION_IMPORTANCE_KEY = intPreferencesKey("notification_importance_key")
private const val DEFAULT_NOTIFICATION_ACTIVATE = true
private const val DEFAULT_NOTIFICATION_IMPORTANCE = 4
}
}
Loading

0 comments on commit bc0c723

Please sign in to comment.