Backend Integration Status · Supabase

수리수리 AI 백엔드 ERD & 연동 현황

기준일 2026-08-24 · ~/surisuri-ai-platform/supabase
19 테이블+ 뷰 2개 (관리자 조회용)
8 마이그레이션001 ~ 008 본선 반영
35 화면·메뉴소비자 18 · 파트너 12 · 관리자 5
44 API 함수platformApi.ts
18 / 19 연동audit_logs만 스키마 단계
1 Edge Functionplatform-api
Toss Payments에스크로 5단계 정산 연동

ERD — 도메인별 테이블 관계

화살표는 FK 참조(자식 → 부모)입니다. 헤더의 점은 코드 연동 상태를 나타냅니다.

연동 완료 (Edge Function/앱에서 실사용) 스키마만 정의 (코드 미사용) 외부 관리형 · 뷰 FK 참조 (지면상 profiles행 일부는 표기로 대체)
USERS · 사용자/동의/기기 REQUESTS · 수리요청/AI견적 PAYMENTS · 에스크로/결제 PARTNERS · 파트너/매칭 auth.users Supabase Auth · 관리형 인증 profiles idPK = auth.users.id roleconsumer·partner·admin nametext phonetext user_consents user_idFK → profiles consent_typetext consented_attimestamptz consumer_addresses user_idFK → profiles addresstext is_defaultboolean consumer_push_devices user_idFK → profiles fcm_tokenFCM 푸시 platformios · android account_deletion_req. user_idFK → profiles · unique statustext requested_attimestamptz notifications user_idFK → profiles channel'fcm' title · bodytext payloadjsonb · sent_at audit_logs actor_idFK → profiles actiontarget_table · target_id metadatajsonb — 미연동 repair_requests consumer_idFK → profiles category · titletext description · addresstext statusrepair_status enum locationgeography · PostGIS repair_photos request_idFK → repair_requests storage_pathStorage · unique labeltext ai_estimates request_idFK → repair_requests damage_typeseverity tasks · cautionsjsonb min·max_amount견적 범위(원) confidenceprovider · GPT-4o Vision 2 VIEWS platform_repair_requests platform_partner_profiles security_invoker · 좌표 lat/lng 평탄화 escrow_stages request_idFK → repair_requests code · label5단계 고정(RPC 검증) amountinteger · 원 statusescrow_stage_status sequence1 – 5 payments request_idFK → repair_requests stage_code에스크로 단계 연결 order_id · payment_keyToss amount · status멱등키 2종 receipt_urlapproved·canceled_at payment_events payment_idFK → payments event_keyunique · 웹훅 멱등 event_type · statusreceived…failed payloadjsonb · hash unique partner_profiles user_idFK → profiles display_nameservice_areas[] locationgeography · PostGIS ratingcompletion · available partner_skills partner_idFK → partner_profiles categorytext level 1–5 · years숙련도 가중치 입력 match_results request_idFK → repair_requests partner_idFK → partner_profiles total_score · rank특허 가중치 엔진 breakdownjsonb · reason partner_quotes request_idFK → repair_requests partner_idFK · unique 조합 amount · durationmemo statussubmitted·accepted·rej. partner_req_declines request_idFK → repair_requests partner_user_idFK → profiles created_attimestamptz partner_account_req. partner_user_idFK → profiles status가입 승인 요청 created_attimestamptz
수리수리 AI 플랫폼 Supabase 스키마(마이그레이션 001–008 기준). 두 허브(profiles, repair_requests)를 중심으로 소비자·파트너·결제 도메인이 연결됩니다. partner_request_declines·partner_account_requests의 profiles 참조는 지면상 화살표 대신 FK 표기로 나타냈습니다.

테이블별 연동 현황

연동 판정 기준: Edge Function platform-apiplatformRepository.ts의 Supabase REST 호출 + 앱 코드 실사용 여부.

사용자 · 동의 · 기기

소비자 계정, 약관 동의, 주소록, 푸시 기기, 탈퇴 요청

  • profiles연동
  • user_consents연동
  • consumer_addresses연동
  • consumer_push_devices연동
  • account_deletion_requests연동
  • notifications연동
  • audit_logs스키마만

수리 요청 · AI 견적

