실세계에서의 시나리오
회사에서의 단체 커피 주문
배경: 한 IT 회사에서 팀 회의를 마치고 커피를 주문하기로 합니다. 팀원들은 각자 바쁜 일정 때문에 하나씩 메뉴를 이야기하기 어려워 단체 주문을 위한 간편한 방법을 찾습니다.
등장인물:
• 박 팀장: 커피 주문을 주도하는 팀장
• 김 개발자: 팀원, 커피를 주문하고 싶은 사람
• 이 디자이너: 팀원, 커피를 주문하고 싶은 사람
과정:
-
박 팀장은 ‘아아요’ 웹사이트에 접속하여 방을 생성합니다.
-
방 생성 시, ‘스타벅스’를 선택하고, 팀원당 1개의 메뉴를 선택할 수 있도록 설정합니다.
-
방이 생성되면 유니크한 링크가 생성됩니다. 박 팀장은 이 링크를 팀 채팅방에 공유합니다.
-
김 개발자와 이 디자이너는 링크를 클릭하여 방에 접속합니다.
-
김 개발자와 이 디자이너는 간단한 회원가입을 마친 후 각자의 메뉴를 선택합니다.
-
모든 팀원이 메뉴를 선택하면, 박 팀장은 선택된 메뉴 리스트를 확인하고 최종 주문을 합니다.
논리적 세계로 변환
- 박 팀장은 웹사이트에 접속하여 방 생성 요청을 보냅니다.
- 인스턴스: HTTP 요청 (POST /create-room)
- 함수: create_room(request)
- 데이터: 카페 선택 (예: ‘스타벅스’), 메뉴 제한 정보 (예: 1인당 1개)
- 처리:
- OrderRoom 모델에 새로운 방 생성
- UUID 생성하여 unique_link 필드에 저장
- 방 정보를 데이터베이스에 저장
- 생성된 방의 정보와 유니크한 링크를 응답으로 반환
- 박 팀장은 생성된 링크를 팀 채팅방에 공유합니다.
- 김 개발자와 이 디자이너는 링크를 클릭하여 웹사이트에 접속합니다.
- 인스턴스: HTTP 요청 (GET /123e4567-e89b-12d3-a456-426614174000)
- 함수: join_room(request, unique_link)
- 데이터: 유니크 링크
- 처리:
- OrderRoom 모델에서 유니크 링크로 방 정보 조회
- 방 정보를 클라이언트에 반환하여 방에 접속
- 김 개발자와 이 디자이너는 회원가입 요청을 보냅니다.
- 인스턴스: HTTP 요청 (POST /register)
- 함수: register(request)
- 데이터: 사용자 정보 (예: 사용자명, 비밀번호)
- 처리:
- UserCreationForm을 사용하여 폼 데이터 검증
- User 모델에 새로운 사용자 생성 및 저장
- 사용자 로그인 처리
- 회원가입 성공 시 방으로 리다이렉트
- 김 개발자와 이 디자이너는 메뉴 선택 요청을 보냅니다.
- 인스턴스: HTTP 요청 (POST /123e4567-e89b-12d3-a456-426614174000/select-menu)
- 함수: select_menu(request, unique_link)
- 데이터: 선택한 메뉴 정보 (예: 아메리카노)
- 처리:
- OrderRoom 모델에서 유니크 링크로 방 정보 조회
- Order 모델에 새로운 주문 생성 (사용자, 방, 선택한 메뉴)
- 주문 정보를 데이터베이스에 저장