Skip to content

Commit 95ed577

Browse files
authored
Merge pull request #17 from boostcampwm-snu-2026-1/feature/main-features
Feature/main features
2 parents 07e0f63 + 89abc2d commit 95ed577

101 files changed

Lines changed: 5975 additions & 152 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/hooks/clear-marker-on-start.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."
33
rm -f "${PROJECT_ROOT}/.claude/.pending-doc-check"
44
rm -f "${PROJECT_ROOT}/.claude/.pending-rust-check"
55
rm -f "${PROJECT_ROOT}/.claude/.pending-spec-check"
6+
rm -f "${PROJECT_ROOT}/.claude/.pending-fe-check"
67
rm -f "${PROJECT_ROOT}/.claude/.plan-exists"

.claude/hooks/coverage-check-fe.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/bash
22
PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
3+
# 프론트 소스가 실제로 변경됐을 때만 실행 (마커 게이트). 대화만 한 턴은 즉시 통과.
4+
[ ! -f "${PROJECT_ROOT}/.claude/.pending-fe-check" ] && exit 0
35
FE_DIR="${PROJECT_ROOT}/frontend"
46
[ ! -d "$FE_DIR" ] && exit 0
57
[ ! -d "$FE_DIR/node_modules" ] && exit 0

.claude/hooks/mark-pending.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."
66
MARKER="${PROJECT_ROOT}/.claude/.pending-doc-check"
77
RUST_MARKER="${PROJECT_ROOT}/.claude/.pending-rust-check"
88
SPEC_MARKER="${PROJECT_ROOT}/.claude/.pending-spec-check"
9+
FE_MARKER="${PROJECT_ROOT}/.claude/.pending-fe-check"
910
PLAN_MARKER="${PROJECT_ROOT}/.claude/.plan-exists"
1011

1112
# docs/plans/ 작성 시 플랜 마커 생성
@@ -16,7 +17,7 @@ fi
1617

1718
# docs/works/ 또는 specification/ 작성 시 마커 제거
1819
if echo "$FILE_PATH" | grep -qE '(docs/works/|specification/)'; then
19-
rm -f "$MARKER" "$RUST_MARKER" "$SPEC_MARKER"
20+
rm -f "$MARKER" "$RUST_MARKER" "$SPEC_MARKER" "$FE_MARKER"
2021
exit 0
2122
fi
2223

@@ -31,6 +32,11 @@ if echo "$FILE_PATH" | grep -qE '(backend/src/|frontend/src/|frontend/app/|backe
3132
touch "$MARKER"
3233
fi
3334

35+
# 프론트 소스 변경 시 fe-check 마커 생성 (Stop 훅의 커버리지 게이트용)
36+
if echo "$FILE_PATH" | grep -qE '(frontend/src/|frontend/app/)'; then
37+
touch "$FE_MARKER"
38+
fi
39+
3440
# .rs 변경 시 rust-check 마커 생성
3541
if echo "$FILE_PATH" | grep -qE 'backend/.*\.rs$'; then
3642
touch "$RUST_MARKER"

.claude/hooks/session-doc-on-stop.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ STOP_HOOK_ACTIVE=$(echo "$INPUT" | jq -r '.stop_hook_active // false')
44
if [ "$STOP_HOOK_ACTIVE" = "true" ]; then exit 0; fi
55
PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
66

7+
# 코드 작업이 있었던 턴에서만 세션 문서를 생성 (마커 게이트).
8+
# 대화만 한 턴은 무거운 claude --print 호출 없이 즉시 통과.
9+
[ ! -f "${PROJECT_ROOT}/.claude/.pending-doc-check" ] && exit 0
10+
711
TRANSCRIPT=$(echo "$INPUT" | jq -r '.transcript_path // ""')
812
[ -z "$TRANSCRIPT" ] || [ ! -f "$TRANSCRIPT" ] && exit 0
913

backend/.env.example

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,11 @@ DATABASE_URL=postgres://postgres:password@localhost:5432/coupang_review_ai
22
JWT_SECRET=your-secret-key-here
33
JWT_EXPIRES_IN=86400
44
SERVER_PORT=8080
5+
GEMINI_API_KEY=your-gemini-api-key-here
6+
GEMINI_MODEL=gemini-2.5-flash
7+
8+
# 크롤러 모드: http(기본, 실제 쿠팡) | mock(픽스처 리뷰, 로컬 데모용)
9+
CRAWLER_MODE=http
10+
# 스크래핑 API 프록시(선택). {url} 에 타겟 URL 이 치환된다. 예: ScraperAPI/ZenRows
11+
# 설정 시 모든 크롤링이 프록시 경유(anti-bot/IP 로테이션을 벤더가 처리).
12+
# COUPANG_PROXY_URL=https://api.scraperapi.com/?api_key=YOUR_KEY&url={url}

backend/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ tower = "0.4"
2929
tower-http = { version = "0.5", features = ["cors", "trace"] }
3030
tracing = "0.1"
3131
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
32+
reqwest = { version = "0.11", features = ["json"] }
3233

3334
[dev-dependencies]
34-
reqwest = { version = "0.11", features = ["json"] }
3535
tokio = { version = "1", features = ["full"] }
3636
dotenvy = "0.15"
3737
testcontainers-modules = { version = "0.11", features = ["postgres"] }

backend/migrations/00002_users.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE users (
2+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
3+
email TEXT NOT NULL UNIQUE,
4+
password_hash TEXT NOT NULL,
5+
plan TEXT NOT NULL DEFAULT 'free',
6+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
7+
);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CREATE TABLE analyses (
2+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
3+
user_id UUID NOT NULL REFERENCES users(id),
4+
urls TEXT[] NOT NULL,
5+
review_limit INT NOT NULL DEFAULT 100,
6+
status TEXT NOT NULL DEFAULT 'pending',
7+
result JSONB,
8+
error TEXT,
9+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
10+
completed_at TIMESTAMPTZ
11+
);
12+
CREATE INDEX idx_analyses_user_created ON analyses (user_id, created_at DESC);

0 commit comments

Comments
 (0)