Skip to content

[Feat] 카드(공고), 덱(공고 모음) 크롤링 적용 기능 구현#18

Merged
jihoonkim501 merged 12 commits into
developfrom
feat/#17
Jul 17, 2026
Merged

[Feat] 카드(공고), 덱(공고 모음) 크롤링 적용 기능 구현#18
jihoonkim501 merged 12 commits into
developfrom
feat/#17

Conversation

@jihoonkim501

@jihoonkim501 jihoonkim501 commented Jul 16, 2026

Copy link
Copy Markdown
Member

#️⃣ 관련 이슈

closed #17
크롤링으로 수집한 공고 데이터를 카드 덱 형태로 변환·추천·제공하는 기능을 구현했습니다.

PR 유형

  • 새로운 기능 추가
  • 버그 수정
  • 코드 리팩토링
  • 주석 추가 및 수정
  • 문서 수정
  • 테스트 추가, 테스트 리팩토링
  • 빌드 부분 혹은 패키지 매니저 수정
  • 파일 혹은 폴더명 수정
  • 파일 혹은 폴더 삭제

PR Checklist

  • 커밋 메시지 컨벤션에 맞게 작성했습니다.
  • 변경 사항에 대한 테스트를 했습니다.(버그 수정/기능에 대한 테스트).

🧩 작업 내용

  • 스케줄링 추가: 크롤링 데이터 동기화를 주기적으로 실행하기 위한 스케줄러(@EnableScheduling) 설정
  • 추천시스템 구현체 추가: RecommendationService — 사용자에게 노출할 카드(공고)를 추천하는 로직 구현
  • 공고 포스팅 구현체 추가: JobPostingSyncService — 크롤링된 공고 데이터를 동기화하는 서비스 구현
  • 크롤링 컨버터 추가: JobPostingConverter — 크롤링 원본 데이터를 JobPosting 엔티티로 변환
  • Deck 컨트롤러 추가: DeckController — 카드 덱 조회 API 엔드포인트 추가
  • 각 구현체에 대한 단위 테스트(RecommendationServiceTest, JobPostingConverterTest, JobPostingSyncServiceTest) 작성

📸 스크린샷(선택)

  • 추천 덱 생성
image
  • 덱 카드 조회
image

📣 To Reviewers

  • Reviewers : 팀 선택
  • Labels : 새로운 기능 추가, 자기 자신

Summary by CodeRabbit

  • 새 기능
    • 오늘의 추천 덱 생성(/api/decks/generate) 및 덱별 카드 조회 제공
    • 오늘의 브리핑(요약)과 브리핑 상태(덱 카드 목록) 조회 제공
  • 개선
    • 채용공고·기업 데이터 적재/동기화 및 DB 검색 인덱스 보강
    • 카드에 기술 스택/태그 반영, 시간대 기반 데이터 처리 개선
    • 일부 보안 인증 요구 범위 및 CORS PUT 허용 강화
  • 문서
    • DB 스키마·적재 방법 및 데이터 사전/인수 문서 추가
  • 테스트
    • 브리핑·덱 생성/조회 및 공고 동기화/변환 로직 테스트 추가

@jihoonkim501 jihoonkim501 self-assigned this Jul 16, 2026
@jihoonkim501 jihoonkim501 added the ✨ Feat 새로운 기능 추가 label Jul 16, 2026
@jihoonkim501 jihoonkim501 linked an issue Jul 16, 2026 that may be closed by this pull request
2 tasks
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

PostgreSQL 채용 데이터 스키마와 JSONL 적재 도구를 추가하고, 원문 공고를 Job으로 동기화하는 스케줄러와 추천 덱·카드·브리핑 API를 구현했습니다. 관련 엔티티, 저장소, 상태 코드, 테스트 및 애플리케이션 설정도 함께 변경했습니다.

Changes

채용 데이터 적재

Layer / File(s) Summary
채용 데이터 스키마와 적재
database/schema.sql, database/load.py, database/README.md, database/DATA_DICTIONARY.md, database/requirements.txt
companiesjob_postings 테이블, upsert 기반 JSONL 적재, 회사 결선 및 데이터 사전 문서를 추가했습니다.

