4.6 KiB
4.6 KiB
08. Domain Model And API Contract
이 문서는 도메인 범위와 전체 계약 초안을 담는다.
실제 v0.1 구현에 바로 쓰는 최소 계약은 아래 문서를 기준으로 한다.
핵심 도메인 엔티티
User
user_iddisplay_namecreated_atstatus
Profile
user_idprofile_imagestatus_messagelocale
Device
device_iduser_iddevice_namedevice_public_keytrust_state
DeviceSession
session_iduser_iddevice_idrefresh_token_hashtoken_family_idlast_seen_atexpires_at
Invite
invite_tokenissued_by_user_idtarget_scopeexpires_atmax_usesused_count
AuthMethod
auth_method_iduser_idtypevalue_hash_or_refverified_at
Conversation
conversation_idtype(self,dm,group)titlecreated_bycreated_at
ConversationMember
conversation_iduser_idrolemutepin_orderjoined_at
Message
message_idconversation_idsender_user_idclient_request_idserver_sequencemessage_typebodycreated_atedited_at
Attachment
attachment_idmessage_idobject_keymime_typebyte_sizechecksum
ReadCursor
conversation_iduser_idlast_read_sequenceupdated_at
REST 초안
Alpha Auth
POST /v1/auth/device/bootstrapPOST /v1/auth/register/alpha-quickPOST /v1/auth/token/refreshPOST /v1/auth/logoutPOST /v1/auth/logout-all
Beta Auth
POST /v1/auth/email/startPOST /v1/auth/email/verifyPOST /v1/auth/link-email/requestPOST /v1/auth/link-email/verifyPOST /v1/auth/recovery-codes/issue
Session
GET /v1/meGET /v1/me/devicesDELETE /v1/me/devices/{deviceId}
Invites
POST /v1/invitesGET /v1/invites/{token}/previewPOST /v1/invites/{token}/accept
Conversations
GET /v1/conversationsPOST /v1/conversationsGET /v1/conversations/{id}GET /v1/conversations/{id}/messages?cursor=...POST /v1/conversations/{id}/members
Messages
POST /v1/conversations/{id}/messagesPATCH /v1/messages/{id}DELETE /v1/messages/{id}POST /v1/messages/{id}/read
Attachments
POST /v1/attachments/presignPOST /v1/attachments/completeGET /v1/files/{file_id}
Search
GET /v1/search?q=...
WSS 이벤트 초안
Client -> Server
auth.connectsession.resumemessage.sendmessage.readtyping.starttyping.stoppresence.updateconversation.joinconversation.leave
Server -> Client
auth.connectedsession.resumedsession.invalidatedaccount.createdinvite.acceptedcontact.addedconversation.createdsync.bootstrapmessage.createdmessage.updatedmessage.deletedmessage.read_updatedpresence.changedtyping.changedconversation.updatedsync.requirederror
메시지 상태 머신
draftqueuedsendingsentdeliveredreadfailed
재시도는 failed -> queued -> sending으로만 허용한다.
동기화 원칙
- 모든 메시지는
client_request_id로 멱등 처리 - 서버는
server_sequence를 기준으로 정렬 책임 - 클라이언트는 대화방별
last_synced_sequence저장 - 재연결 후
sync.required를 받으면 증분 동기화 수행
가입 단계별 계약
Alpha 즉시 실행형
- 입력:
display_name,invite_token - 서버 처리: 계정, 프로필, 디바이스, 세션, 기본 대화 생성
- 결과: 바로 메인 진입
Beta 기본형
- 입력:
email - 서버 처리: 링크 + 코드 발송
- 다음 입력:
verification_code또는magic_link - 결과: 계정/기기 세션 생성 후 메인 진입
MVP 화면별 Definition Of Done
가입
- Alpha: 이름 + 초대코드만으로 진입 가능
- Beta: 이메일 1회 확인으로 진입 가능
- 세션 저장
- 재실행 후 자동 로그인
- 가입 직후 빈 화면 금지
대화 목록
- 최근 순 정렬
- 읽지 않음 표시
- 고정/음소거 반영
- 로컬 캐시 우선 렌더링
대화창
- 송수신
- 읽음 반영
- 실패 시 재시도
- 새 메시지 배너
- 긴 대화 스크롤 안정성
첨부
- 업로드
- 진행 상태
- 실패 복구
- 다운로드
구현 우선순위 백로그
- Alpha quick register
- Conversation list
- Message send/receive
- Local cache
- Read cursor
- Reconnect/sync
- Attachment pipeline
- Search
- Beta email verify
- Session management
- Admin/report tools