[π μ¬μ΄ν΄2 - λ―Έμ (μμ½ λ³κ²½/μ·¨μμ μλ¬ μ²λ¦¬)] μ£Όλ(μ΄ν΄μ ) λ―Έμ μ μΆν©λλ€. #433
[π μ¬μ΄ν΄2 - λ―Έμ
(μμ½ λ³κ²½/μ·¨μμ μλ¬ μ²λ¦¬)] μ£Όλ(μ΄ν΄μ ) λ―Έμ
μ μΆν©λλ€. #433haeseonlee wants to merge 13 commits into
Conversation
|
μλ νμΈμ μ£Όλ! μ΄λ² PR μ½λ λ³κ²½μ¬νμ μλ νΌλλ°± μ¬κΈ°μλ€κ° μ μ΄λλλ‘ νκ² μ΅λλ€!
|
echo724
left a comment
There was a problem hiding this comment.
λ°κ°μ΅λλ€ μ£Όλ!
μ¬μ΄ν΄ 2 λΉ λ₯΄κ² ꡬνν΄μ£Όμ
¨λ€μ! κ³ μ λ§μμ΅λλ€~
λλΆλΆμ μꡬμ¬νκ³Ό μμΈ μν© ν
μ€νΈ μ μμ±ν΄μ£Όμ
¨λ€μ! μ μ νκ² μ»€μ€ν
μμΈμ λ©μΈμ§λ‘ μλ¬ μν©μ μ μ μκ² μ μ λ¬νλ€κ³ μκ°ν©λλ€.
μΌλ¨ λ¨κΈ΄ 컀λ©νΈλ€ μ€μμ μ’ λ νμΈν΄μ£Όμ
¨μΌλ©΄ νλ λΆλΆμ:
- λλΆλΆμ κ²½μ°μλ 컀μ€ν μμΈμ νΈλ€λ¬λ‘ μ²λ¦¬ν΄μ£Όμ ¨λλ° 500 μλ¬κ° λ°μνλ λΆλΆμ΄ μμ΅λλ€! 컀λ©νΈ λΆλΆ λ§κ³ λ νΉμ λμΉ λΆλΆμ΄ μμ μ μμμ§ κ³ λ―Όν΄λ³΄μλ©΄ μ’μ κ² κ°μμ. νλ‘λμ νκ²½μμ 500 μλ¬λ§νΌ 무μμ΄κ² μμ΅λλ€ γ
- μμ½μ λ μ§μ λν κ²μ¦μ μ ν΄μ£Όμ ¨λλ° μ§λκ° μκ°μ λν κ²μ¦μ μλ κ² κ°μ΅λλ€! ν΄λΉ μΌμ΄μ€ κ²μ¦κ³Ό ν μ€νΈ μΆκ°ν΄μ£ΌμΈμ~
- μμ½ μ·¨μ μν©μ λν κ²μ¦μ΄ λΆμ‘±ν©λλ€! νμΈν΄μ£Όμλ©΄ μ’μ κ² κ°μ΅λλ€~
- μμΈ μν©μ λν controller/e2e ν μ€νΈκ° λΆμ‘±νλ€κ³ μκ°ν©λλ€.
- λ§μ§λ§μΌλ‘ 404 HTTP status codeμ λν μ견 λ¨κ²¨μ£Όμλ©΄ μ’μ κ² κ°μ΅λλ€!
νμΈν΄λ³΄μκ³ νΉμ μ΄ν΄νλμκ±°λ μ€λͺ μ΄ λ νμν λΆλΆ μμΌμλ©΄ 컀λ©νΈλ λ©μΈμ§ λ¨κ²¨μ£ΌμΈμ~ νμ΄ν μ λλ€!
| if (reservationReq.date().isBefore(LocalDate.now())) { | ||
| throw new IllegalArgumentException("νμ¬λ³΄λ€ μ΄μ μ λ μ§λ μμ½ν μ μμ΅λλ€."); | ||
| throw new InvalidReservationException(); |
There was a problem hiding this comment.
μ§λκ° λ μ§Β·μκ°μ λν μμ½ μμ±μ λΆκ°λ₯νλ€.
μꡬμ¬νλλ‘λ©΄ μκ°λ κ²μ¦μ ν΄μΌν κ² κ°μμ!
There was a problem hiding this comment.
μ§λκ° μκ°μ λν΄μλ κ²μ¦ λ‘μ§μ μΆκ°νμμ΅λλ€!
ReservationServiceμμ νμ¬ λ μ§μ΄λ©΄μ νμ¬ μκ°λ³΄λ€ μ΄μ μΈ λ μ§λ₯Ό μ νν κ²½μ° InvalidReservationExceptionμ΄ λ°μνλλ‘ λ¦¬ν©ν°λ§ ν ν
μ€νΈ μ½λλ μμ±νμμ΅λλ€.
|
|
||
| public void delete(Long id) { | ||
| reservationUpdatingDao.delete(id); | ||
| } |
There was a problem hiding this comment.
λ³κ²½Β·μ·¨μ μ λ°μνλ μλ¬ μΌμ΄μ€(μ΄λ―Έ μ§λ μμ½μ μ·¨μ, λ³κ²½νλ €λ μκ°μ΄ μ΄λ―Έ μ°¨ μμ λ±)λ 2λ¨κ³μ κ·μΉμ λ§μΆ° μ²λ¦¬νλ€.
μ΄λ² μ¬μ΄ν΄ μꡬμ¬νμμ μ·¨μ μΌμ΄μ€μ¬λ κ²μ¦μ ν΄μ€μΌν κ² κ°μλ° μ΄λ€ κ²μ¦μ΄ μμ μ μμκΉμ?
There was a problem hiding this comment.
λν μμ½ μ·¨μ = μμ μΈμ§λ κ³ λ―Όν΄λ³΄μλ©΄ μ’μ κ² κ°μμ! λ΅μ΄ μλ건 μλμ§λ§ λΉμ§λμ€μ μΌλ‘ μ·¨μν λ μμ½μ μμ νλ κ²½μ° μ΄λ€ μν₯μ΄ μμ μ μμκΉμ?
| if (reservationReq.date().isBefore(LocalDate.now())) { | ||
| throw new InvalidReservationException(); | ||
| } |
There was a problem hiding this comment.
μ¬κΈ°λ λ§μ°¬κ°μ§λ‘ μκ°μ΄ μ§λ¬λμ§μ λν κ²μ¦μ΄ νμν κ² κ°μ΅λλ€!
|
|
||
| public ReservationResponse update(Long id, ReservationRequest reservationReq) { | ||
| Reservation existedReservation = reservationQueryingDao.findReservationById(id) | ||
| .orElseThrow(() -> new ReservationNotFoundException(id)); |
There was a problem hiding this comment.
HTTPμμ 404κ° NotFoundμ μλ―Έμ΄κΈ΄ νμ§λ§, μν©μ λ°λΌ λ κ°μ§ λ€λ₯Έ μν©μ΄ μμ μ μμ΅λλ€. νΉμ μ΄λ€ μν©λ€μ΄ μλμ§ μμ€κΉμ? ννΈλ‘ λΈλΌμ°μ μμ μ‘΄μ¬νμ§ μμλ URLμ μ λ ₯νμλμ μμ μ½λμμ μ°¨μ΄λ 무μμΌκΉμ?
| } | ||
|
|
||
| @Test | ||
| void μμ½_λ μ§_μκ°_λ³κ²½() { |
There was a problem hiding this comment.
μμ½μ μμ½ μμΈ μν©λ€ ν μ€νΈκ° λΆμ‘±ν κ² κ°μ΅λλ€!
There was a problem hiding this comment.
Timeκ³Ό Theme κ΄λ ¨ μμΈ μν©λ€λ ν μ€νΈκ° λ§μ΄ λΆμ‘±ν κ² κ°λ€μ γ
There was a problem hiding this comment.
μλΉμ€ κ³μΈ΅μμ 컀λ²κ° λλ€ νλλΌλ μμΈ μν©μμ μλν λ©μΈμ§μ μμΈμ½λκ° λ°νλλμ§λ νμΈν΄μΌνμ§ μμκΉμ?
|
|
||
| public class ReferencedDataException extends RuntimeException { | ||
| public ReferencedDataException() { | ||
| super("μ°Έμ‘° μ€μΈ λ°μ΄ν°κ° μμ΄ μμ ν μ μμ΅λλ€."); |
There was a problem hiding this comment.
μ μ νΉμ ν΄λΌμ΄μΈνΈ μ
μ₯μμ DB ν
μ΄λΈ ꡬ쑰λ₯Ό λͺ¨λ₯΄λ μν©μμ μ°Έμ‘° μ€μΈ λ°μ΄ν°λΌλκ² μ΄λ€ λ°μ΄ν°λ₯Ό μλ―Ένλμ§ λͺ¨λ₯Ό μ μμ κ² κ°μμ.
| throw new InvalidInputException("μ΄λ¦μ νμμ λλ€."); | ||
| } | ||
| } | ||
|
|
||
| private static void validateDate(LocalDate date) { | ||
| if (date == null) { | ||
| throw new IllegalArgumentException("λ μ§λ νμμ λλ€."); | ||
| throw new InvalidInputException("λ μ§λ νμμ λλ€."); | ||
| } | ||
| } | ||
|
|
||
| private static void validateTimeId(Long timeId) { | ||
| if (timeId == null) { | ||
| throw new IllegalArgumentException("μκ°μ νμμ λλ€."); | ||
| throw new InvalidInputException("μκ°μ νμμ λλ€."); | ||
| } | ||
| } | ||
|
|
||
| private static void validateThemeId(Long themeId) { | ||
| if (themeId == null) { | ||
| throw new IllegalArgumentException("ν λ§λ νμμ λλ€."); | ||
| throw new InvalidInputException("ν λ§λ νμμ λλ€."); | ||
| } |
There was a problem hiding this comment.
μ무λλ Request Bodyμ νλ κ°λ€μ λν κ²μ¦μ΄λ―λ‘ νλ μ΄λ¦μ κ·Έλλ‘ λ£μ΄μ£Όλκ² λμ κ² κ°μμ. μλ₯Ό λ€μ΄ μκ°μ΄λΌκ³ λ§ νλ©΄ μ΄λ€ μκ° κ°μ μλ£μ건μ§, μλλ©΄ timeIdλ₯Ό λ£μ§ μμκ±΄μ§ ν·κ°λ¦΄ μ μμ κ² κ°μ΅λλ€. μμ²μ timeId νλκ° λΉμ΄μμ΅λλ€ μ΄λ°μμΌλ‘μ.
There was a problem hiding this comment.
μΆκ°μ μΌλ‘, λ§μ½ μ¬λ¬ νλ κ°μ΄ μλ κ²½μ°, μ¬λ¬ λ²μ μμ²μ ν΅ν΄μ μ μ μμν λ° λͺ¨λ λͺ¨μμ ν λ²μ μλ €μ£Όλ λ°©μμ μ΄λ¨κΉμ? μλ₯Ό λ€μ΄, "[timeId, themeId]κ° λΉμ΄μμ΅λλ€."μ΄λ°μμΌλ‘μ. κ·Έλ¬λ©΄ μ μ κ° μ¬λ¬ λ²μ μμ² μμ΄ ν λ²μ μ μ μκ² μ£ ? μ΄λ»κ² μκ°νμλμ?
| public Reservation withUpdatedDateAndTime(LocalDate date, ReservationTime time) { | ||
| return new Reservation(id, this.name, date, time, this.theme, this.createdAt); | ||
| } |
There was a problem hiding this comment.
κ°λ
μ±μκ³ λͺ
μμ μΈ λ©μλ μ μμ±ν΄μ£Όμ
¨λ€μ! λ€λ§, μμ λ©μλ μ΄λ¦μ reservationWithIdμΈλ°, μ΄ λμ λ©μλ μ΄λ¦μ΄ μΌκ΄μ±μ΄ κΉ¨μ§ κ² κ°μ΅λλ€. λΉμ·ν νμλ₯Ό νλ κ² κ°μλ° with**μΌλ‘ ν΅μΌνλ κ²μ μ΄λ¨κΉμ?
μλ νμΈμ. μμ½!
μ¬μ΄ν΄2λ μ λΆνλ립λλ€. π
μ²΄ν¬ λ¦¬μ€νΈ
testλ₯Ό μ€ννμ λ, λͺ¨λ ν μ€νΈκ° μ μμ μΌλ‘ ν΅κ³Όνλμ?λ² μ΄μ€ μ½λ μ ν 체ν¬
μ΄λ€ λΆλΆμ μ§μ€νμ¬ λ¦¬λ·°ν΄μΌ ν κΉμ?
μ¬μ©μ λ³ΈμΈ μμ½ λ³κ²½ λ° μ·¨μ API
μλ¬ μλ΅ μ€κ³
μλ¬ μΌμ΄μ€
μλ¬ μλ΅ μ€κ³
GlobalExceptionHandler ν΄λμ€ μμ±
κΈ°μ‘΄μλ μμΈ ν΄λμ€μ
@ResponseStatusλ₯Ό λΆμ΄λ λ°©μμΌλ‘ μλ¬ μλ΅μ μ²λ¦¬νμ΅λλ€. μ΄ λ°©μμ μνμ½λλ μ§μ ν μ μμ§λ§, μλ΅ λ³Έλ¬Έμ μ μ΄ν μ μμ΄ Spring κΈ°λ³Έ μλ¬ νμ΄μ§(HTML)κ° κ·Έλλ‘ λ ΈμΆλλ λ¬Έμ κ° μμμ΅λλ€. νΉνIllegalArgumentExceptionμ²λΌ@ResponseStatusκ° μλ μμΈλ 500μΌλ‘ μλ΅λμ΄ μ¬μ©μμκ² μλ² λ΄λΆ μ€λ₯κ° κ·Έλλ‘ λ ΈμΆλμ΅λλ€.μ΄λ₯Ό ν΄κ²°νκΈ° μν΄
@RestControllerAdviceλ₯Ό μ¬μ©νGlobalExceptionHandlerλ₯Ό λμ νμ¬ λͺ¨λ μλ¬ μλ΅μ μλ νμμ JSONμΌλ‘ ν΅μΌνμ΅λλ€.{ βstatusβ: INVALID_DATE, βmessageβ: βμ§λκ° λ μ§μλ μμ½ν μ μμ΅λλ€.β }