사진 업로드 → GPT-4o Vision 분석 → 견적 산출

  • repair_requests연동
  • repair_photos연동
  • ai_estimates연동
  • platform_repair_requestsVIEW
  • platform_partner_profilesVIEW

에스크로 · 결제

Toss Payments 연동, 단계별(5단계) 에스크로 정산, 웹훅 멱등 처리

  • escrow_stages연동
  • payments연동
  • payment_events연동

파트너 · 매칭 · 견적

숙련공 프로필, 특허(10-2026-0010208) 가중치 매칭, 견적 제출/수락

  • partner_profiles연동
  • partner_skills연동
  • match_results연동
  • partner_quotes연동
  • partner_request_declines연동
  • partner_account_requests연동
연동 경로 — 앱(Flutter 소비자/파트너, React 관리자 웹) → Edge Function platform-apiplatformApi.ts (1,952줄) / platformRepository.ts (1,345줄) → Supabase PostgREST. 로컬 개발용 in-memory 리포지토리 모드가 별도로 존재합니다.

기능 커버리지 매트릭스 — 계약 산출물 8종 × 구현 기능 51개

계약서 제2조 산출물 기준으로 코드에서 확인된 실제 구현 기능만 나열했습니다. 화면 수는 저장소 내 기술 명세서(technical-specification.md) 기준이며, 계약 최소 요건(7·6화면, 5메뉴)을 상회합니다.

