Skip to content

feat: 외부인 행사 신청·설문 응답 흐름 보강 및 설문 질문 archive 모델 도입#546

Merged
Yun-YeoJun merged 3 commits into
mainfrom
frontend-yyjun-admin-page
May 2, 2026
Merged

feat: 외부인 행사 신청·설문 응답 흐름 보강 및 설문 질문 archive 모델 도입#546
Yun-YeoJun merged 3 commits into
mainfrom
frontend-yyjun-admin-page

Conversation

@Yun-YeoJun

Copy link
Copy Markdown
Member

Summary

  • 외부인 행사 신청 흐름 관련 백엔드/프론트엔드 보강 (관리자 응답 목록·신청자 페이지에 외부인 응답 표시, 행사 이미지 공개 다운로드 URL)
  • Event 엔티티 연관관계 정리 및 이미지 공개 다운로드 API 추가
  • 설문 질문/옵션/행의 soft-delete를 archived_at 기반 archive 모델로 교체하고, archived 데이터를 통계와 응답 상세에서 historical record로 노출

주요 변경

외부인 응답·행사 이미지 (75efd87, aeff3f5, 20441ef, eb67138)

  • Event 엔티티 연관관계 변경 및 이미지 공개 다운로드 API 추가
  • 행사 이미지 공개 다운로드 URL OpenAPI 스펙 + 프론트엔드 연동
  • 관리자 설문 응답 API가 외부인(ExternalSurveyResponse) 응답을 포함
  • 신청자 관리 페이지에서 외부인 설문 응답 표시

설문 질문 archive 모델 (099e233, 9d599fb)

기존 soft-delete는 "폼에서 빠짐"과 "삭제됨"을 동일 플래그로 표현해 과거 응답이 가리키는 옵션이 폼 조회 시 사라지는 문제가 있었음. archive 모델로 의미를 분리해 응답이 1건이라도 있으면 archive(보존), 없으면 hard delete하도록 변경.

  • V54 마이그레이션: deleted_* 컬럼 → archived_at/by 컬럼, FK ON DELETE CASCADE 재정의
  • SurveyQuestion/Option/Row: SoftDeletableEntityBaseEntity, archive/unarchive/isArchived 도입
  • 리포지토리·서비스: findByIdAndArchivedAtIsNull 등으로 변경, SurveyAnswerRepository.existsBy*로 archive vs hard-delete 분기
  • 통계: archived 옵션·행도 분포에 포함하여 과거 응답 보존
  • 응답 상세: archived 질문에 대한 답변도 historical record로 노출

알려진 한계

  • 외부인 응답이 답변을 JSON으로 저장하는 구조라 existsByQuestionId/SelectedOptionId/SelectedRowId로는 외부 응답의 참조를 검출하지 못함. 회원 응답 없이 외부 응답만 존재하는 질문/옵션/행은 hard delete될 수 있어 후속 PR에서 보강 예정.

Test plan

  • 백엔드 survey/event 관련 단위·통합 테스트 통과 (./gradlew test)
  • V54 마이그레이션이 기존 soft-deleted 데이터를 archived로 보존하는지 확인
  • archive된 옵션이 폼에서는 사라지고 통계·응답 상세에는 유지되는지 수동 확인
  • 관리자 응답 목록·신청자 관리 페이지에서 외부인 응답이 정상 표시되는지 수동 확인
  • 행사 이미지 공개 다운로드 URL이 비인증 사용자에게도 동작하는지 확인

Yun-YeoJun added 2 commits May 2, 2026 16:20
기존 soft-delete는 "폼에서 빠짐"과 "삭제됨"을 동일 플래그로 표현하여
과거 응답이 가리키는 옵션이 폼 조회 시 사라져 미응답으로 보이는 문제가 있었음.

archive 모델로 의미를 분리:
- 응답이 1건이라도 있으면 archive (폼·신규 응답 검증에서 제외)
- 응답이 없으면 hard delete (자식 옵션·행은 FK ON DELETE CASCADE)

- V54 마이그레이션: deleted 컬럼 → archived_at 컬럼 교체, FK CASCADE 재정의
- SurveyQuestion/Option/Row: SoftDeletableEntity → BaseEntity, archive/unarchive/isArchived 추가
- 리포지토리: findByIdAndDeletedFalse → findByIdAndArchivedAtIsNull
- 서비스: SurveyAnswerRepository.existsBy* 검사로 archive vs hard-delete 분기
archive 모델의 핵심 가치인 "과거 응답 보존"을 통계·응답 상세에 반영.

- 통계: archived 옵션·행도 분포에 포함하여 과거 응답의 선택 분포가 누락되지 않도록
- 회원 응답 상세: archived 질문에 대한 과거 답변도 historical record로 유지
- 외부인 응답: archived 질문도 questionTypeMap에 포함하여 매핑 유지
@Yun-YeoJun Yun-YeoJun self-assigned this May 2, 2026
@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Test Results

2 753 tests   2 749 ✅  42s ⏱️
  758 suites      4 💤
  758 files        0 ❌

Results for commit 0d3cd33.

@Yun-YeoJun Yun-YeoJun merged commit 733f177 into main May 2, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant