Conversation
* fix: rag 생성 실패 시 fallback 코드 추가 - rag 생성 호출이 실패하면 상태를 failed로 바꾼다. * fix: AI 서버 스펙 변경에 맞춰 API 스펙 수정 및 엔티티 마이그레이션 - 누락된 failed enum을 추가 - 첨삭 총평 필드를 correction_item에서 제거하고 portfolio-correction에 추가 * feat: correctionStatus enum 상태 다양화 - rag가 실패한 경우와 첨삭이 실패한 경우를 분리하기 위해 enum 상태를 추가함. * refactor: try/catch 구문을 사용해 오류 처리 로직 개선 - async/await 비동기 오류 처리로 오류 처리 로직을 더 명확하고 읽기 쉽게 개선
- 채팅 멘션 주석처리
* refactor: Admin 이벤트 보상 시스템 단순화 및 레거시 정리 (#319) - Notice 수동 입력 필드 제거, event DB 값 기반 자동 구성 - CS 이벤트 다중 지급 지원 (allowMultipleRewards) - CS 커스텀 이용권 선택 (customRewards DTO 추가) - 어드민 이벤트 드롭다운 기간 필터 제거 - CTA 자동 매핑 (보상 종류 기반) - POST /admin/api/tickets/grant API 제거 (CS 이벤트로 통합) - GET /admin/api/tickets/history API 제거 (ticket-grants로 통합) - Admin UI: 이용권 거래 내역 탭/이용권 지급 버튼 제거 - Admin UI: GrantEventRewardModal 리팩터링 - manual-reward-options에 userId 쿼리 추가 (isGranted 포함) - FEEDBACK/CS 이벤트 seed 마이그레이션 추가 * docs: API.md 제거된 엔드포인트 반영 (#319) - POST /admin/api/tickets/grant 제거 반영 - GET /admin/api/tickets/history 제거 반영 - GET /admin/api/events/manual-reward-options 문서 추가 * refactor: createNotice 체크박스 제거, 항상 notice 생성 (#319) - Admin UI: 보상 안내 모달 체크박스 제거 → 항상 생성 - AdminGrantRewardReqDTO: createNotice 필드 제거 - buildNoticeFromEvent: createNotice 파라미터 제거 * fix: 이벤트 옵션 로드 실패 시 에러 메시지 표시 (#319)
* fix: 보상 안내 body 저장 형식 수정 (#321) - ticket grant notice body를 보상 요약만 저장하도록 수정 - 관리자 보상 지급 경로와 DTO 예시, 단위 테스트를 함께 정리 - 왜: DB에 프레젠테이션 문구가 저장되면 모달에서 문구가 중복 표시되기 때문 * fix: 관리자 보상 안내 미리보기 문구 수정 (#321) - 관리자 지급 모달 미리보기에서 보상 요약만 노출하도록 수정 - 왜: 서버 body 계약과 동일하게 보여야 운영 화면에서도 중복 문구를 피할 수 있음 * docs: 이용권 지급 안내 body 예시 수정 (#321) - 프론트 핸드오프와 제안 문서의 body 예시를 보상 요약만 남기도록 수정 - 왜: 실제 저장 계약과 문서 예시가 달라지면 구현과 운영 이해가 어긋남
* Fix: 포트폴리오 내용 글자수 임시 변경 (#313) * Fix: rag 요청 실패 시 fallback 로직 추가 (#312) * fix: rag 생성 실패 시 fallback 코드 추가 - rag 생성 호출이 실패하면 상태를 failed로 바꾼다. * fix: AI 서버 스펙 변경에 맞춰 API 스펙 수정 및 엔티티 마이그레이션 - 누락된 failed enum을 추가 - 첨삭 총평 필드를 correction_item에서 제거하고 portfolio-correction에 추가 * feat: correctionStatus enum 상태 다양화 - rag가 실패한 경우와 첨삭이 실패한 경우를 분리하기 위해 enum 상태를 추가함. * refactor: try/catch 구문을 사용해 오류 처리 로직 개선 - async/await 비동기 오류 처리로 오류 처리 로직을 더 명확하고 읽기 쉽게 개선 * fix: createdAt 시간 오류 해결 (#315) * Fix: 인사이트로그 시간 에러 해결 (#317) - 채팅 멘션 주석처리 * Fix: 시간 UTC로 롤백 (#318) * Refactor: Admin 이벤트 보상 시스템 단순화 및 레거시 정리 (#319) (#320) * refactor: Admin 이벤트 보상 시스템 단순화 및 레거시 정리 (#319) - Notice 수동 입력 필드 제거, event DB 값 기반 자동 구성 - CS 이벤트 다중 지급 지원 (allowMultipleRewards) - CS 커스텀 이용권 선택 (customRewards DTO 추가) - 어드민 이벤트 드롭다운 기간 필터 제거 - CTA 자동 매핑 (보상 종류 기반) - POST /admin/api/tickets/grant API 제거 (CS 이벤트로 통합) - GET /admin/api/tickets/history API 제거 (ticket-grants로 통합) - Admin UI: 이용권 거래 내역 탭/이용권 지급 버튼 제거 - Admin UI: GrantEventRewardModal 리팩터링 - manual-reward-options에 userId 쿼리 추가 (isGranted 포함) - FEEDBACK/CS 이벤트 seed 마이그레이션 추가 * docs: API.md 제거된 엔드포인트 반영 (#319) - POST /admin/api/tickets/grant 제거 반영 - GET /admin/api/tickets/history 제거 반영 - GET /admin/api/events/manual-reward-options 문서 추가 * refactor: createNotice 체크박스 제거, 항상 notice 생성 (#319) - Admin UI: 보상 안내 모달 체크박스 제거 → 항상 생성 - AdminGrantRewardReqDTO: createNotice 필드 제거 - buildNoticeFromEvent: createNotice 파라미터 제거 * fix: 이벤트 옵션 로드 실패 시 에러 메시지 표시 (#319) --------- Co-authored-by: 강효인 <hyoin1704@gmail.com>
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이번 릴리즈는 관리자 시스템의 효율성을 높이고, 포트폴리오 첨삭 기능의 안정성과 유연성을 강화하는 데 중점을 두었습니다. 특히, 관리자 이벤트 보상 지급 프로세스를 간소화하고, 첨삭 결과 저장 방식을 개선하여 데이터 일관성을 확보했습니다. 또한, 시간 처리 로직을 표준화하고 포트폴리오 콘텐츠의 입력 범위를 확장하여 사용자 경험을 개선했습니다. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
이 PR은 관리자 보상 시스템을 수동 이용권 지급에서 이벤트 기반 시스템으로 리팩토링하고, 포트폴리오 첨삭 기능의 오류 처리 로직을 개선하며, 첨삭 결과 데이터 구조를 리팩토링하는 것을 포함합니다. 또한 updatedAt 타임스탬프가 정상적으로 갱신되지 않던 버그를 수정하고, 관련 데이터베이스 마이그레이션 및 시딩 스크립트를 추가했습니다. 보안 감사 결과, TypeORM을 통한 매개변수화된 쿼리 사용, DTO를 통한 적절한 입력 유효성 검사, 적절한 비즈니스 로직 검사를 통한 민감한 작업 보호 등 보안 모범 사례를 따르고 있어 중요한 취약점은 발견되지 않았습니다.
| description: item.description as unknown as Record<string, unknown>, | ||
| responsibilities: item.responsibilities as unknown as Record<string, unknown>, | ||
| problemSolving: item.problemSolving as unknown as Record<string, unknown>, | ||
| learnings: item.learnings as unknown as Record<string, unknown>, |
There was a problem hiding this comment.
❌ 문제: as unknown as Record<string, unknown> 타입 캐스팅은 타입 안정성을 저해하며, 컨트롤러와 서비스 계층 간의 타입 불일치를 시사합니다. 이는 향후 유지보수를 어렵게 만들 수 있습니다.
✅ 제안: portfolioCorrectionService.saveCorrectionResult 메소드가 구조화된 DTO(CorrectionFieldReqDTO)를 직접 받도록 시그니처를 변경하거나, 서비스 계층 내에서 안전한 매핑 함수를 통해 DTO를 엔티티 형식으로 변환하는 것을 권장합니다. 이는 스타일 가이드에서 강조하는 '타입 안정성'을 향상시키는 방법입니다.
References
- 타입 안정성은 높은 우선순위의 리뷰 항목입니다. 안전하지 않은 타입 캐스팅은 타입 안정성을 저해하므로 지양해야 합니다. (link)
| @@ -1,16 +1,12 @@ | |||
| import { Injectable, Logger } from '@nestjs/common'; | |||
There was a problem hiding this comment.
❌ 문제: Logger가 제거되어 관리자의 수동 보상 지급 액션에 대한 로깅이 누락되었습니다. 어떤 관리자가 언제 누구에게 어떤 보상을 지급했는지 추적하기 어렵습니다.
✅ 제안: 감사(audit) 및 디버깅 목적으로 grantFeedbackRewardByUserId 메소드 내에 명시적인 로그를 추가하는 것을 권장합니다. 이를 위해 Logger를 다시 주입하고, 보상 지급 로직 마지막에 관련 정보를 로그로 남겨주세요.
예시:
this.logger.log(
`Admin event reward grant: userId=${user.id}, eventCode=${eventCode}, rewards=${JSON.stringify(rewards)}`
);References
- 코드 가독성 및 에러 처리는 중간 우선순위의 리뷰 항목입니다. 관리자 액션에 대한 명시적인 로깅은 시스템의 동작을 이해하고 문제를 추적하는 데 중요합니다. (link)
Summary
beta.3 배포 예정 변경사항 반영
Changes
Type of Change
해당하는 항목에 체크해주세요:
Target Environment
배포 대상 브랜치를 선택해주세요:
dev)main)Related Issues
관련 이슈를 연결해주세요:
Testing
테스트 방법을 작성해주세요:
pnpm run build)pnpm run lint)pnpm test -- src/modules/interview/application/services/interview.service.spec.ts)pnpm run test)pnpm run build: 통과pnpm run lint: 통과pnpm test -- src/modules/interview/application/services/interview.service.spec.ts: 통과pnpm run test: 통과Checklist
PR 생성 전 확인사항:
docs/development/CODE_STYLE.md)docs/development/GIT_CONVENTIONS.md)docs/development/NAMING_CONVENTIONS.md)pnpm run build)pnpm run lint)Screenshots (Optional)
N/A
Additional Notes
Release: v1.0.0-beta.2)와 동일하게dev -> main릴리즈 PR 패턴을 따랐습니다.dev에 반영되었고 현재 release PR에도 포함되어 있습니다.CD (Deploy to GCP - Dev)워크플로우는 배포용 Docker build 및 배포를 수행하며, Jest 단위 테스트는 실행하지 않습니다.supabase/migrations/20260310200000_seed_feedback_w3_w4_events.sql이 있으나, 이번 release PR에는 포함하지 않았습니다.