Skip to content

Commit

Permalink
v1.2.0
Browse files Browse the repository at this point in the history
- ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ์Šฌ๋ผ์ด๋” ๋””์ž์ธ ๋ณ€๊ฒฝ
- ๋”ฅ๋งํฌ ์ง€์› ๋ฐฉ์‹ ๋ณ€๊ฒฝ (11๋ฒˆ๊ฐ€์™€ ๋„ค์ด๋ฒ„ ์Šค๋งˆํŠธ์Šคํ† ์–ด)
- ์ธ์•ฑ ์—…๋ฐ์ดํŠธ ๊ตฌํ˜„
- ์ƒํ’ˆ ์ตœ๋Œ€ ๋“ฑ๋ก ๊ฐœ์ˆ˜ ์ œํ•œ
- ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ, ์ด๋ฉ”์ผ ์ธ์ฆ ๊ตฌํ˜„

Co-Authored-By: ootr47 <[email protected]>
Co-Authored-By: EunhoKang <[email protected]>
Co-Authored-By: ByeongIk Choi <[email protected]>
Co-Authored-By: ์†๋ฌธ๊ธฐ <[email protected]>
  • Loading branch information
5 people committed Apr 1, 2024
1 parent f818ce8 commit ee2e43b
Show file tree
Hide file tree
Showing 101 changed files with 3,296 additions and 385 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/firebase-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:

