Skip to content

fix: [ALT-303] 공고 근무 일정 생성·수정의 0분 근무 검증 - #110

Open
ysw789 wants to merge 7 commits into
devfrom
fix/alt-303
Open

ysw789 wants to merge 7 commits into
devfrom
fix/alt-303

Conversation

@ysw789

@ysw789 ysw789 commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

요약

공고 근무 일정의 시작 시간과 종료 시간이 같으면(0분 근무) 저장되던 문제를 고쳤습니다. 이제 공고 등록, 기존 일정 수정, 새 일정 추가에서 이런 일정이 하나라도 있으면 서버가 400 B001로 요청 전체를 거부합니다. 요청·응답 필드, DB 스키마는 바뀌지 않았고 신규 ErrorCode도 없습니다.

ALT-295(PR #107)가 dev에 병합되어, 이 PR의 base를 fix/alt-295-qa-followup에서 dev로 바꾸고 dev 위로 rebase했습니다. 리뷰 반영으로 DataJpaTest 기반 트랜잭션 테스트를 빼고 유스케이스 단위 테스트로 바꿨습니다.

변경 내용

근무 일정 시간 검증 (PostingSchedule)

  • PostingSchedule.create·update가 필드를 바꾸기 전에 시작 시간과 종료 시간이 같은지 검사합니다. 같으면 CustomException(ErrorCode.ILLEGAL_ARGUMENT, "근무 시작 시간과 종료 시간은 같을 수 없습니다.")을 던집니다.
  • 거부하는 경우는 두 시간이 정확히 같을 때뿐입니다. 종료 시간이 시작 시간보다 이른 일정(예: 22:00~06:00)은 이전처럼 그대로 저장합니다.
  • 시간 값이 비었거나 형식이 틀린 경우는 이전처럼 요청 DTO 검증이 먼저 막습니다. 이번 검사는 DTO 검증을 통과한 값에 적용하는 도메인 규칙이라 같은 검증을 다시 하지 않습니다.

POST /api/manager/postings (공고 등록, CreatePosting)

  • schedules 중 하나라도 시작·종료 시간이 같으면 400 B001을 반환합니다. 나머지 일정이 정상이어도 공고와 일정은 하나도 저장되지 않습니다.

PUT /api/manager/postings/{postingId} (공고 수정, ManagerUpdatePosting)

  • updateSchedules(기존 일정 수정)나 createSchedules(새 일정 추가)에 시작·종료 시간이 같은 일정이 하나라도 있으면 400 B001을 반환합니다.
  • 유스케이스가 한 트랜잭션으로 처리하므로, 같은 요청에 담긴 제목·설명·급여·모집 인원 수정과 다른 일정의 수정·삭제·추가도 모두 반영되지 않습니다.

Swagger

  • ManagerPostingControllerSpec의 공고 등록·수정 설명에 동일 시각 거부 규칙과 야간 일정 허용, 요청 전체 실패를 적었습니다.
  • 두 API의 400 예시에 {"code":"B001","message":"근무 시작 시간과 종료 시간은 같을 수 없습니다."}를 추가했습니다.

프론트 영향

  • 시작·종료 시간이 다른 일정은 이전과 똑같이 저장됩니다. 요청·응답 형식은 바뀌지 않아 구버전 앱에 영향이 없습니다.
  • 시작·종료 시간이 같은 일정을 보내면 400 B001과 메시지 근무 시작 시간과 종료 시간은 같을 수 없습니다.가 옵니다. 오류 응답 본문은 기존 형식(timestamp, code, message, data)을 그대로 씁니다.
  • 공고 수정 API에는 이전부터 근무 일정은 최소 1개 이상 있어야 합니다.라는 B001 오류도 있습니다. 화면에서 두 경우를 나눠 보여 주려면 code가 아니라 message로 구분해야 합니다.
  • 일정 하나만 잘못돼도 요청 전체가 실패하고 일부만 저장되지 않습니다.

테스트

모두 Mockito·순수 도메인 단위 테스트입니다.

  • PostingScheduleTests(신규) — 00:0000:00, 09:3009:30 일정을 생성·수정할 때 ILLEGAL_ARGUMENT로 거부되고, 수정이 실패하면 기존 요일·시간·포지션이 그대로인지 확인합니다. 주간 09:0018:00과 야간 22:0006:00 일정은 생성·수정 모두 그대로 저장되는지 확인합니다.
  • CreatePostingTests — 정상 일정 사이에 동일 시각 일정이 하나 섞이면 예외가 나고 공고 저장(save)이 호출되지 않는지 확인합니다.
  • ManagerUpdatePostingTests — 추가·수정하는 일정 중 하나가 동일 시각이면 예외가 나는지, 수정 실패 시 기존 일정 시간이 바뀌지 않는지 확인합니다. 롤백을 보장하는 Transactional이 유스케이스에 붙어 있는지도 확인합니다.
  • 전체 ./gradlew test 619건 모두 통과했습니다(실패 0건, skip 0건). 이번 PR 관련은 PostingScheduleTests 6건, CreatePostingTests 3건, ManagerUpdatePostingTests 5건입니다.
  • (리뷰 반영 전 기준) rebase 전 브랜치에서 로컬 서버·PostgreSQL로 실제 HTTP 요청을 보내, 동일 시각 일정이 섞인 생성·수정·추가 요청 6건이 모두 400 B001을 받고 DB 상태가 요청 전과 같은지 확인했습니다. 운영 코드는 그때와 같습니다.

남긴 것

  • 야간 일정의 종료 시간을 다음 날로 본다는 규칙은 아직 팀에서 합의하지 않았습니다. 이번 PR은 기존처럼 22:00~06:00 같은 입력을 그대로 저장할 뿐이고, 이를 위한 필드나 DB 컬럼은 추가하지 않았습니다. "종료가 시작보다 늦어야 한다"는 검사도 하지 않습니다.
  • 프론트 오류 표시, 배포 환경 확인, 화면 회귀 QA는 남아 있습니다.
  • 모집 인원, 공고 상태 변경(마감) 정책은 이 PR에서 바꾸지 않았습니다.

관련 문서

추가 반영: 다음 날 종료 규칙 확정

  • 공고 근무 일정은 날짜 없이 요일과 시각만 받습니다. 종료 시간이 시작 시간보다 이르면(예: 22:00~06:00) 다음 날 종료로 봅니다. 같은 시각만 400/B001로 거부합니다.
  • 코드 동작은 그대로이고, 공고 등록·수정 Swagger 설명에 이 규칙을 명시했습니다.
  • 후속 확인 필요: 공고 검색의 시간 필터(gteStartTime·lteEndTime)는 시각 값만 비교해서 다음 날 종료 일정을 반영하지 못합니다(예: 22:0006:00 공고가 00:0008:00 필터에 걸림). 이 PR 범위 밖입니다.

@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 16 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 9c23176 and ca6c13c.

Files selected for processing: 5
  • src/main/java/com/dreamteam/alter/adapter/inbound/manager/posting/controller/ManagerPostingControllerSpec.java
  • src/main/java/com/dreamteam/alter/domain/posting/entity/PostingSchedule.java
  • src/test/java/com/dreamteam/alter/application/posting/usecase/CreatePostingTests.java
  • src/test/java/com/dreamteam/alter/application/posting/usecase/ManagerUpdatePostingTests.java
  • src/test/java/com/dreamteam/alter/domain/posting/entity/PostingScheduleTests.java
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hodoon hodoon left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰했습니다. 별도 지적 사항 없이 변경 범위와 테스트 모두 적절해 보입니다. 👍

@ysw789 ysw789 self-assigned this Oct 21, 2026
@ysw789
ysw789 changed the base branch from fix/alt-295-qa-followup to dev October 28, 2026 10:38
@ysw789
ysw789 marked this pull request as ready for review October 28, 2026 10:39

This branch has not been deployed

No deployments
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.

2 participants