기능화면/모듈백엔드 APIDB상태
① 소비자 모바일 앱 — 계약 7화면 → 구현 18화면/상태 (Flutter · iOS/Android/Web)
스플래시 · 온보딩 3종(사진 진단/매칭/에스크로 안내)화면 1–4구현
로그인/회원가입 진입화면 5Supabase Authprofiles구현
약관·개인정보 동의(전체/필수/선택 · 필수 검증)화면 6saveConsumerConsents · getConsumerConsentStateuser_consents구현
홈 대시보드(주소 기반) · 진행중 요청화면 7listConsumerRepairRequestsrepair_requests구현
수리 요청 작성(카테고리·주소·일정·설명)화면 8–9createRepairRequestrepair_requests구현
사진 촬영·업로드·삭제 관리화면 10registerRepairPhoto · deleteRepairPhotorepair_photos · Storage구현
AI 분석 진행/결과(손상·심각도·작업·금액·신뢰도·주의)화면 11–12analyzeRepairPhoto · calculateEstimateai_estimates구현
파트너 매칭 목록·상세(점수 근거·리뷰·가능 지역)화면 13–14matchPartnersForRequestmatch_results구현
견적 비교·선택·수락(실패 복구 포함)화면 15listQuotesForRequest · acceptPartnerQuoteForRequestpartner_quotes구현
Toss 결제(주문 생성·승인·조회·취소·영수증)화면 16createPaymentOrder… 외 5종payments구현
5단계 에스크로 상태 표시화면 16getEscrowStagesForRequestescrow_stages구현
진행 타임라인 · 알림 센터화면 17notifyConsumerForRequestnotifications구현
완료 확인(검수 승인)화면 17confirmRepairCompletionrepair_requests구현
FCM 푸시 기기 등록·해제설정registerConsumerPushDevice · unregister…consumer_push_devices구현
주소록 관리(추가·수정·삭제·기본 지정)마이페이지upsertConsumerAddress · deleteConsumerAddressconsumer_addresses구현
프로필 조회·수정 · 회원 탈퇴 요청화면 18getConsumerProfile · updateConsumerProfile · requestConsumerAccountDeletionprofiles · account_deletion_requests구현
모바일 웹 버전(Flutter Web 빌드·전 화면)kIsWeb 분기 처리웹 PG·카메라·푸시 계약상 제외
② 파트너(숙련공) 앱 — 계약 6화면 → 구현 12화면/상태 (Flutter)
스플래시 · 파트너 로그인화면 1–2Supabase Authprofiles구현
파트너 약관 동의(사업자·정산정보 처리 동의)화면 3savePartnerConsentsuser_consents구현
프로필·인증 상태 · 워크스페이스(완성도·서류·성과)화면 4getPartnerWorkspacepartner_profiles구현
숙련도·카테고리·서비스 지역 설정화면 5partner_skills구현
매칭된 요청 피드(관리자 전체 목록과 분리)화면 6partnerListRequestsmatch_results구현
요청 상세(사진·AI 분석 결과·예상 작업)화면 7repair_photos · ai_estimates구현
견적 제안(금액·예상 기간·메모)화면 8submitPartnerQuotepartner_quotes구현
요청 수락/거절 상태 전환화면 9declinePartnerRequestpartner_request_declines구현
작업 단계 업데이트(방문→진행→완료→정산 대기)화면 10updateRepairStatusrepair_requests구현
정산·에스크로 조회 · 정산 계좌 마스킹화면 11–12getEscrowStagesForRequestescrow_stages구현
파트너 가입(계정 전환) 요청화면 12submitPartnerAccountRequestpartner_account_requests구현
③ 관리자 웹 — 5개 메뉴 (React 19 + TypeScript + Vite)
대시보드(활성 요청·AI 견적 범위·추천 파트너·에스크로)대시보드adminGetDashboardSnapshotplatform_* 뷰 2종구현
요청/견적/매칭 관리(요청 상세·AI 결과·매칭 결과)요청 관리adminListRequestsplatform_repair_requests구현
사용자·파트너·정산/에스크로 관리 메뉴3개 메뉴profiles · partner_profiles · escrow_stages구현
④ AI 사진 분석·견적 모듈 — OpenAI GPT-4o Vision
사진 → 견적 산출(출력 6필드: 손상유형·심각도·작업·금액범위·신뢰도·주의사항)core/aiEstimator.tsanalyzeRepairPhotoai_estimates구현
fail-closed 운영 보호(API 키 미설정 시 명시적 실패)OpenAIResponsesVisionEstimator구현
로컬 검수/라이브 어댑터 이중화(결정적 검수 결과)LocalVisionEstimator구현
⑤ 특허 다중 숙련도 가중치 매칭 엔진 — 10-2026-0010208
7개 요소 가중치 스코어링(숙련도·거리·평점·응답속도·완료율·가용성·견적적합도)core/matchingEngine.tsmatchPartnersForRequestpartner_skills · match_results구현
총점·순위·점수 breakdown·추천 근거 문장 자동 생성match_results.breakdown구현
⑥ 단계별 에스크로 정산 시스템 — Toss Payments 연동
5단계 상태 전이(견적확정→착수금→진행→완료→잔금) · 단계 건너뛰기 방지 RPCcore/escrow.tsadvanceEscrowStageForRequestescrow_stages구현
견적 수락 시 경쟁 견적 자동 거절 + 에스크로 원자적 생성acceptPartnerQuoteForRequestpartner_quotes · escrow_stages구현
결제 주문 생성·승인·조회·새로고침·취소(승인/취소 멱등키 분리)createPaymentOrderForRequest 외 5종payments구현
결제 웹훅 수신·중복 차단(event_key · payload_hash unique)handlePaymentWebhookpayment_events구현
결제 취소 시 에스크로 단계 자동 재개reopenEscrowStageAfterCancellationescrow_stages구현
착수금/잔금 금액 분리 · 수락 견적 금액 일치 검증assertEscrowAmountsMatchAcceptedQuote구현
⑦ Backend 인프라 — Supabase
Auth JWT 인증 + Edge Function Bearer 토큰 검증platform-apiEdge Function 721줄auth.users구현
PostGIS 위치 저장(요청·파트너) · 거리 기반 매칭geography(point,4326)repair_requests · partner_profiles구현
Storage 사진 저장(경로 unique 제약)repair_photos구현
FCM 푸시 발송 모듈notificationSender.tsnotifications · consumer_push_devices구현
저장소 이중화(로컬 검수/운영 REST) · 환경변수 fail-fast 전환createPlatformRepositoryFromEnv구현
⑧ 보안 — JWT · RLS · HTTPS · PCI-DSS
전 테이블 RLS 활성화 + 소비자/파트너/관리자 정책migrations전체구현
소유권·역할·매칭 파트너 행위 권한 검사 계층platformAccessControl.ts (212줄)구현
is_admin() security definer 재귀 회피 · security_invoker 뷰platform_* 뷰구현
카드정보 비저장 구조 — PG(PCI-DSS) 위임, 참조키만 보관payments(payment_key)구현

참고 사항

\n