Skip to content

🌟 Feature : μ›” 별 μƒμ„±λœ ν•˜μ΄λΌμ΄νŠΈ 쑰회 - μΊ˜λ¦°λ”ν˜•#227

Merged
tkv00 merged 13 commits into
devfrom
REQ_008
Nov 18, 2025
Merged

🌟 Feature : μ›” 별 μƒμ„±λœ ν•˜μ΄λΌμ΄νŠΈ 쑰회 - μΊ˜λ¦°λ”ν˜•#227
tkv00 merged 13 commits into
devfrom
REQ_008

Conversation

@tkv00
Copy link
Copy Markdown
Contributor

@tkv00 tkv00 commented Nov 18, 2025

πŸ€ 이슈 번호


βœ… μž‘μ—… 사항


public record DateTimeRange(LocalDateTime start,LocalDateTime end) {}
  • νŠΉμ • μ›”μ˜ μ‹œμž‘μΌ~μ’…λ£ŒμΌ λ²”μœ„λ₯Ό λͺ…ν™•ν•˜κ²Œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ ˆμ½”λ“œ νƒ€μž…μœΌλ‘œ μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
@Override
public DateTimeRange getMonthDateTimeRange(int year, int month) {
   LocalDate startDate = LocalDate.of(year, month, 1);
   LocalDate endDate = startDate.withDayOfMonth(startDate.lengthOfMonth());

   LocalDateTime start = startDate.atStartOfDay();
   LocalDateTime end = endDate.atTime(23, 59, 59);
   return new DateTimeRange(start,end);
}
  • 전달받은 연도/μ›” κΈ°μ€€μœΌλ‘œ μ •ν™•ν•œ μ›”κ°„ λ²”μœ„λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
@Override
public void isValidDateRange(int year, int month) {
    if(year>MAX_YEAR || year<MIN_YEAR) throw new CustomException(ErrorCode.INVALID_YEAR);
    if (month<JANUARY || month>DECEMBER) throw new CustomException(ErrorCode.INVALID_MONTH);
}
  • μ›Ήκ³„μΈ΅μ—μ„œ νŒŒλΌλ―Έν„°λ‘œ μž…λ ₯λ°›λŠ” 연도와 μ›”μ˜ μœ νš¨μ„± 검증을 μ‹€μ‹œν•©λ‹ˆλ‹€.
  • μ—°λ„μ˜ λ²”μœ„λŠ” 2000~2100 μ‚¬μ΄μ˜ κ°’λ§Œμ„ ν—ˆμš©ν•©λ‹ˆλ‹€.

public record HighlightCalendarResponse(
        @NotNull Integer year,
        @NotNull Integer month,
        @NotNull List<HighlightCalendarDaysResponse> days
) {}
  • μ΅œμ’… λ°˜ν™˜ DTOλ₯Ό ν™•μΈν•˜λ©΄ μœ„μ™€ 같은 ν˜•νƒœμž…λ‹ˆλ‹€.

DTO 쑰립 방식

  • JPQL의 DTO Projection 방식을 μ΄μš©ν•˜λŠ”λ° μžˆμ–΄ Listν˜•νƒœλ₯Ό 쿼리문으둜 ν•œ λ²ˆμ— κ°€μ Έμ˜€λŠ”λ° ν•œκ³„κ°€ λͺ…ν™•ν•˜μ—¬ μ•„λž˜μ™€ 같은 μˆœμ„œλ‘œ DTOλ₯Ό μ‘°λ¦½ν•˜λ„λ‘ μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.
  1. Flat 데이터 쑰회

    • fetchFlatHighlightsλ₯Ό 톡해 ν•΄λ‹Ή μ›”μ˜ λͺ¨λ“  ν•˜μ΄λΌμ΄νŠΈ μ˜μƒμ„ μ‘°νšŒν•©λ‹ˆλ‹€.
    • λ°˜ν™˜ νƒ€μž…: List<HighlightInfoResponse>
  2. TreeMap을 ν™œμš©ν•œ λ‚ μ§œ κΈ°μ€€ κ·Έλ£Ήν•‘

    TreeMapλ₯Ό μ‚¬μš©ν•œ 이유?
    일반적인 HashMap 같은 경우 keyκ°’μ˜ μˆœμ„œλ₯Ό 보μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, key값인 dateλ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 반 ν™˜ν•˜μ§€ λͺ»ν•˜κ±°λ‚˜ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°˜ν™˜ν•˜λ €κ³  ν•œλ‹€λ©΄ Keyλ₯Ό λ‹€μ‹œ μ •λ ¬ν•΄μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ„ 쀄이기 μœ„ν•΄ Key μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” 자료ꡬ쑰인 TreeMapλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

    • key: LocalDate
    • value: ν•΄λ‹Ή λ‚ μ§œμ˜ ν•˜μ΄λΌμ΄νŠΈ λͺ©λ‘
  3. Mapperλ₯Ό ν†΅ν•œ DTO λ³€ν™˜

    • TreeMap<LocalDate, List<HighlightInfoResponse>>β†’ List<HighlightCalendarDaysResponse>둜 λ§€ν•‘
  4. μ΅œμ’… DTO 쑰립

    • HighlightCalendarResponse ν˜•νƒœλ‘œ μ΅œμ’… λ°˜ν™˜ 객체λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

