F1. 경매 등록

F1. 경매 등록

1. 기능명

경매 등록 · 수정 · 삭제

2. 기능 목적

사용자가 나눌 물건을 등록하고, 어떤 사연을 듣고 싶은지 밝혀 경매를 연다.

  • 물건의 값을 매기지 않는다. 정하는 것은 무엇을 나누는가언제까지인가 둘뿐이다
  • 로그인한 모든 사용자가 경매를 열 수 있다. 별도의 자격이나 유형 선언을 요구하지 않는다

변경점 — 기존에는 '경매진행자' 모드에서만 등록 버튼이 보였고, 모드가 맞지 않으면 자기 경매도 수정할 수 없었다.

3. 동작 방식

3.1 진입

항목내용
진입점홈·경매 목록 화면 우측 하단 + 버튼
노출 대상로그인한 사용자 전원
경로/auctions/write

3.2 선행 조건 — 없다

경매 등록에 배송지를 요구하지 않는다. 로그인만 하면 연다.

기존에는 배송지를 선행 조건으로 두고 없으면 등록 화면으로 보냈다. 세 가지가 어긋나 있었다.

어긋난 점실제
받아둔 주소를 아무도 읽지 않았다auctions.address_id 는 생성 때 한 번 쓰고 끝이었다. 어떤 화면도 보여주지 않았고, 유일한 소비자가 "이 배송지는 지울 수 없다"고 막는 FK 였다
필요한 사람의 주소가 아니었다받아둔 것은 주최자 본인의 주소다. 택배로 보내려면 정작 낙찰자의 주소가 필요한데 어디에서도 받지 않는다
전달 방법이 아직 정해지지 않았다택배일지 직거래일지는 낙찰 뒤 채팅에서 정한다 (F6 2). 직거래면 주소 자체가 필요 없다

즉 아직 정해지지도 않은 전달 방법을 위해, 엉뚱한 사람의 주소를, 아무도 읽지 않는 채로 받으려고 핵심 행동을 막고 있었다.

배송지는 선택으로 남긴다. 이미 등록해 둔 주최자에게는 발송지 스냅샷으로 붙여 두되(auctions.address_id, nullable), 없어도 경매는 열린다. 등록·수정 경로는 마이페이지에 그대로 있다 (F12).

3.3 입력 항목

입력은 4개뿐이다.

항목필수방식
이미지O1 ~ 3장
제목O직접 입력 (공백만 불가)
사연 요청 설명O직접 입력
기간O버튼 선택1일 · 3일 · 7일

포인트 입력이 없다. 입찰 단계는 전 서비스 공통 고정이다 (F3 3.3). 주최자가 정할 것은 무엇을 나누는가언제까지인가 둘뿐이다.

기간은 날짜·시간을 고르지 않는다

날짜 피커와 시간 피커 대신 버튼 3개에서 고른다.

[ 1일 ]  [ 3일 ]  [ 7일 ]
  • 마감 시각은 등록 시점 + 선택한 기간으로 자동 계산된다
  • 과거 날짜·너무 짧은 기간 같은 검증이 필요 없다. 선택지가 곧 검증이다
  • 입찰(F3)과 같은 방식이라 조작이 일관된다

3.4 등록

  1. 입력값 검증 통과 → 경매 생성
  2. 상태를 진행중으로 설정
  3. 등록한 경매 상세 화면으로 이동
  4. 이 시점부터 등록자는 해당 경매의 주최자가 된다 (00-관계-판정)

3.5 수정

항목내용
권한주최자만 (auction.user_id === 사용자 ID)
진입경매 상세 상단 수정 버튼 → /auctions/[id]/edit
판정소유 여부만으로 판단한다. 다른 조건을 추가하지 않는다

3.6 삭제

항목내용
권한주최자만
절차삭제 버튼 → 확인 다이얼로그 → 삭제 → 홈으로 이동

삭제 조건 — 확정

사연이 1건이라도 등록된 경매는 삭제할 수 없다.

사연 수삭제
0건가능
1건 이상불가 — 삭제 버튼을 비활성화하고 사유를 표시한다

참여자의 글과 포인트를 보호하기 위한 규칙이다. 경매를 삭제하면 참여자가 쓴 사연과 다른 사용자가 누른 공감이 함께 사라진다. 주최자 한 사람의 조작으로 제3자의 기록이 소멸하는 것을 허용하지 않는다.

안내 문구

참여자가 있어 삭제할 수 없어요. 문의가 필요하면 채팅으로 안내해주세요.

알려진 한계

주최자에게 사정이 생겨 물건을 전달할 수 없게 되어도 경매를 내릴 수 없다. 이 경우 주최자는 1:1 채팅(F6)으로 참여자에게 상황을 안내한다. 경매 취소 기능은 이번 범위에 포함하지 않는다 (PRD 7.3 E1).

4. 예외 처리

4.1 진입·권한

상황처리
비회원이 등록 화면 진입홈으로 이동시키고 로그인을 유도한다
배송지 미등록막지 않는다. 그대로 등록을 진행한다 (3.2)
타인 경매의 auction_id로 수정 진입홈으로 이동시킨다. 주소창 직접 입력도 동일하게 차단한다
존재하지 않는 auction_id홈으로 이동시킨다
마감된 경매 수정 시도수정 버튼을 노출하지 않는다. 직접 진입 시 경매 상세로 되돌린다

4.2 입력 검증

검증 실패 시 제출을 차단하고, 해당 입력 항목 아래 인라인으로 사유를 표시한다.

상황안내
필수 항목 누락"필수 입력 항목입니다"
제목·설명 길이 초과남은 글자 수를 실시간 표시하고, 한도 도달 시 경고색으로 전환
기간 미선택제출을 차단한다. 기본값을 1일로 미리 선택해 둔다
이미지 미첨부"이미지를 1장 이상 등록해주세요"
이미지 3장 초과추가 버튼을 비활성화한다

기간을 버튼으로 고르므로 마감 시각 관련 검증이 없다.

4.3 처리 실패

상황처리
이미지 업로드 실패실패한 이미지만 표시하고 재시도를 제공한다. 입력한 나머지 값은 유지한다
등록·수정 요청 실패실패 안내를 띄우고 입력값을 유지한 채 화면에 머무른다. 절대 초기화하지 않는다
사연이 있는 경매의 삭제 시도삭제 버튼을 비활성화한다. 요청이 도달해도 서버에서 거부한다
삭제 확인 직전에 사연이 등록됨서버가 삭제 시점에 사연 수를 재확인해 거부하고, "참여자가 생겨 삭제할 수 없어요"를 안내한다
삭제 요청 실패실패 안내 후 경매 상세에 머무른다
요청 처리 중 중복 제출처리 중에는 제출 버튼을 비활성화한다

5. 완료 조건

#조건
1로그인한 모든 사용자에게 + 버튼이 노출된다. 유형 조건이 없다
2배송지가 없어도 경매를 등록할 수 있다. 등록 도중 다른 화면으로 끌려가지 않는다
3주최자는 어떤 사전 설정도 없이 자기 경매를 수정·삭제할 수 있다
4타인 경매의 수정 진입이 주소창 직접 입력을 포함해 차단된다
54.2의 모든 검증 실패가 제출을 차단하고 사유를 표시한다
6등록·수정 실패 시 입력값이 유지된다
7등록 직후 등록자가 해당 경매의 주최자로 판정된다
8입력 항목이 4개다. 포인트 입력과 날짜·시간 피커가 없다
9기간이 버튼 3개(1일·3일·7일) 로만 선택된다