원문 공고 동기화

Layer / File(s) Summary
JobPosting 기반 Job 동기화
src/main/java/.../domain/job/entity/*, src/main/java/.../domain/job/repository/*, src/main/java/.../domain/job/converter/*, src/main/java/.../domain/job/service/*, src/test/java/.../job/*
JobPosting 원문을 source와 externalId 기준으로 Job에 생성·갱신하고, 상태·경력 수준을 변환하는 예약 동기화 흐름과 테스트를 추가했습니다.

추천 덱과 브리핑

Layer / File(s) Summary
덱 생성·카드·브리핑 API
src/main/java/.../domain/deck/*, src/main/java/.../global/status/*, src/test/java/.../deck/*
오늘의 덱 생성, 카드 조회, 브리핑 및 상태 조회 엔드포인트와 서비스 로직, 응답 DTO, 저장소, 테스트를 추가했습니다.

애플리케이션 설정

Layer / File(s) Summary
스케줄링·보안·운영 설정
src/main/java/.../JobIsBeApplication.java, src/main/java/.../global/config/*, CLAUDE.md, .gitignore
스케줄링을 활성화하고 인증 경로와 CORS 허용 메서드를 변경했으며 저장소 작업 지침과 .claude/ 무시 규칙을 추가했습니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant BriefingController
  participant BriefingService
  participant JobRepository
  participant DeckRepository
  participant CardService
  Client->>BriefingController: GET /api/briefings/today/{userId}
  BriefingController->>BriefingService: getTodayBriefing(userId)
  BriefingService->>JobRepository: countApplicable(...)
  BriefingService->>DeckRepository: findByUserIdAndDeckDate(...)
  BriefingService->>CardService: getDeckCards(deckId)
  BriefingService-->>BriefingController: BriefingResponse
  BriefingController-->>Client: ApiResponse 응답
Loading

Possibly related PRs

Suggested reviewers: yeonjuncho

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 크롤링·덱 API와 직접 무관한 SecurityConfig, WebConfig, BaseEntity, PersonalityTest 변경이 포함되어 범위를 벗어났습니다. 이 PR 범위에 맞지 않는 설정·모델 변경은 별도 PR로 분리하고, 동기화/덱 API 관련 코드만 남기세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 30.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 카드/덱에 크롤링 적용 기능 구현이라는 핵심 변경을 잘 요약합니다.
Linked Issues check ✅ Passed JobPosting 적재/변환, 동기화 배치, 임시 덱·카드 API가 구현되어 이슈 #17의 핵심 요구를 충족합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 11

🧹 Nitpick comments (1)
CLAUDE.md (1)

28-30: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

현재 패키지 구조에 맞게 아키텍처 설명을 갱신하거나 규칙을 명확히 해 주세요.

현재 PR에는 domain/deck의 controller/dto/repository/service와 domain/job의 converter/repository/service가 추가됐지만, 문서는 대부분의 도메인이 entity/enums만 가진다고 설명합니다. 이 문서가 현재 구조 설명인지, entity/enums만 허용하는 규칙인지 확인한 뒤 한쪽 기준으로 통일해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLAUDE.md` around lines 28 - 30, Update the architecture description in
CLAUDE.md to match the current package structure, including the added
controller, dto, repository, service, and converter packages under domain/deck
and domain/job. Alternatively, explicitly state that entity/enums-only is an
intentional rule and clarify how these existing packages comply; ensure the
documentation consistently reflects one of these interpretations.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.gitignore:
- Around line 47-49: Update the product-name comment heading in .gitignore from
“Cluade” to “Claude,” leaving the .claude/ ignore rule unchanged.

In `@database/load.py`:
- Around line 89-95: Update the conflict-update assignments in database/load.py
lines 89-95, around POSTING_COLS and execute_values, to refresh collected_at
with the actual crawl timestamp or now() on every re-collected posting. Update
the collected_at definition in database/schema.sql lines 99-100 to explicitly
document and enforce the same final-collection-time semantics; both sites
require changes and must remain consistent.

In
`@src/main/java/com/leets7th/job_is_be/domain/deck/controller/BriefingController.java`:
- Around line 24-39: Update BriefingController methods getTodayBriefing and
getTodayBriefingStatus to obtain the user ID from the authenticated principal or
UserDetails instead of accepting it as a path variable. Remove userId from both
route mappings and method parameters, then pass the authenticated user ID to the
corresponding briefingService methods.

In
`@src/main/java/com/leets7th/job_is_be/domain/deck/controller/DeckController.java`:
- Around line 24-30: 경로 변수로 사용자를 지정해 타인의 덱에 접근할 수 있는 문제가 있습니다.
src/main/java/com/leets7th/job_is_be/domain/deck/controller/DeckController.java#L24-L30의
generateTodayDeck에서 userId 경로 변수를 제거하고 인증 주체에서 사용자 ID를 추출해
recommendationService.generateTodayDeck에 전달하세요.
src/main/java/com/leets7th/job_is_be/domain/deck/controller/CardController.java#L23-L29에서는
인증 주체를 서비스 계층으로 전달하고, 덱 소유자와 요청자의 ID가 일치하는지 검증한 뒤에만 카드를 조회하도록 수정하세요. 교차 사용자 덱
생성·카드 조회가 거부되는 보안 테스트도 추가하세요.

In
`@src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java`:
- Around line 55-60: BriefingService의 현재 시각 조회를 단일 기준으로 고정하세요. `today`,
`resolveSlot` 및 `countApplicable` 호출 전에 `LocalDateTime now`를 한 번만 생성하고, 해당 값에서
날짜와 시간을 추출해 기존 흐름에 재사용하세요.

In
`@src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java`:
- Around line 49-50: Update the deck lookup/creation flow in
RecommendationService to handle concurrent first requests: if saving the new
Deck fails due to the uk_decks_user_date unique constraint, catch that conflict
and re-query deckRepository.findByUserIdAndDeckDate(userId, today) to use the
existing Deck. Preserve the current lookup and creation behavior when no
concurrent conflict occurs.

In `@src/main/java/com/leets7th/job_is_be/domain/job/entity/Company.java`:
- Around line 23-27: Update the Company entity to extend BaseEntity, remove its
duplicate id field and associated identifier mapping, and retain the existing
entity behavior while inheriting the shared identifier and audit fields from
BaseEntity.

In `@src/main/java/com/leets7th/job_is_be/domain/job/entity/JobPosting.java`:
- Around line 103-107: JobPosting의 dueTime, confirmTime, collectedAt 시간 타입을 스키마의
timestamptz에 맞춰 LocalDateTime에서 OffsetDateTime 또는 Instant로 변경하고, 해당 값을
생성·저장·조회하는 동기화 경로 전체도 동일한 타입으로 통일하세요. 관련 매핑과 변환 로직에서 JVM 기본 시간대에 의존하지 않도록 명시적
오프셋 또는 UTC를 사용하세요.

In
`@src/main/java/com/leets7th/job_is_be/domain/job/repository/JobPostingRepository.java`:
- Line 12: Update JobPostingRepository.findAll() and its
JobPostingSyncService.sync() caller so synchronization no longer materializes
every JSON-containing posting at once. Replace the repository contract with
paged retrieval or retrieval of only postings changed since the last
synchronization, and update sync() to process results incrementally while
preserving synchronization coverage.

In
`@src/main/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncService.java`:
- Around line 23-31: Update JobPostingSyncService.sync to run once when the
application starts in addition to the existing scheduled execution, using the
appropriate startup lifecycle annotation or hook. Preserve the hourly `@Scheduled`
behavior and add a test verifying that starting with a newly loaded database
creates Job records immediately.

In `@src/main/java/com/leets7th/job_is_be/global/config/SecurityConfig.java`:
- Around line 71-74: 인증 및 CSRF 정책이 SecurityConfig와 CLAUDE.md에서 불일치합니다.
src/main/java/com/leets7th/job_is_be/global/config/SecurityConfig.java의 csrf 설정과
인증 규칙을 의도한 단일 정책으로 정리하고, CLAUDE.md 36행의 설명도 동일한 정책을 반영하도록 갱신하세요. SecurityConfig의
JWT 인증, refresh 엔드포인트 CSRF 적용, stateless 설정과 문서의 CSRF disabled 및 permitAll 설명 중
실제 요구사항에 맞는 동작을 확정해 양쪽이 일치하게 유지하세요.

---

Nitpick comments:
In `@CLAUDE.md`:
- Around line 28-30: Update the architecture description in CLAUDE.md to match
the current package structure, including the added controller, dto, repository,
service, and converter packages under domain/deck and domain/job. Alternatively,
explicitly state that entity/enums-only is an intentional rule and clarify how
these existing packages comply; ensure the documentation consistently reflects
one of these interpretations.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 17190f2f-a223-449e-897c-25b3836bcbab

📥 Commits

Reviewing files that changed from the base of the PR and between 3e1b265 and 801a501.

📒 Files selected for processing (37)
  • .gitignore
  • CLAUDE.md
  • database/DATA_DICTIONARY.md
  • database/README.md
  • database/data/companies.jsonl
  • database/data/job_postings.jsonl
  • database/load.py
  • database/requirements.txt
  • database/schema.sql
  • src/main/java/com/leets7th/job_is_be/JobIsBeApplication.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/controller/BriefingController.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/controller/CardController.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/controller/DeckController.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/dto/BriefingResponse.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/dto/CardResponse.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/entity/Deck.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/repository/CardRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/repository/DeckRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/CardService.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java
  • src/main/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverter.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Company.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/JobPosting.java
  • src/main/java/com/leets7th/job_is_be/domain/job/repository/JobPostingRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/job/repository/JobRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncService.java
  • src/main/java/com/leets7th/job_is_be/global/config/SecurityConfig.java
  • src/main/java/com/leets7th/job_is_be/global/config/WebConfig.java
  • src/main/java/com/leets7th/job_is_be/global/status/ErrorStatus.java
  • src/main/java/com/leets7th/job_is_be/global/status/SuccessStatus.java
  • src/test/java/com/leets7th/job_is_be/domain/deck/service/BriefingServiceTest.java
  • src/test/java/com/leets7th/job_is_be/domain/deck/service/CardServiceTest.java
  • src/test/java/com/leets7th/job_is_be/domain/deck/service/RecommendationServiceTest.java
  • src/test/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverterTest.java
  • src/test/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncServiceTest.java

Comment thread .gitignore Outdated
Comment thread database/load.py
Comment thread src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java Outdated
Comment thread src/main/java/com/leets7th/job_is_be/domain/job/entity/Company.java
Comment thread src/main/java/com/leets7th/job_is_be/domain/job/entity/JobPosting.java Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/test/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncServiceTest.java (1)

44-104: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

LGTM!

다만, 모든 테스트가 단일 슬라이스(hasNext() = false)만 검증하므로, 다중 페이지 순회(chunk.hasNext() == true 시나리오)에 대한 테스트 추가를 권장합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/test/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncServiceTest.java`
around lines 44 - 104, JobPostingSyncServiceTest의 단일 슬라이스 테스트만으로는 다음 페이지 순회가
검증되지 않는다. sync() 또는 syncOnStartup() 호출 시 jobPostingRepository.findAll(any())가 첫
번째 Slice에서는 hasNext()가 true이고 이후 Slice에서는 false를 반환하도록 설정하는 테스트를 추가하고, 모든 페이지의
JobPosting이 처리·저장 또는 갱신되는지 검증하라.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncService.java`:
- Around line 18-49: Remove the class-level transaction covering
JobPostingSyncService.sync and move each page’s upsert work into a separately
proxied transactional operation, such as a dedicated bean method or
TransactionTemplate. Update sync to invoke that operation once per fetched page,
preserving PAGE_SIZE pagination while ensuring each chunk commits or rolls back
independently and avoiding self-invocation of a transactional method.

---

Nitpick comments:
In
`@src/test/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncServiceTest.java`:
- Around line 44-104: JobPostingSyncServiceTest의 단일 슬라이스 테스트만으로는 다음 페이지 순회가 검증되지
않는다. sync() 또는 syncOnStartup() 호출 시 jobPostingRepository.findAll(any())가 첫 번째
Slice에서는 hasNext()가 true이고 이후 Slice에서는 false를 반환하도록 설정하는 테스트를 추가하고, 모든 페이지의
JobPosting이 처리·저장 또는 갱신되는지 검증하라.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 7adfb171-0aaa-49e1-a310-e69e1cca5503

📥 Commits

Reviewing files that changed from the base of the PR and between 801a501 and a41a7ec.

📒 Files selected for processing (14)
  • .gitignore
  • src/main/java/com/leets7th/job_is_be/domain/deck/dto/CardResponse.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java
  • src/main/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverter.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Company.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/JobPosting.java
  • src/main/java/com/leets7th/job_is_be/domain/job/repository/JobPostingRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/job/repository/JobRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncService.java
  • src/main/java/com/leets7th/job_is_be/global/base/BaseEntity.java
  • src/test/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverterTest.java
  • src/test/java/com/leets7th/job_is_be/domain/job/service/JobPostingSyncServiceTest.java
🚧 Files skipped from review as they are similar to previous changes (9)
  • src/main/java/com/leets7th/job_is_be/domain/job/repository/JobRepository.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/dto/CardResponse.java
  • src/main/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverter.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/JobPosting.java
  • src/test/java/com/leets7th/job_is_be/domain/job/converter/JobPostingConverterTest.java
  • src/main/java/com/leets7th/job_is_be/domain/job/entity/Company.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java

@yukyoungs yukyoungs 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.

기능구현 파이프라인부터 단위 테스트까지 작성해주셨네용 좋습니다!! 화이팅

Comment thread src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java Outdated
Comment thread src/main/java/com/leets7th/job_is_be/domain/deck/entity/Deck.java Outdated
@yukyoungs
yukyoungs self-requested a review July 17, 2026 09:53
yukyoungs
yukyoungs previously approved these changes Jul 17, 2026
@jihoonkim501
jihoonkim501 dismissed yukyoungs’s stale review July 17, 2026 09:57

The merge-base changed after approval.

sky-0131
sky-0131 previously approved these changes Jul 17, 2026
@jihoonkim501
jihoonkim501 dismissed sky-0131’s stale review July 17, 2026 10:48

The merge-base changed after approval.

@coderabbitai coderabbitai Bot mentioned this pull request Jul 17, 2026
11 tasks

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/main/java/com/leets7th/job_is_be/domain/deck/entity/Deck.java`:
- Around line 49-53: Deck의 `@Builder가` user와 deckDate만 받지 않도록 all-args 생성자를 기준으로
변경하세요. emptyReason, firstOpenedAt, completedAt을 포함한 모든 엔티티 상태가 빌더에서 설정되게 하되, 기존
필드와 생성자 동작은 유지하세요.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 00e5b8e9-941d-47e5-9392-86b192a80c1a

📥 Commits

Reviewing files that changed from the base of the PR and between 4bb1289 and 381d5cf.

📒 Files selected for processing (4)
  • src/main/java/com/leets7th/job_is_be/domain/deck/entity/Deck.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java
  • src/main/java/com/leets7th/job_is_be/domain/personality/entity/PersonalityTest.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java
  • src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java

Comment thread src/main/java/com/leets7th/job_is_be/domain/deck/entity/Deck.java
sky-0131
sky-0131 previously approved these changes Jul 17, 2026
@jihoonkim501
jihoonkim501 dismissed sky-0131’s stale review July 17, 2026 16:21

The merge-base changed after approval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feat 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 카드(공고), 덱(공고 모음) 크롤링 적용 기능 구현

3 participants