[FEATURE] 저장된 URL 중복 체크 API 연동
📝 기능 설명
링크 검사 시작 전, 사용자가 입력한 URL이 이미 저장된 링크에 존재하는지 확인하는 API를 연동합니다.
백엔드 LinClean-BE-spring의 PR #43으로 저장 링크 URL 중복 체크 API가 dev 브랜치에 머지되었습니다.
참고 백엔드 PR:
관련 API:
GET /api/v1/saved-links/check?url={url}
- Clerk 인증 토큰 필요
- 응답 예시:
{
"data": {
"exists": true
}
}
현재 프론트에서는 URL 입력 후 바로 검사 화면으로 이동하거나 분석 요청을 시작할 수 있습니다.
이번 작업에서는 분석 요청 전에 저장된 URL 여부를 먼저 확인하고, 이미 저장된 링크라면 중복 검사를 진행하지 않도록 처리합니다.
📋 구현할 Task
📎 우선 확인 대상
-
URL 추가 화면
app/(tabs)/(home)/add-link.tsx
- URL 입력 검증
- 검사 시작 버튼
- 검사 화면 이동 처리
-
검사 중 화면
app/(tabs)/(home)/scanning.tsx
requestAnalysis
- polling 시작 흐름
- timeout/error 처리
-
저장 링크 API
api/saved-links.ts
context/saved-links-context.tsx
-
공통 API 클라이언트
api/api-client.ts
authenticatedApiRequest
{ data: ... } 응답 unwrap 처리
📎 해결 방향
검사 시작 전에 저장 링크 중복 체크 API를 먼저 호출합니다.
처리 방향:
- 사용자가 URL을 입력하고 검사 시작 버튼을 누른다.
- 기존 URL 형식 검증을 먼저 수행한다.
- 검증된 URL로
GET /api/v1/saved-links/check?url={url}을 호출한다.
- 응답의
exists 값이 true이면:
- 분석 요청을 시작하지 않는다.
- 검사 중 화면으로 이동하지 않는다.
- 사용자에게 “이미 저장된 링크입니다.” 형태의 안내를 표시한다.
- 응답의
exists 값이 false이면:
- 기존처럼 검사 중 화면으로 이동한다.
POST /api/v1/analyses 요청과 polling 흐름을 그대로 진행한다.
📎 추가 내용
- 이번 이슈에서는 저장된 URL 중복 체크 API 연동만 처리합니다.
- 백엔드 중복 기준은 현재 멤버의 저장 링크 중
Analysis.original_url exact match입니다.
- API 응답은
{ data: { exists: boolean } } 형태입니다.
url query parameter 누락 또는 빈 문자열은 백엔드에서 400 Bad Request로 처리됩니다.
- 보호 API이므로 Clerk 인증 토큰이 필요합니다.
- 보호 API 호출 전
/auth/me를 수동으로 먼저 호출하지 않습니다.
[FEATURE] 저장된 URL 중복 체크 API 연동
📝 기능 설명
링크 검사 시작 전, 사용자가 입력한 URL이 이미 저장된 링크에 존재하는지 확인하는 API를 연동합니다.
백엔드
LinClean-BE-spring의 PR #43으로 저장 링크 URL 중복 체크 API가dev브랜치에 머지되었습니다.참고 백엔드 PR:
관련 API:
GET /api/v1/saved-links/check?url={url}{ "data": { "exists": true } }현재 프론트에서는 URL 입력 후 바로 검사 화면으로 이동하거나 분석 요청을 시작할 수 있습니다.
이번 작업에서는 분석 요청 전에 저장된 URL 여부를 먼저 확인하고, 이미 저장된 링크라면 중복 검사를 진행하지 않도록 처리합니다.
📋 구현할 Task
app/(tabs)/(home)/add-link.tsx에서 검사 버튼 클릭 흐름을 확인했는가?api/saved-links.ts에 추가했는가?GET /api/v1/saved-links/check?url={url}요청에 Clerk 인증 토큰이 포함되는가?authenticatedApiRequest를 사용하는가?exists: true응답이면 분석 요청을 시작하지 않고 사용자에게 이미 저장된 링크임을 안내하는가?exists: false응답이면 기존 링크 검사 흐름이 그대로 진행되는가?POST /api/v1/analyses요청 및 polling 흐름이 깨지지 않는가?📎 우선 확인 대상
URL 추가 화면
app/(tabs)/(home)/add-link.tsx검사 중 화면
app/(tabs)/(home)/scanning.tsxrequestAnalysis저장 링크 API
api/saved-links.tscontext/saved-links-context.tsx공통 API 클라이언트
api/api-client.tsauthenticatedApiRequest{ data: ... }응답 unwrap 처리📎 해결 방향
검사 시작 전에 저장 링크 중복 체크 API를 먼저 호출합니다.
처리 방향:
GET /api/v1/saved-links/check?url={url}을 호출한다.exists값이true이면:exists값이false이면:POST /api/v1/analyses요청과 polling 흐름을 그대로 진행한다.📎 추가 내용
Analysis.original_urlexact match입니다.{ data: { exists: boolean } }형태입니다.urlquery parameter 누락 또는 빈 문자열은 백엔드에서400 Bad Request로 처리됩니다./auth/me를 수동으로 먼저 호출하지 않습니다.