Skip to content

BE handoff — Organization의 Workspace 생성

정본 계약

Workspace 생성 RPC는 한 트랜잭션에서 다음을 처리한다.

  1. 호출자의 active Organization Membership과 관리자 역할 확인
  2. workspaces 행 생성과 불변 workspace_number 배정
  3. 호출자의 Organization Role을 새 Workspace에 같은 등급으로 투영
  4. Organization 계약 품목과 요청 module의 교집합 검증
  5. workspace_module_entitlements 생성
  6. 프로퍼티 후보를 선택했다면 외부 코드, 출처, 조회 시각, 원본 snapshot 저장

입력은 organizationId, Workspace 표시명·edition·module·프로퍼티 snapshot만 받는다. 가격, 계약 상태, 관리자 이름, 권한은 클라이언트 값을 신뢰하지 않고 서버에서 다시 읽는다.

불변식

  • Workspace 코드는 Organization 안에서 unique이고 생성 뒤 변경할 수 없다.
  • workspace_number는 Organization 안에서 unique인 0 이상의 불변 순번이다.
  • Workspace·entitlement·외부 snapshot 중 하나라도 실패하면 전체 rollback한다.
  • 외부 프로퍼티 snapshot 저장 실패도 부분 성공을 허용하지 않는다.
  • 요청 module은 active Organization 계약 품목의 부분집합이어야 한다.
  • security definer 함수는 search_path = public, pg_temp를 고정한다.
  • 생성 RPC는 authenticated만 실행하고, 함수 안에서 현재 Principal과 Organization 권한을 다시 검증한다.

공공데이터 키는 Edge Function secret으로만 관리한다. 주소 검색은 사용자의 법정동 포함 입력을 사용하고, 상세 조회는 첫 응답의 전체 건수로 페이지 수를 확정한 뒤 제한된 병렬 요청으로 수집한다.

로그인 뒤 Workspace 선택과 상단 범위 전환은 UI 상태일 뿐 권한을 만들지 않는다. 서버는 매 요청에서 active Organization Membership + Role 투영 또는 active Workspace Membership + 직접 Role을 다시 검사한다.

Organization Role은 별도 Workspace Membership이나 직접 Role Assignment 없이 owner→owner, admin→admin, manager→manager, viewer→viewer로 투영한다. Workspace-only 사용자와 Workspace 직접 승격은 active Workspace Membership과 workspace.owner | workspace.admin | workspace.manager | workspace.viewer 중 하나를 필요로 한다.