λ³€κ²½ 사항

  1. HighlightEntity - is_selected 컬럼 μ‚­μ œ

μ‚­μ œ 이유 : κΈ°μ‘΄ ν•˜μ΄λΌμ΄νŠΈκ°€ 생성 λ˜μ—ˆμ„ λ•Œ 2개의 ν•˜μ΄λΌμ΄νŠΈ μ˜μƒμ„ μ„ νƒν•˜λŠ” ν”Œλ‘œμš°μ—μ„œ 전체 ν•˜μ΄λΌμ΄νŠΈ μ˜μƒμ„ μ €μž₯ν•˜κ³  κ²Œμ‹œλ¬Όμ„ 올리기 전에 μ„ νƒν•˜λŠ” ν”Œλ‘œμš°λ‘œ λ³€κ²½.

  1. Highlight API - /api/highlight/select μ‚­μ œ

μ‚­μ œ 이유 : 상기 ν”Œλ‘œμš° 변경에 따라 선택 API λ˜ν•œ μ‚­μ œν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  1. HighlightQueryRepository - fetchPeriodHighlight GROUP BY μΆ”κ°€


⌨ 기타

@tkv00 tkv00 requested a review from pjs1710 November 18, 2025 00:53
@tkv00 tkv00 added the ✨ Feature μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€, κΈ°μ‘΄ κΈ°λŠ₯을 μš”κ΅¬ 사항에 λ§žμΆ”μ–΄ μˆ˜μ • label Nov 18, 2025
Copy link
Copy Markdown
Contributor

@pjs1710 pjs1710 left a comment

Choose a reason for hiding this comment

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

κ³ μƒν•˜μ…¨μŠ΅λ‹ˆλ‹€πŸ”₯

@github-actions
Copy link
Copy Markdown

Test Coverage Report

Overall Project 65.95% -4.24% 🍏
Files changed 0.34% ❌

File Coverage
HighlightFactory.java 100% 🍏
RankingReader.java 100% 🍏
HighlightValidatorImpl.java 72.66% -17.97% ❌
HighlightHelperImpl.java 61.96% -32.61% ❌
HighlightCommandServiceImpl.java 40% 🍏
HighlightMapperImpl.java 39.29% -60.71% ❌
HighlightQueryController.java 37.93% -37.93% ❌
HighlightUtilImpl.java 27% -50.63% ❌
HighlightManager.java 25.56% -47.78% ❌
HighlightCommandController.java 0% 🍏
HighlightCalendarDaysResponse.java 0% ❌
DateTimeRange.java 0% ❌
HighlightCalendarResponse.java 0% ❌

@tkv00 tkv00 merged commit 8705647 into dev Nov 18, 2025
1 check passed
@tkv00 tkv00 deleted the REQ_008 branch November 24, 2025 02:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€, κΈ°μ‘΄ κΈ°λŠ₯을 μš”κ΅¬ 사항에 λ§žμΆ”μ–΄ μˆ˜μ •

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🌟 Feature : μ›” 별 μƒμ„±λœ ν•˜μ΄λΌμ΄νŠΈ 쑰회 - μΊ˜λ¦°λ”ν˜•

2 participants