📝 Paste your code,
get a ready-to-review draft
AI drafts documentation, code review comments, PR descriptions, or a legacy-code onboarding summary — nothing invented, and any secret-looking string is masked automatically.
Code Documentation & README Draft
Pasted code (before)
function calcDiscount(price, rate, isVip) {
if (isVip) rate += 0.05;
return Math.round(price * (1 - rate));
}
⬇
AI document (after)
## calcDiscount(price, rate, isVip)
**한 줄 요약:** 가격에 할인율을 적용해 최종 결제 금액을 계산하며, VIP 회원은 할인율에 5%p를 추가로 더한다.
**파라미터**
- `price` (number): 원가
- `rate` (number): 기본 할인율 (0~1)
- `isVip` (boolean): VIP 회원 여부
**반환값**
- (number): 반올림 처리된 최종 결제 금액
**사용 예시**
```js
calcDiscount(10000, 0.1, true); // 8500
```
**주의사항**
- rate가 0.95를 초과하면 VIP 가산 시 할인율이 100%를 넘어 음수 가격이 될 수 있습니다 (코드에서 확인 필요).
- 입력값 유효성 검증(price 음수, rate 범위) 로직은 없습니다.
- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
AI Code Review Comments
Pasted code (before)
app.get('/user/:id', (req, res) => {
const q = "SELECT * FROM users WHERE id = " + req.params.id;
db.query(q, (err, rows) => { res.json(rows); });
});
⬇
AI document (after)
🔴 심각
- 해당 부분(쿼리 조합): 문자열 결합으로 SQL을 생성하고 있어 SQL Injection에 취약합니다. `req.params.id`를 파라미터 바인딩(`?`, prepared statement)으로 전달하도록 수정을 권장합니다.
```js
db.query('SELECT * FROM users WHERE id = ?', [req.params.id], (err, rows) => { ... });
```
🟡 권장
- 해당 부분(에러 처리): `err`가 무시되고 있습니다. 쿼리 실패 시 500 응답과 로깅을 추가하는 것이 좋을 수 있습니다(확인 필요).
🟢 참고
- 라우트 네이밍과 REST 컨벤션은 잘 지켜지고 있습니다 👍
- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
PR Description & Commit Message Draft
Pasted code (before)
장바구니에 수량 0 되면 자동으로 아이템 삭제되게 고쳤어요. 이슈 #142
⬇
AI document (after)
**커밋 메시지 후보**
1. `fix: remove cart item automatically when quantity reaches 0`
2. `fix(cart): auto-remove zero-quantity items`
3. `fix: prevent zero-quantity items from persisting in cart`
**PR 제목**
fix: 장바구니 수량 0 시 아이템 자동 삭제
**PR 본문**
- 배경: 수량을 0으로 내려도 아이템이 장바구니에 남아있던 문제 수정
- 주요 변경사항:
- 수량 변경 핸들러에 0 체크 로직 추가
- 0이 되면 해당 아이템을 목록에서 제거
- 테스트 방법: 장바구니에서 수량을 1 → 0으로 변경 후 아이템이 사라지는지 확인
- (스크린샷 첨부)
Closes #142
- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
Legacy Code Onboarding Summary
Pasted code (before)
class OrderMgr {
static I;
q = [];
push(o){ this.q.push(o); if(!this._t) this._t = setInterval(()=>this.flush(), 3000); }
flush(){ /* legacy batch sync */ }
}
⬇
AI document (after)
## OrderMgr 모듈 개요
주문(order) 객체를 큐에 모아두었다가 3초 간격으로 일괄 처리(batch)하는 싱글톤 형태의 클래스로 보입니다.
**핵심 함수/클래스**
| 이름 | 역할 |
|---|---|
| `I` (static) | 싱글톤 인스턴스 저장용으로 추정 (실제 할당 코드는 확인 필요) |
| `push(o)` | 큐에 주문 추가, 최초 호출 시 3초 주기 타이머 시작 |
| `flush()` | 큐를 비우는 배치 동기화 로직 (구현 내용은 코드에서 확인 필요) |
**암묵적 규칙/특이 패턴**
- `_t`라는 내부 타이머 필드를 조건부로 생성하는 지연 초기화(lazy init) 패턴 사용
- 싱글톤 패턴으로 보이나 `I`에 실제로 인스턴스를 할당하는 코드가 이 스니펫에는 없음 (팀에 확인 필요)
**수정 시 주의할 점**
- `flush()`가 실패했을 때의 재시도/에러 처리 로직이 보이지 않아, 수정 시 유실 가능성을 팀에 확인해야 합니다.
**첫 주 체크리스트**
- [ ] `I` 인스턴스가 어디서 초기화되는지 확인
- [ ] `flush()`의 실제 배치 동기화 대상(API/DB) 파악
- [ ] 타이머 정리(clearInterval) 로직 존재 여부 확인
- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
Document my own code (Click)
Powered by longlifephoto