jobs:
deploy:
runs-on: ubuntu-latest
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -41,4 +41,4 @@ jobs:
serviceCredentialsFileContent: ${{ secrets.FIREBASE_APP_DISTRIBUTION }}
groups: tester
releaseNotesFile: android/release_notes.txt
file: android/app/build/outputs/apk/release/app-release.apk
file: android/app/build/outputs/bundle/release/app-release.aab
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ PriceGuard๋Š” ๊ตญ๋‚ด ์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๋“ค์˜ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์•ฑ ๋‚ด์—์„œ ์›ํ•˜๋Š” ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ ๋ณ€ํ™”๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
```

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ [๋งํฌ](https://appdistribution.firebase.google.com/pub/i/b299ae01bd67c829)๋ฅผ ํ†ตํ•ด ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<a href='https://play.google.com/store/apps/details?id=app.priceguard&utm_source=github&utm_campaign=gh-readme'>
<img width="250px" alt='๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/ko_badge_web_generic.png'/>
</a>

## ๐Ÿฅ… ๊ธฐ์ˆ ์  ๋„์ „

Expand Down Expand Up @@ -129,7 +133,7 @@ PriceGuard๋Š” ๊ตญ๋‚ด ์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๋“ค์˜ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
<img src="https://img.shields.io/badge/Firebase%20Cloud%20Messaging-FFA000?logo=firebase&logoColor=FFFFFF">
<img src="https://img.shields.io/badge/Material%20Design-757575?logo=materialdesign&logoColor=FFFFFF">
<img src="https://img.shields.io/badge/Retrofit-3E4348?logo=square&logoColor=FFFFFF">
<img src="https://camo.githubusercontent.com/c71519c505cafc8d4cc686186e518c03d489b6e6038f3fdcd2d57e9c87d308f3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f726f7574696e65732d6633383431633f7374796c653d666f7274686562616765266c6f676f3d4b6f746c696e266c6f676f436f6c6f723d626c756576696f6c6574">
<img src="https://img.shields.io/badge/Coroutines-7F52FF?logo=kotlin&logoColor=FFFFFF">
</td>
</tr>
<tr>
Expand All @@ -154,9 +158,9 @@ PriceGuard๋Š” ๊ตญ๋‚ด ์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๋“ค์˜ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
<img src="https://img.shields.io/badge/Firebase%20App%20Distribution-FFA000?logo=firebase&logoColor=FFFFFF">
<img src="https://img.shields.io/badge/Sonatype-1B1C30?logo=sonatype&logoColor=FFFFFF">
<img src="https://img.shields.io/badge/Nginx-014532?logo=Nginx&logoColor=009639&">
<img src="https://img.shields.io/badge/Naver Cloud Platform-03C75A?logo=naver&logoColor=ffffff">
<img src="https://img.shields.io/badge/Oracle Cloud-F80000?logo=oracle&logoColor=ffffff">
<img src="https://img.shields.io/badge/Docker-2496ED?logo=Docker&logoColor=white">
<img src="https://camo.githubusercontent.com/6841025a5cd57f3ac26ae8b48390b17454c7a553e747ed06e569edd2c47e9b8e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f47697448756220416374696f6e732d3230383846463f7374796c653d666f7274686562616765266c6f676f3d47697448756220416374696f6e73266c6f676f436f6c6f723d626c61636b">
<img src="https://img.shields.io/badge/GitHub%20Actions-2088FF?logo=githubactions&logoColor=white">
</td>
</tr>
<tr>
Expand Down Expand Up @@ -215,7 +219,7 @@ PriceGuard๋Š” ๊ตญ๋‚ด ์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๋“ค์˜ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
## ๐Ÿ“บ๏ธŽ ์ž‘๋™ ํ™”๋ฉด
| ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… | ์ƒํ’ˆ ์ถ”์ฒœ/์ƒํ’ˆ ์ƒ์„ธ | ์ƒํ’ˆ ์ถ”๊ฐ€ / ๋งˆ์ดํŽ˜์ด์ง€ | ์•Œ๋žŒ ํ™•์ธ |
| ----------- | --------------- | ----------------- | ------- |
|<img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/5508d8e1-f0ad-44d8-9278-70e9e41b5df0" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/27e4d667-0ffb-4be9-ae22-fae9cab068e9" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/7c418d77-eca0-437c-b220-22ad89fdc76d" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/4a111411-46b6-4f86-b750-5827948d246b" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/e6d89da9-cb39-49f2-b0ee-073aa666a695" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/f7778bae-e10c-4459-98d6-a74bbc686efa" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/37584805/a43b64c9-2b6b-431c-8fbb-a93d8560f605" width="200"/> |
|<img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/f5c9cbab-c274-48b3-af62-76c74cf3a24e" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/cc932b39-9a82-4790-afc9-75d942b07c2f" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/1632223d-62b4-410d-8ebd-619fdc10afe5" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/edd8efc4-ec57-480e-b14e-ee1ce410f095" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/78a6263e-f589-4fe3-be9d-5867c7602c47" width="200" height="400"/> <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/a8007a7f-b7bb-4181-a125-4ab0aceb0362" width="200" height="400"/> | <img src="https://github.com/boostcampwm2023/and09-PriceGuard/assets/83055885/ccdfb93e-ed85-4b57-9b87-e16e34f5fd96" width="200"/> |

## :memo: ๊ธฐ์ˆ  ๋ฌธ์„œ
- [Feature List](https://docs.google.com/spreadsheets/d/1e1Z9YpHPZxcBZN2XBPeoaz88hDby6WG5jmMz8xjqMrU/edit#gid=1955813262)
Expand Down
2 changes: 2 additions & 0 deletions android/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions android/.idea/appInsightsSettings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 14 additions & 12 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ android {
applicationId = "app.priceguard"
minSdk = 29
targetSdk = 34
versionCode = 8
versionName = "1.0.1"
versionCode = 10
versionName = "1.2.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down Expand Up @@ -58,7 +58,7 @@ android {

dependencies {
// Firebase
implementation(platform("com.google.firebase:firebase-bom:32.6.0"))
implementation(platform("com.google.firebase:firebase-bom:32.8.0"))
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-perf")
Expand All @@ -67,11 +67,9 @@ dependencies {
// Android
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.10.0")
implementation("androidx.activity:activity-ktx:1.8.1")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.activity:activity-ktx:1.8.2")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")

// Retrofit, Serialization
implementation("com.squareup.retrofit2:retrofit:2.9.0")
Expand All @@ -82,7 +80,7 @@ dependencies {
implementation("androidx.datastore:datastore-preferences:1.0.0")

// Hilt
val hiltVersion = "2.48.1"
val hiltVersion = "2.49"
implementation("com.google.dagger:hilt-android:$hiltVersion")
kapt("com.google.dagger:hilt-android-compiler:$hiltVersion")

Expand All @@ -92,7 +90,7 @@ dependencies {
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

// Navigation
val navVersion = "2.7.5"
val navVersion = "2.7.7"
implementation("androidx.navigation:navigation-fragment-ktx:$navVersion")
implementation("androidx.navigation:navigation-ui-ktx:$navVersion")

Expand All @@ -107,11 +105,15 @@ dependencies {

// Worker
implementation("androidx.work:work-runtime-ktx:2.9.0")
implementation("androidx.hilt:hilt-work:1.1.0")
kapt("androidx.hilt:hilt-compiler:1.1.0")
implementation("androidx.hilt:hilt-work:1.2.0")
kapt("androidx.hilt:hilt-compiler:1.2.0")

// Material chart
implementation("app.priceguard:materialchart:0.2.1")
implementation("app.priceguard:materialchart:0.2.2")

// In app update
implementation("com.google.android.play:app-update:2.1.0")
implementation("com.google.android.play:app-update-ktx:2.1.0")
}

kapt {
Expand Down
14 changes: 9 additions & 5 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_priceguard_notification" />

<activity
android:name=".ui.additem.link.LinkHelperWebViewActivity"
android:exported="false" />
<activity
android:name=".ui.splash.SplashScreenActivity"
android:exported="true">
Expand Down Expand Up @@ -78,6 +74,15 @@
<activity
android:name="com.google.android.gms.oss.licenses.OssLicensesActivity"
android:theme="@style/Theme.PriceGuard.WithActionBar" />
<activity
android:name=".ui.additem.link.LinkHelperWebViewActivity"
android:exported="false" />
<activity
android:name=".ui.home.mypage.DeleteAccountActivity"
android:exported="false" />
<activity
android:name=".ui.login.findpassword.FindPasswordActivity"
android:exported="false" />

<service
android:name=".service.PriceGuardFirebaseMessagingService"
Expand All @@ -91,7 +96,6 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />

</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package app.priceguard.data.datastore

interface TokenDataSource {
suspend fun saveTokens(accessToken: String, refreshToken: String)
suspend fun saveEmailVerified(isVerified: Boolean)
suspend fun getAccessToken(): String?
suspend fun getRefreshToken(): String?
suspend fun getIsEmailVerified(): Boolean?
suspend fun clearTokens()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app.priceguard.data.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.stringPreferencesKey
import app.priceguard.di.TokensQualifier
Expand All @@ -15,6 +16,7 @@ class TokenDataSourceImpl @Inject constructor(

private val accessTokenKey = stringPreferencesKey("access_token")
private val refreshTokenKey = stringPreferencesKey("refresh_token")
private val isEmailVerifiedKey = booleanPreferencesKey("is_email_verified")

override suspend fun saveTokens(accessToken: String, refreshToken: String) {
dataStore.edit { preferences ->
Expand All @@ -23,6 +25,12 @@ class TokenDataSourceImpl @Inject constructor(
}
}

override suspend fun saveEmailVerified(isVerified: Boolean) {
dataStore.edit { preferences ->
preferences[isEmailVerifiedKey] = isVerified
}
}

override suspend fun getAccessToken(): String? {
return dataStore.data.map { preferences ->
preferences[accessTokenKey]
Expand All @@ -35,6 +43,12 @@ class TokenDataSourceImpl @Inject constructor(
}.first()
}

override suspend fun getIsEmailVerified(): Boolean? {
return dataStore.data.map { preferences ->
preferences[isEmailVerifiedKey]
}.first()
}

override suspend fun clearTokens() {
dataStore.edit { preferences ->
preferences.clear()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable

@Serializable
data class ProductAddRequest(
val shop: String,
val productCode: String,
val targetPrice: Int
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.priceguard.data.dto.deleteaccount

import kotlinx.serialization.Serializable

@Serializable
data class DeleteAccountRequest(
val email: String,
val password: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.priceguard.data.dto.deleteaccount

import kotlinx.serialization.Serializable

@Serializable
data class DeleteAccountResponse(
val statusCode: Int,
val message: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package app.priceguard.data.dto.isverified

import kotlinx.serialization.Serializable

@Serializable
data class IsEmailVerifiedResponse(
val statusCode: Int,
val message: String,
val verified: Boolean? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package app.priceguard.data.dto.password

import kotlinx.serialization.Serializable

@Serializable
data class ResetPasswordRequest(
val password: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.priceguard.data.dto.password

import kotlinx.serialization.Serializable

@Serializable
data class ResetPasswordResponse(
val statusCode: Int,
val message: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable

@Serializable
data class PricePatchRequest(
val shop: String,
val productCode: String,
val targetPrice: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ import kotlinx.serialization.Serializable
data class SignupRequest(
val email: String,
val userName: String,
val verificationCode: String,
val password: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package app.priceguard.data.dto.verifyemail

import kotlinx.serialization.Serializable

@Serializable
data class RequestVerificationCodeRequest(
val email: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.priceguard.data.dto.verifyemail

import kotlinx.serialization.Serializable

@Serializable
data class RequestVerificationCodeResponse(
val statusCode: Int,
val message: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.priceguard.data.dto.verifyemail

import kotlinx.serialization.Serializable

@Serializable
data class VerifyEmailRequest(
val email: String,
val verificationCode: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package app.priceguard.data.dto.verifyemail

import kotlinx.serialization.Serializable

@Serializable
data class VerifyEmailResponse(
val statusCode: Int,
val message: String,
val verifyToken: String? = null
)
Loading

0 comments on commit ee2e43b

Please sign in to comment.