feat(admin): 지원자 목록 엑셀(xlsx) 다운로드 #163 - #166
Merged
Merged
Conversation
export_job 에 필터 컬럼이 없어 저장 결과의 필터가 비었고, 처리기는 그 값으로 지원자를 골라 필터와 상관없이 전체를 내보냈다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 도메인에 XlsxRenderPort 를 두고 adapter-out 에서 Apache POI 로 구현한다 - 열에 생년월일·연락처·출신학교·항목별 점수를 더하고 상태를 한글로 적는다 - 객체 키 확장자를 .xlsx 로 바꾸고 쓰지 않게 된 CSV 변환 함수를 지운다 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
keyword, regions, graduationStatuses, isSubmitted 를 받아 화면에서 거른 목록을 그대로 내보낼 수 있게 한다. 추가 필드라 기존 요청은 그대로 동작한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
목록 필드가 기본값만 있는 non-null 이라 null 을 보내면 400 이 났다. 필드를 빼거나 빈 목록을 보낸 것과 같게 받는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 59 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (14)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
kusuri12-09
approved these changes
Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
APPLICANT_LIST)의 산출물을 CSV 에서 xlsx 로 바꿨다.POST /api/v11/admin/exports{"type": "APPLICANT_LIST", "filter": {...}}202+exportJobIdGET /api/v11/admin/exports/{exportJobId}COMPLETED이면downloadUrl(15분 유효)GET {downloadUrl}applicants_<exportJobId>.xlsxdocuments/features/applicant-list-excel/api-spec.mdRelated Issue
Scope
XlsxRenderPort)·POI 어댑터·내보내기 처리기·요청 DTO, 테스트, API 명세Content-Disposition)·열 너비·셀 서식, 필터 DB 저장(재시작 뒤 재처리), configuration 의 지원자 명단 API 와 연결, admin 지원자 테이블 데이터 경로(아래 확인 부탁 1), Notion API 명세 DB 반영Implementation
흐름은 그대로 두고 산출물만 바꿨다.
PdfRenderPort(HTML → PDF)처럼 도메인에XlsxRenderPort(머리글 + 행 → xlsx)를 두고PoiXlsxAdapter로 구현했다. 어떤 열을 담을지는 처리기가 정한다kotlin.MODULE.bazel에 있고 observability 가 쓰고 있어, admin-adapter-outdeps.bzl에만 추가했다엑셀 구성
지원자 목록, 1행 머리글(틀 고정), 접수번호 오름차순ApplicantStatus에label추가). 번호·점수는 숫자 칸, 없는 값은 빈 칸=로 시작하는 값도 수식으로 실행되지 않는다. 쓰는 곳이 없어진 CSV 변환 함수(toCsvField)와 테스트는 지웠다필터 유실 수정
ExportService.create는ExportJobPersistenceAdapter.save의 반환값으로 처리 이벤트를 보낸다.export_job에 필터 컬럼이 없어 엔티티를 거친 반환값의 필터가 비었고, 처리기는 그 필터로 지원자를 골랐다ponytail:주석)필터 조건 확장
GET /api/v11/admin/applicants)와 같은keyword,regions,graduationStatuses,isSubmitted를 추가했다. 화면에서 거른 목록을 그대로 내보낼 수 있다null을 보내면 400 이던 것을 필드 없음·빈 목록과 같게 받는다커밋
fix(admin): 필터 유실 수정 + 재현 테스트feat(admin): xlsx 생성 (XlsxRenderPort,PoiXlsxAdapter, 처리기, 객체 키.xlsx, 상태 한글 표기, CSV 함수 삭제)feat(admin): 필터 조건 확장fix(admin): 목록 필터null허용docs(documents): API 명세Testing
bazel test //systems/admin/...12개 타깃 통과export_job_persistence_test(신규): DB 없이save만 흉내 낸 저장소로 반환값의 필터가 유지되는지 확인. 수정 전 코드에서statuses=[FIRST_PASS]가[]로 바뀌어 실패하는 것을 먼저 봤다xlsx_render_test(신규): 숫자 칸·빈 칸,=HYPERLINK(...)가 수식이 아닌 글자 칸으로 남는지 확인ddl-auto: validate)로 띄워 로컬 E2E (지원자 5명을 직접 넣음)COMPLETED, 서명된 링크 200 (xlsxContent-Type). 시트 이름, 머리글 15열, 틀 고정, 한글·숫자·빈 칸 확인regions=[DAEJEON],statuses=[FIRST_PASS],isSubmitted=true→ 조건에 맞는 2명만keyword=영희+graduationStatuses+admissionTypes→ 1명만null→ 전체. 공백keyword+ 빈statuses→ 전체ADMISSION_TICKET+ 필터 → zip 에 조건에 맞는 PDF 2개만type누락,"isSubmitted": "yes"→ 400. 헤더 없음 401,STUDENT역할 403, 없는 작업 404FAILED,downloadUrlnullAuthorization헤더를 붙이면 저장소가 400 으로 거절한다 → 명세에 프론트 주의사항으로 적었다Deployment Notes
STORAGE_BUCKET,DOWNLOAD_URL_EXPIRES_SECONDS, AWS 표준 환경변수를 그대로 쓴다Checklist
APPLICANT_LIST결과 형식(CSV → xlsx)과 필터 적용 여부는 바뀐다api-spec.md리뷰어 확인 부탁:
admin_db.applicant)을 채우는 코드가 develop 에 없다. 목록 조회와 마찬가지로 운영 엑셀에는 머리글만 나올 수 있다. 이를 application gRPC 조회로 바꾼 fix(admin,application,identity): 데이터 소유권을 소유 시스템으로 되돌리고 끊긴 경로 연결 #145 는 fix(notification): 공지 등록을 notification 소유로 옮겨 조회 누락 수정 #139 #143 브랜치로 병합됐는데 fix(notification): 공지 등록을 notification 소유로 옮겨 조회 누락 수정 #139 #143 이 닫혀 develop 에 들어오지 않았다. 이 PR 범위 밖이라 따로 다뤄야 한다ExportJobProcessor의APPLICANT_LIST_COLUMNS한 곳만 고치면 된다COMPLETED까지 상태 조회를 반복해야 한다documents/features/applicant-list-excel/에 두었다🤖 Generated with Claude Code