F4. 공감(좋아요)
핵심 기능 — 이 서비스의 낙찰 방식을 결정하는 기능이다.
1. 기능명
사연 공감(좋아요) 및 가중치 반영
2. 기능 목적
사연에 대한 공감이 그 사연의 입찰 포인트를 실제로 올린다.
- 가격 경쟁이 아니라 공감이 낙찰을 결정하게 한다
- 주최자의 공감에 큰 가중치를 두어, 물건을 내놓은 사람의 마음이 결과에 반영되게 한다
- 주최자가 결과에 개입하는 수단을 공감 하나로 일원화한다
변경점 — 기존에는 주최자가 사연에 직접 포인트를 얹는 '가점 입찰' 기능이 별도로 있었다. 공감 가중치와 목적이 겹치고 규칙을 복잡하게 만들어 제거한다.
3. 동작 방식
3.1 가중치
누가 공감했는지에 따라 오르는 포인트가 다르다.
| 공감한 사람의 관계 | 오르는 포인트 |
|---|---|
| 주최자 | +50 P |
| 참여자 | +10 P |
| 방문자 | +10 P |
판정 기준은
auction.user_id === 사용자 ID하나다 (00-관계-판정). 사용자 유형을 조회하지 않는다.
3.2 반영
사연의 입찰 포인트 += 가중치
공감은 사연의 입찰 포인트에 직접 더해진다. 별도의 카운터가 아니라 낙찰 계산에 쓰이는 값이다.
3.3 토글
공감은 켜고 끌 수 있다.
| 동작 | 처리 |
|---|---|
| 공감 | 공감 목록에 추가 + 입찰 포인트 가중치만큼 증가 |
| 공감 해제 | 공감 목록에서 제거 + 입찰 포인트 가중치만큼 감소 |
해제 시 차감액은 공감할 때 적용된 가중치와 동일해야 한다.
3.4 제한
| 대상 | 공감 |
|---|---|
| 비회원 | - |
| 자기가 쓴 사연 | - |
| 그 외 모든 사연 | O |
3.5 처리 순서
동시 조작으로 값이 어긋나지 않도록, 클릭 시점의 최신 값을 기준으로 계산한다.
- 클릭 시점에 해당 사연의 최신 공감 목록과 입찰 포인트를 다시 조회한다
- 조회한 값을 기준으로 공감 목록과 입찰 포인트를 계산한다
- 갱신 요청을 보낸다
- 성공 시 화면을 갱신하고 안내를 표시한다
3.6 표시
- 사연 카드에 공감 수와 공감 여부(활성/비활성)를 표시한다
- 사연의 현재 입찰 포인트를 함께 표시한다
- 공감 아이콘의 활성 색은 경고색(레드)이 아닌 서비스 기본 강조색 체계를 따른다
4. 예외 처리
| 상황 | 처리 |
|---|---|
| 비회원이 공감 시도 | 로그인 화면으로 유도하고, 로그인 후 원래 경매로 복귀시킨다 |
| 자기 사연에 공감 시도 | 공감 버튼을 노출하지 않는다 |
| 마감된 경매 | 공감을 차단한다. 기존 공감 수는 그대로 표시하되 버튼은 비활성화한다 |
| 중복 클릭 / 빠른 연타 | 처리 중에는 버튼을 비활성화한다. 요청이 중복 반영되지 않아야 한다 |
| 동시에 여러 사용자가 공감 | 3.5에 따라 클릭 시점의 최신 값을 조회해 계산한다. 값이 덮어써지지 않아야 한다 |
| 공감 요청 실패 | 화면 상태를 원래대로 되돌리고 실패 안내를 표시한다. 성공한 것처럼 보이지 않아야 한다 |
| 공감 해제 요청 실패 | 동일하게 원래 상태로 되돌린다 |
| 사연 정보 조회 실패 | 공감 버튼을 비활성 상태로 두고 재시도를 안내한다 |
| 가중치 판정 불가 (경매 정보 조회 실패) | 공감을 진행하지 않는다. 잘못된 가중치로 반영되는 것보다 실패가 안전하다 |
| 공감 직후 사연이 삭제됨 | 갱신 요청이 실패하므로 목록을 다시 조회해 화면을 맞춘다 |
5. 완료 조건
| # | 조건 |
|---|---|
| 1 | 주최자의 공감이 +50 P, 그 외 사용자의 공감이 +10 P 반영된다 |
| 2 | 가중치 판정에 users.role을 조회하지 않는다. 경매 소유 여부만 사용한다 |
| 3 | 공감 해제 시 적용된 가중치와 같은 값이 차감된다 |
| 4 | 자기가 쓴 사연에는 공감 버튼이 노출되지 않는다 |
| 5 | 마감된 경매에서 공감이 차단된다 |
| 6 | 연타·동시 조작에도 입찰 포인트가 어긋나지 않는다 |
| 7 | 요청 실패 시 화면이 원래 상태로 복원된다 |
| 8 | 주최자 가점 입찰 기능이 서비스에 존재하지 않는다 |
| 9 | 공감으로 오른 포인트가 낙찰 계산(F5)에 그대로 반영된다 |