Skip to content

fix: 예약이 있는 회의실을 지울 때 그 예약이 정리되지 않는 문제 수정 - #1237

Merged
mochoping merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/mtgplace-delete-guard
Aug 27, 2026
Merged

mochoping merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/mtgplace-delete-guard

Conversation

@wantaekchoi

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

  • 버그수정 Bug fixes
  • 기능개선 Enhancements
  • 기능추가 Adding features
  • 기타 Others

수정된 소스 내용 Modified source

회의실을 지워도 사라지는 것은 방 한 행뿐입니다. 같은 핸들러가 첨부파일은 정리하는데 예약만 정리하지 않습니다. 정리 책임을 이미 지고 있으면서 한쪽만 빠진 셈입니다.

매퍼 여덟 방언의 예약 삭제문은 예약 아이디를 요구하므로 방 아이디로 예약을 지우는 SQL 자체가 없습니다.

배포한 DDL이 무엇이냐에 따라 결과가 달라집니다.

참조 무결성 지금 일어나는 일
걸려 있는 방언 삭제 자체가 실패해 사용자가 오류 화면을 봅니다
걸려 있지 않은 방언 예약이 남습니다. 예약 조회가 회의실을 기준 테이블로 삼으므로 화면에서는 보이지 않습니다

어느 쪽으로 가든 바람직하지 않습니다.

AS-IS

egovMtgPlaceManageService.deleteMtgPlaceManage(mtgPlaceManageVO);
return "forward:/uss/ion/mtg/selectMtgPlaceManageList.do";

TO-BE

// 예약이 남아 있으면 회의실을 삭제하지 않는다.
if (egovMtgPlaceManageService.selectMtgPlaceResveCnt(mtgPlaceManageVO) > 0) {
    model.addAttribute("mtgPlaceResveExist", "true");
    return "forward:/uss/ion/mtg/selectMtgPlaceManageList.do";
}

egovMtgPlaceManageService.deleteMtgPlaceManage(mtgPlaceManageVO);
return "forward:/uss/ion/mtg/selectMtgPlaceManageList.do";

영향 범위

예약이 없는 회의실은 종전과 똑같이 지워집니다. 예약이 남아 있는 회의실을 지우려 할 때만 동작이 달라집니다. 그때는 오류 화면이나 조용한 잔존 대신 안내가 뜹니다.

방 아이디로 예약 건수를 세는 조회가 없어 여덟 방언에 같은 문장을 하나씩 넣었습니다.

<select id="selectMtgPlaceResveCnt" parameterType="egovframework.com.uss.ion.mtg.service.MtgPlaceManageVO" resultType="int">
    SELECT count(resve_id) from COMTNMTGPLACERESVE WHERE MTGRUM_ID = #{mtgPlaceId}
</select>

방언 문법 차이가 없어 여덟 파일이 같은 내용이고 각 파일 끝에 붙여 기존 문장과 줄이 겹치지 않습니다. DAO·서비스 배관은 같은 클래스의 기존 중복확인 조회와 같은 모양으로 맞췄습니다.

연쇄 삭제라는 선택지도 있습니다. 되돌릴 수 없는 삭제여서 이쪽을 골랐습니다. 메인테이너께서 연쇄 삭제를 원하신다면 그 방향으로 다시 내겠습니다.

한글·영문 메시지 키를 하나씩 추가했고 목록 화면에는 알림을 넣었습니다.

JUnit 테스트 JUnit tests

  • JUnit 테스트 JUnit tests
  • 수동 테스트 Manual testing

EgovMtgPlaceManageControllerDeleteTest 2건을 추가했습니다. 서비스와 파일 서비스를 Proxy로 세우고 예약 건수를 달리하며 예약이 있을 때는 삭제가 호출되지 않고 없을 때는 호출되는지 확인합니다. 스프링 컨텍스트나 DB 없이 돌아갑니다.

수정 전(RED, 가드만 되돌려 실행)

