Skip to content

[FEATURE] 저장된 URL 중복 체크 API 연동 #74

Description

@kbh0218

[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 중복 체크 API 타입과 호출 함수를 api/saved-links.ts에 추가했는가?
  • GET /api/v1/saved-links/check?url={url} 요청에 Clerk 인증 토큰이 포함되는가?
  • API 호출에 authenticatedApiRequest를 사용하는가?
  • 입력 URL을 query parameter로 전달할 때 안전하게 인코딩했는가?
  • 사용자가 검사 시작 버튼을 누르면 분석 요청 전에 중복 체크 API를 먼저 호출하는가?
  • exists: true 응답이면 분석 요청을 시작하지 않고 사용자에게 이미 저장된 링크임을 안내하는가?
  • exists: false 응답이면 기존 링크 검사 흐름이 그대로 진행되는가?
  • 중복 체크 API 실패 시 사용자에게 적절한 안내를 표시하는가?
  • 중복 체크 요청 중 검사 버튼 중복 입력이 발생하지 않도록 처리했는가?
  • 기존 POST /api/v1/analyses 요청 및 polling 흐름이 깨지지 않는가?
  • 이미 저장된 URL 안내 후 사용자가 URL을 수정하면 다시 검사할 수 있는가?
  • Android 에뮬레이터에서 중복 URL과 신규 URL 흐름을 각각 확인했는가?
  • 실제 휴대폰 preview 빌드에서 중복 URL 안내와 정상 검사 흐름을 확인했는가?

📎 우선 확인 대상

  • 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를 수동으로 먼저 호출하지 않습니다.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions