- FeedbackDialog: 잘 놀았어요/안 맞았어요 + BAD 사유 선택·추가입력 - 채팅 '산책 완료' 버튼 + 2시간 FEEDBACK_REQUEST 알림 → 피드백 팝업 - AffinityBadges: 동네 찰떡지수(전체), 우리 찰떡지수(매칭 쌍·유료 게이팅) 스팟 메이트/AI 추천 카드 및 우리 강아지 프로필에 노출 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,8 @@ export const useMatchingStore = defineStore('matching', () => {
|
||||
const received = ref<ReceivedMatch[]>([])
|
||||
const sentPendingTargetIds = ref<Set<number>>(new Set())
|
||||
const openChatMatchId = ref<number | null>(null)
|
||||
/** 산책 후 피드백(찰떡지수) 팝업을 띄울 매칭 id — 알림 수신 시 세팅. */
|
||||
const feedbackMatchId = ref<number | null>(null)
|
||||
|
||||
let socket: ReturnType<typeof createUserNotifications> | null = null
|
||||
let myDogId: number | null = null
|
||||
@@ -57,6 +59,9 @@ export const useMatchingStore = defineStore('matching', () => {
|
||||
if (n.type === 'ACCEPTED') {
|
||||
openChatMatchId.value = n.matchId // 신청자: 수락됨 → 채팅 열기
|
||||
}
|
||||
if (n.type === 'FEEDBACK_REQUEST') {
|
||||
feedbackMatchId.value = n.matchId // 2시간 후: 찰떡지수 피드백 팝업
|
||||
}
|
||||
if (myDogId != null) void refresh(myDogId) // 목록/진행중 동기화
|
||||
}
|
||||
|
||||
@@ -86,6 +91,7 @@ export const useMatchingStore = defineStore('matching', () => {
|
||||
received,
|
||||
sentPendingTargetIds,
|
||||
openChatMatchId,
|
||||
feedbackMatchId,
|
||||
connect,
|
||||
disconnect,
|
||||
refresh,
|
||||
@@ -103,6 +109,8 @@ function colorFor(type: MatchNotification['type']): string {
|
||||
case 'REJECTED':
|
||||
case 'EXPIRED':
|
||||
return 'grey-8'
|
||||
case 'FEEDBACK_REQUEST':
|
||||
return 'teal'
|
||||
default:
|
||||
return 'primary'
|
||||
}
|
||||
@@ -116,6 +124,8 @@ function iconFor(type: MatchNotification['type']): string {
|
||||
return 'celebration'
|
||||
case 'EXPIRED':
|
||||
return 'schedule'
|
||||
case 'FEEDBACK_REQUEST':
|
||||
return 'rate_review'
|
||||
default:
|
||||
return 'heart_broken'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user