[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.133 s <<< FAILURE! -- in egovframework.com.uss.ion.mtg.web.EgovMtgPlaceManageControllerDeleteTest
[ERROR]   EgovMtgPlaceManageControllerDeleteTest.deleteMtgPlaceIsRefusedWhenRoomStillHasReservation:75 예약이 남아 있으면 회의실을 지우지 않아야 한다 ==> expected: <false> but was: <true>

수정 후(GREEN)

[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.127 s -- in egovframework.com.uss.ion.mtg.web.EgovMtgPlaceManageControllerDeleteTest
[INFO] BUILD SUCCESS

커밋에 pom 변경은 넣지 않았습니다. <skipTests>true</skipTests>를 잠시 풀고 받은 출력입니다.

테스트 브라우저 Test Browser

  • Chrome
  • Firefox
  • Edge
  • Safari
  • Opera
  • Internet Explorer
  • 기타 Others

해당 없음

테스트 스크린샷 또는 캡처 영상 Test screenshots or captured video

해당 없음

회의실 삭제는 방 한 행만 지운다. 같은 핸들러가 첨부파일은 정리하는데 예약만
정리하지 않는다. 매퍼 여덟 방언의 예약 삭제문은 예약 아이디를 요구하므로 방
아이디로 예약을 지우는 SQL 자체가 없다.

결과는 배포한 DDL에 따라 갈린다. 참조 무결성이 걸린 방언에서는 삭제 자체가 실패해
사용자가 오류 화면을 본다. 걸리지 않은 방언에서는 예약이 남는데, 예약 조회가
회의실을 기준 테이블로 삼으므로 화면에서는 보이지 않는다. 어느 쪽도 좋은 결과가
아니다.

예약이 남아 있으면 삭제하지 않고 화면에 알리도록 했다. 방 아이디로 예약 건수를
세는 조회가 없어 여덟 방언에 같은 문장을 하나씩 넣었다. 기존 중복확인 조회와 같은
배관이다.

연쇄 삭제로 가는 방법도 있다. 되돌릴 수 없는 삭제라 이쪽을 택했고, 메인테이너가
연쇄 삭제를 원하신다면 그쪽으로 다시 내겠다.
@mochoping

Copy link
Copy Markdown
Contributor

수용

예약이 남아 있는 회의실의 삭제를 거부하도록 변경한 내용입니다.

확인용 건수 조회가 서비스·DAO 와 8개 DB 방언 매퍼에 모두 추가된 것을 확인했으며,
관련 테스트도 함께 추가되었습니다. 예약이 있는 경우 기존에 성공하던 삭제가 거부되는 동작 변화가 있습니다.


표준프레임워크에 소중한 기여를 해주셔서 감사합니다.

@mochoping
mochoping merged commit 6ebc219 into eGovFramework:main Aug 27, 2026
1 check passed
@wantaekchoi
wantaekchoi deleted the fix/mtgplace-delete-guard branch August 27, 2026 07:19
LeeBaekHaeng pushed a commit to itcen-entec-2026/egovframe-common-components that referenced this pull request Aug 27, 2026
…GovFramework#1221, eGovFramework#1222, eGovFramework#1223, eGovFramework#1224, eGovFramework#1225, eGovFramework#1226, eGovFramework#1227, eGovFramework#1228, eGovFramework#1229, eGovFramework#1230, eGovFramework#1231, eGovFramework#1232, eGovFramework#1233, eGovFramework#1234, eGovFramework#1235, eGovFramework#1236, eGovFramework#1237, eGovFramework#1238, eGovFramework#1239, eGovFramework#1240, eGovFramework#1241)

- eGovFramework#1216 fix: require admin authorization for administrative terminology create, update, and delete
- eGovFramework#1217 fix: require admin authorization for backup job create and update
- eGovFramework#1221 fix: require admin authorization for login screen image management
- eGovFramework#1222 fix: require admin authorization for main image management
- eGovFramework#1223 fix: enforce ownership checks on anniversary update
- eGovFramework#1224 fix: add the missing path separator when deleting main image, banner, and login screen image files
- eGovFramework#1225 fix: point the password expiry popup's employee branch at an existing URL
- eGovFramework#1226 fix: restore employee registration form binding and code lists on validation redisplay
- eGovFramework#1227 fix: restore code lists on enterprise member signup validation redisplay
- eGovFramework#1228 fix: correct the authority group list form action namespace
- eGovFramework#1229 fix: restore added-option display flags on board master validation redisplay
- eGovFramework#1230 fix: restore code lists on general member signup validation redisplay
- eGovFramework#1231 fix: restore hour and minute select lists on memo todo validation redisplay
- eGovFramework#1232 fix: call the satisfaction list paging function instead of the comment one
- eGovFramework#1233 fix: populate the last-updater audit field on knowledge map material and team updates
- eGovFramework#1234 test: guard the test datasource URL against host-specific values
- eGovFramework#1235 fix: block deleting a department job box that still holds jobs
- eGovFramework#1236 fix: block deleting an event that still has attendance applications
- eGovFramework#1237 fix: block deleting a meeting room that still has reservations
- eGovFramework#1238 fix: correct script references to non-existent forms on employee screens
- eGovFramework#1239 fix: require admin authorization for the proxy service list screen
- eGovFramework#1240 fix: mark attachments unused when deleting personal knowledge
- eGovFramework#1241 fix: mark attachments unused when deleting system history

Closes eGovFramework#1216, eGovFramework#1217, eGovFramework#1221, eGovFramework#1222, eGovFramework#1223, eGovFramework#1224
Closes eGovFramework#1225, eGovFramework#1226, eGovFramework#1227, eGovFramework#1228, eGovFramework#1229, eGovFramework#1230
Closes eGovFramework#1231, eGovFramework#1232, eGovFramework#1233, eGovFramework#1234, eGovFramework#1235, eGovFramework#1236
Closes eGovFramework#1237, eGovFramework#1238, eGovFramework#1239, eGovFramework#1240, eGovFramework#1241
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