Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
ddb85b5
add: 리뷰 v2를 위한 compose 파일 세팅
HI-JIN2 May 28, 2025
9422c09
chore: rename "ReviewWritexxx"
HI-JIN2 May 28, 2025
18a75e7
feat: 리뷰 v2 ui 구현 중
HI-JIN2 May 28, 2025
095560c
feat: data 연결
HI-JIN2 May 28, 2025
244e76b
chore: refactoring
HI-JIN2 May 28, 2025
8fd2dd0
feat: button 구현
HI-JIN2 May 28, 2025
1b62b1f
chore: ratingbar 사이즈 조정
HI-JIN2 May 31, 2025
54f98cc
chore: lazy column의 item 디자인 컴포넌트로 분리
HI-JIN2 May 31, 2025
fe38d1f
chore: 디자인 시스템 변경 반영
HI-JIN2 May 31, 2025
8a8ca79
chore: add v2
HI-JIN2 Jun 1, 2025
6bb8507
fix: dto 및 Model 수정
HI-JIN2 Jun 1, 2025
4ce0215
feat: 리뷰 작성 compose ui
HI-JIN2 Aug 31, 2025
2ace963
feat: 좋아요 버튼 분리
HI-JIN2 Aug 31, 2025
e02990d
feat: 리뷰 리스트 화면 실제 api로 연결
HI-JIN2 Aug 31, 2025
d2d0863
feat: isEmpty flag 제거
HI-JIN2 Aug 31, 2025
4e584bd
feat: ui모델 중 하나만 값이 들어가고, 하나는 null인 문제를 update로 해결
HI-JIN2 Aug 31, 2025
da763c8
refactor: Meal/menu를 뷰모델이 아닌 usecase에서 분기처리하도록 수정
HI-JIN2 Aug 31, 2025
5ced24d
feat: 리뷰 작성하러 가기 버튼 클릭시 네비게이션
HI-JIN2 Aug 31, 2025
3f34774
feat: 메뉴명/Id 묶어서 네비게이션 인자로 보냄
HI-JIN2 Aug 31, 2025
5c83f49
feat: 메뉴명/Id 묶어서 네비게이션 인자로 보냄
HI-JIN2 Aug 31, 2025
3060a46
feat: write에서 meal일시 메뉴리스트 조회하도록 수정
HI-JIN2 Aug 31, 2025
7c0c107
feat: write에서 menu도 받을 수 있게 수정
HI-JIN2 Aug 31, 2025
590b385
feat: data 레이어에서 meal/menu 분기 처리
HI-JIN2 Aug 31, 2025
578fcfb
feat: menu Pair<Long, String>로 변경
HI-JIN2 Aug 31, 2025
a7a8d46
fix: 좋아요 버튼에 메뉴 번호 잘못들어가는 문제 수정
HI-JIN2 Aug 31, 2025
5db3add
fix: 리뷰 쓰고 뒤로가기
HI-JIN2 Aug 31, 2025
b3f7ded
fix: 갤러리
HI-JIN2 Aug 31, 2025
20510b0
feat: 사진 포함 작성 가능
HI-JIN2 Aug 31, 2025
1421c46
feat: 사진이 포함된 리뷰 보여주기
HI-JIN2 Aug 31, 2025
b16118d
feat: 좋아하는 메뉴 태그 반영
HI-JIN2 Aug 31, 2025
3aaf0fc
feat: 버튼 하단 고정
HI-JIN2 Aug 31, 2025
79de0bf
fix: progress bar 미동작 수정
HI-JIN2 Aug 31, 2025
e87ba1b
chore: package
HI-JIN2 Aug 31, 2025
c1c7261
chore: top bar 반영
HI-JIN2 Aug 31, 2025
b62b94e
feat: 바텀시트 연결
HI-JIN2 Aug 31, 2025
234cdc8
chore: 리베이스 실수
HI-JIN2 Sep 6, 2025
23f2692
chore: 리베이스 실수2
HI-JIN2 Sep 6, 2025
c992fe0
chore: reimport
HI-JIN2 Sep 6, 2025
f033200
chore: 리베이스 실수 Manifest
HI-JIN2 Sep 8, 2025
3b9f341
add: LikeButtonPreview
HI-JIN2 Sep 8, 2025
230c6dc
chore: UI 디테일 반영
HI-JIN2 Sep 8, 2025
c58659d
feat: EatSsuButton에 disable 상태 추가
HI-JIN2 Sep 8, 2025
dd33032
chore: code prettier
HI-JIN2 Sep 8, 2025
f24b116
fix: 리스트의 size로 구분
HI-JIN2 Sep 8, 2025
9ed9876
refactor: 리뷰 수정/삭제/내리뷰에 대해서 flow<base<dto>>가 아닌 suspend domain을 반환하도록 수정
HI-JIN2 Sep 8, 2025
3b9b794
refactor: bottom sheet를 재정의하도록 수정
HI-JIN2 Sep 13, 2025
9db31ae
feat: 내 리뷰 v2
HI-JIN2 Sep 16, 2025
ef8b1bb
feat: chip 좋아요 유무 반영
HI-JIN2 Sep 16, 2025
80f6bda
feat: 리뷰 삭제까지 연결
HI-JIN2 Sep 16, 2025
3ebc1a6
feat: 내리뷰 삭제까지 연결
HI-JIN2 Sep 16, 2025
6475765
feat: 삭제 후 리스트를 갱신하기 위해서 api 재호출
HI-JIN2 Sep 16, 2025
11d864b
feat: 리뷰 수정
HI-JIN2 Sep 17, 2025
1a330f5
feat: 리뷰 수정 중
HI-JIN2 Sep 20, 2025
2fd5fed
feat: 리뷰 작성할 수 있는 메뉴들 조회하는 API
HI-JIN2 Sep 20, 2025
ad5b77f
feat: getValidMenuForReview API 수정에 따른 변경
HI-JIN2 Sep 22, 2025
cdfd54e
feat: 둘러보기가 없으므로 @NoToken 제거
HI-JIN2 Sep 22, 2025
2cfa1a1
feat: < 뒤로가기 연결
HI-JIN2 Sep 22, 2025
4220ccf
chore: gray100 spacer 디테일
HI-JIN2 Sep 22, 2025
f03089c
chore: Loading일 때 메뉴명 보이게
HI-JIN2 Sep 22, 2025
c67a370
fix: 식단표 -> 리뷰 이동시에 두번 클릭되는거 막음
HI-JIN2 Sep 22, 2025
4d36311
fix: 리뷰 작성 최소조건 (별점)
HI-JIN2 Sep 22, 2025
bb1abb1
feat: 신고하기 연결
HI-JIN2 Sep 22, 2025
d8dd14c
chore: prettier
HI-JIN2 Sep 22, 2025
4ed12d5
Merge remote-tracking branch 'origin/feat/review-v2-ui' into feat/rev…
HI-JIN2 Sep 23, 2025
b8528a5
fix: menulist dto 변경으로 인한 수정
HI-JIN2 Sep 30, 2025
a4f2e36
fix: myreview user->review로 엔드포인트 변경
HI-JIN2 Sep 30, 2025
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
58 changes: 35 additions & 23 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,15 @@ android {
namespace = "com.eatssu.android"
compileSdk = 35

// S8: API 28
// S21: API 33
/**
* 현재 팀 내 안드로이드 OS 버전
* 진 S8: 9 (sdk 28)
* 진 S21: 14 (sdk 33)
* 윤소: 9
* 유리: 10
* 제훈: 14
*/

defaultConfig {
applicationId = "com.eatssu.android"
minSdk = 23
Expand Down Expand Up @@ -114,6 +121,7 @@ android {

dependencies {
implementation(project(":core:design-system"))
implementation(project(":core:design-system"))

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
Expand All @@ -126,6 +134,27 @@ dependencies {
implementation(libs.androidx.activity.ktx)
implementation(libs.androidx.fragment.ktx)

// Compose
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.lifecycle.viewmodel)
implementation(libs.androidx.compose.lifecycle.runtime)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.compose.theme.adapter)
implementation(libs.accompanist.appcompat.theme)
androidTestImplementation(libs.androidx.compose.bom)
debugImplementation(libs.androidx.compose.ui.test.manifest)

// navigation
implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.navigation.ui)
implementation(libs.androidx.navigation.compose)

//glance
implementation(libs.androidx.glance)
implementation(libs.androidx.glance.preview)
Expand Down Expand Up @@ -153,6 +182,9 @@ dependencies {
implementation(libs.glide)
kapt(libs.glide.compiler)

//coil: 이미지 로딩
implementation(libs.coil.compose)

//compressor: 이미지 압축
implementation(libs.compressor)

Expand All @@ -170,6 +202,7 @@ dependencies {
kapt(libs.androidx.hilt.compiler)
implementation(libs.androidx.hilt.common)
implementation(libs.androidx.hilt.work)
implementation(libs.hilt.navigation.compose)

// ViewModel and LiveData
implementation(libs.androidx.lifecycle.viewmodel.ktx)
Expand All @@ -189,27 +222,6 @@ dependencies {
// OSS
implementation(libs.oss.licenses)

// Compose
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.lifecycle.viewmodel)
implementation(libs.androidx.compose.lifecycle.runtime)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
// androidTestImplementation(libs.androidx.compose.ui.test.junit4)
implementation(libs.compose.theme.adapter)
implementation(libs.accompanist.appcompat.theme)
androidTestImplementation(libs.androidx.compose.bom)
debugImplementation(libs.androidx.compose.ui.test.manifest)

// navigation
implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.navigation.ui)

// worker (Kotlin + coroutines)
implementation(libs.androidx.work.runtime.ktx)

Expand Down
21 changes: 2 additions & 19 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,12 @@
</intent-filter>
</activity>
<activity
android:name=".presentation.cafeteria.review.write.ReviewWriteRateActivity"
android:name=".presentation.cafeteria.review.ReviewComposeActivity"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".presentation.cafeteria.review.write.menu.ReviewWriteMenuActivity"
android:exported="false" />
<activity
android:name=".presentation.login.LoginActivity"
android:exported="true">
Expand Down Expand Up @@ -186,14 +183,7 @@
android:value="" />
</activity>
<activity
android:name=".presentation.mypage.myreview.MyReviewListActivity"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".presentation.cafeteria.review.list.ReviewActivity"
android:name=".presentation.mypage.myreview.MyReviewListComposeActivity"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
Expand All @@ -214,13 +204,6 @@
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".presentation.cafeteria.review.modify.ModifyReviewActivity"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package com.eatssu.android.data.dto.request

import com.eatssu.android.data.dto.request.WriteMenuReviewRequest.MenuLike
import com.google.gson.annotations.SerializedName

data class ModifyReviewRequest(
@SerializedName("mainRating") var mainRating: Int? = null,
@SerializedName("amountRating") var amountRating: Int? = null,
@SerializedName("tasteRating") var tasteRating: Int? = null,
@SerializedName("content") var content: String? = null,
)

@SerializedName("rating") var rating: Int? = null,
@SerializedName("menuLikes") var menuLikes: MenuLike? = MenuLike(),
@SerializedName("content") var content: String? = null
) {
data class MenuLikes(

@SerializedName("menuId") var menuId: Long? = null,
@SerializedName("isLike") var isLike: Boolean? = null

)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@ package com.eatssu.android.data.dto.request
import com.google.gson.annotations.SerializedName

data class ReportRequest(
@SerializedName("reviewId")
val reviewId: Long,

@SerializedName("reportType")
val reportType: String,

@SerializedName("content")
val content: String,
@SerializedName("reviewId") var reviewId: Long? = null,
@SerializedName("reportType") var reportType: String? = null,
@SerializedName("content") var content: String? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,20 @@ package com.eatssu.android.data.dto.request

import com.google.gson.annotations.SerializedName

data class WriteReviewRequest(

data class WriteMenuReviewRequest(
@SerializedName("menuId") var menuId: Int? = null,
@SerializedName("mainRating") var mainRating: Int? = null,
@SerializedName("amountRating") var amountRating: Int? = null,
@SerializedName("tasteRating") var tasteRating: Int? = null,
@SerializedName("content") var content: String? = null,
@SerializedName("imageUrl") var imageUrl: String? = null,
@SerializedName("menuLike") var menuLike: MenuLike? = MenuLike()
) {
data class MenuLike(

)
@SerializedName("menuId") var menuId: Long? = null,
@SerializedName("isLike") var isLike: Boolean? = null

)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.eatssu.android.data.dto.request

import com.google.gson.annotations.SerializedName


data class WriteMealReviewRequest(
@SerializedName("mealId") var mealId: Int? = null,
@SerializedName("rating") var rating: Int? = null,
@SerializedName("menuLikes") var menuLikes: List<MenuLikes> = arrayListOf(),
@SerializedName("content") var content: String? = null,
@SerializedName("imageUrls") var imageUrls: List<String> = arrayListOf()

) {
data class MenuLikes(
@SerializedName("menuId") var menuId: Long? = null,
@SerializedName("isLike") var isLike: Boolean? = null
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,29 @@ package com.eatssu.android.data.dto.response
import com.eatssu.android.domain.model.ReviewInfo
import com.google.gson.annotations.SerializedName

data class GetMealReviewInfoResponse(

@SerializedName("menuNames") var menuNames: ArrayList<String> = arrayListOf(),
data class MealReviewInfoResponse(
@SerializedName("menuNames") var menuNames: List<String>? = null,
@SerializedName("totalReviewCount") var totalReviewCount: Int? = null,
@SerializedName("mainRating") var mainRating: Double? = null,
@SerializedName("amountRating") var amountRating: Double? = null,
@SerializedName("tasteRating") var tasteRating: Double? = null,
@SerializedName("reviewRatingCount") var reviewRatingCount: ReviewRatingCount = ReviewRatingCount(),

) {
@SerializedName("likeCount") var likeCount: Int? = null,
@SerializedName("reviewRatingCount") var reviewRatingCount: ReviewRatingCount? = ReviewRatingCount()
) {
data class ReviewRatingCount(

@SerializedName("oneStarCount") var oneStarCount: Int? = null,
@SerializedName("twoStarCount") var twoStarCount: Int? = null,
@SerializedName("threeStarCount") var threeStarCount: Int? = null,
@SerializedName("fourStarCount") var fourStarCount: Int? = null,
@SerializedName("fiveStarCount") var fiveStarCount: Int? = null,

)

@SerializedName("fiveStarCount") var fiveStarCount: Int? = null
)
}

fun GetMealReviewInfoResponse.asReviewInfo() = ReviewInfo(

name = menuNames.joinToString(separator = "+"),
fun MealReviewInfoResponse.toDomain() = ReviewInfo(
name = menuNames?.joinToString(separator = " + ") ?: "",
reviewCnt = totalReviewCount ?: 0,
mainRating = mainRating ?: 0.0,
amountRating = amountRating ?: 0.0,
tasteRating = tasteRating ?: 0.0,
one = reviewRatingCount.oneStarCount ?: 0,
two = reviewRatingCount.twoStarCount ?: 0,
three = reviewRatingCount.threeStarCount ?: 0,
four = reviewRatingCount.fourStarCount ?: 0,
five = reviewRatingCount.fiveStarCount ?: 0,
one = reviewRatingCount?.oneStarCount ?: 0,
two = reviewRatingCount?.twoStarCount ?: 0,
three = reviewRatingCount?.threeStarCount ?: 0,
four = reviewRatingCount?.fourStarCount ?: 0,
five = reviewRatingCount?.fiveStarCount ?: 0,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.eatssu.android.data.dto.response

import com.eatssu.android.domain.model.Review
import com.google.gson.annotations.SerializedName

data class MealReviewListResponse(
@SerializedName("numberOfElements") var numberOfElements: Int? = null,
@SerializedName("hasNext") var hasNext: Boolean? = null,
@SerializedName("dataList") var dataList: ArrayList<DataList> = arrayListOf()
) {
data class DataList(
@SerializedName("reviewId") var reviewId: Long? = null,
@SerializedName("writerId") var writerId: Long? = null,
@SerializedName("isWriter") var isWriter: Boolean? = null,
@SerializedName("writerNickname") var writerNickname: String? = null,
@SerializedName("rating") var rating: Int? = null,
@SerializedName("writtenAt") var writtenAt: String? = null,
@SerializedName("content") var content: String? = null,
@SerializedName("imageUrls") var imageUrls: ArrayList<String> = arrayListOf(),
@SerializedName("menuList") var menuList: ArrayList<MenuList> = arrayListOf()
) {
data class MenuList(
@SerializedName("id") var id: Long? = null,
@SerializedName("name") var name: String? = null,
@SerializedName("isLike") var isLike: Boolean? = null
)
}
}


fun MealReviewListResponse?.toDomain(): List<Review> {
// MealReviewListResponse 객체 자체가 null이면 emptyList() 반환
return this?.dataList?.map { data ->
Review(
reviewId = data.reviewId ?: 0,
isWriter = data.isWriter ?: false,
menuList = data.menuList.map {
Review.Menu(
menuId = it.id ?: -1L,
name = it.name ?: "",
isLike = it.isLike ?: false
)
},
writerNickname = data.writerNickname ?: "유저",
mainGrade = data.rating ?: 0,
writeDate = data.writtenAt ?: "",
content = data.content ?: "",
imgUrl = data.imageUrls.firstOrNull(),
)
} ?: emptyList()
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
package com.eatssu.android.data.dto.response

import com.eatssu.android.domain.model.MenuMini
import com.google.gson.annotations.SerializedName

data class MenuOfMealResponse(
@SerializedName("briefMenus") var briefMenus: ArrayList<MenusInformation> = arrayListOf(),
@SerializedName("menuList") var menuList: ArrayList<MenuList> = arrayListOf()
)

data class MenusInformation(
data class MenuList(

@SerializedName("menuId") var menuId: Long,
@SerializedName("name") var name: String,
@SerializedName("menuId") var menuId: Long? = null,
@SerializedName("name") var name: String? = null

)

fun MenuOfMealResponse.toMenuMiniList(): List<MenuMini> {
return briefMenus.map { it.toMenuMini() }
}
)

fun MenusInformation.toMenuMini(): MenuMini {
return MenuMini(
id = this.menuId,
name = this.name
)
fun MenuOfMealResponse.toDomain(): List<Pair<Long, String>> {
return menuList.map {
(it.menuId ?: -1L) to (it.name ?: "")
}
}
Loading