-
Notifications
You must be signed in to change notification settings - Fork 2
241112 회의록
KWAKMANBO edited this page Nov 12, 2024
·
2 revisions
- 3주차 이슈 뽑기
- 역할 분배, 이슈 assign
- 백엔드 이슈 input / output 논의
- 백엔드 인가 수준 정하기
- svg 뷰 방식 공유
- 테스트 용도를 위해서 간단하게 직사각형 두개로 이루어진 공연장 구성
- 섹션은 2개로 이루어져 있으며, 한 섹션은 9 * 5 좌석으로 이루어진다.
- A섹션은 9*5가 가득 채워진 좌석 배치를, B섹션은 중간중간 빈칸이 있는 좌석으로 이루어지게 해서
- 추후 데모를 위해서 살짝 더 복잡한 도형(도형을 어떻게 그렸지라는 신기함이 들도록)으로 변경할예정
![image](https://private-user-images.githubusercontent.com/113917771/385163252-a09b1669-913e-4fd4-b5c2-6ef353a68ad0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjI0NzUsIm5iZiI6MTczODk2MjE3NSwicGF0aCI6Ii8xMTM5MTc3NzEvMzg1MTYzMjUyLWEwOWIxNjY5LTkxM2UtNGZkNC1iNWMyLTZlZjM1M2E2OGFkMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QyMTAyNTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZWNmYmVhNDdjOTZkMjk5NDA2NjUwMjQ0YTViYTQ4ZTUxMzVlMTQ5M2Q4M2ZjNTJhMzBlMmU5OGZkYzUyYTQ0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.YDa9zEXIj9rp9krDoKeqzP_JUlnlVv9hT7LaeLpdDeA)
// 위 svg이미지에서 섹션들의 point들
const SECTIONS = [
{
id: "A",
points: [
[447.121, 869.114],
[447.121 + 1118.19, 869.114],
[447.121 + 1118.19, 869.114 + 1822.87],
[447.121, 869.114 + 1822.87],
],
},
{
id: "B",
points: [
[2662.6, 869.114],
[2662.6 + 1118.11, 869.114],
[2662.6 + 1118.11, 869.114 + 1822.9],
[2662.6, 869.114 + 1822.9],
],
},
];
//DB Place Table
{
"id" : 1,
"name" : "공연장 이름",
"overview-points" : "1_points.json",
"overview-svg-url" : "/static/1_overview.svg", //백그라운드가 들어갈 이미지 URL
"overview-height" : 1180,
"overview-width" : 1800,
"sections" : [1, 2],
}
//DB 1_points.json
{
id: "A",
points: [
[447.121, 869.114],
[447.121 + 1118.19, 869.114],
[447.121 + 1118.19, 869.114 + 1822.87],
[447.121, 869.114 + 1822.87],
],
},
{
id: "B",
points: [
[2662.6, 869.114],
[2662.6 + 1118.11, 869.114],
[2662.6 + 1118.11, 869.114 + 1822.9],
[2662.6, 869.114 + 1822.9],
],
},
- Place 테이블에 Overview svg에 대한 넓이와 높이를 같이 저장해야한다.
- 테이블에 overview_height, overview_width 필드 추가해야한다.
- 이러면 정규화를 통해서 분리하는게 맞지 않나?
- overview → overview_height, overview_width
- 하지만 overview가 PK가 아니기 때문에 3정규화에 만족하지 않는다
- 하지만 join의 수를 줄이기 위해서 반정규화를 생각해볼 수 있다.
- overview라는 데이터가 place 별로 중복되어 사용되는 경우가 없다고 판단해서 하나의 테이블에 유지하는 것이 더 효율적일 것 같다.
- 결론 : place table에 overview_height, overview_width 필드를 추가한다.
- 엔티티 생성
- Program → /Program
- Event → /Event
- Reservation → /Reservation
- Place → /Place
- Section → /Place
- 목 API 구현 → /mock path로 통일
- /mock/reservation [GET]
- /mock/booking/re-permission/:event-id [GET] - sse
- 연결이 되면 100명 정도 남아 있고,
- 1초마다 10명씩 줄어들도록
- 0명이 되면, 입장 가능 요청을 보내고 연결을 끊는다.
- /mock/reservation/:event-id [GET] - sse
- 특정 좌석들에 대해서 랜덤으로 변경
- 1초마다 랜덤(구현 힘들면 정해진 패턴도 무관)으로 변화된 좌석 현황이 변화된 정보를 보낸다.
- 좌석 배치도에 대해서 1개라도 만들어서 DB에 목 데이터로 넣기
- 메인페이지 데이터 제공 → /programs
- 상세 프로그램 정보 제공 → /programs/:program-id
- 이벤트 정보 제공 → /event/:event-id
- 좌석 데이터 제공 → /seats/:place-id
- 유저 입장 요청 → /booking/permission/:event-id
- 입장 중인 유저 풀 관리 방식 결정
- 예약 인원수 전달 → /booking/count
- 좌석 현황 요청(SSE) → /reservation/:event-id
- 특정 시간 혹은 특정 이벤트(좌석 점유에 변화가 생겼을때) 클라이언트에게 최신화된 좌석 정보 제공
- 좌석 선택 페이지에 들어온 유저 수에 따라서 클라이언트에게 정보를 전달하는 빈도를 동적으로 변경하는 방식도 좋을 듯 하다.
- 좌석 선택 및 점유 → /reservation
- 좌석 확정 → /reservation/confirmation
- 동적으로 상태가 변한다
- 로그인된 상태(기본)
- 대기큐에 들어간 상태
- 좌석 점유 페이지에 입장한 상태
- 관리자
- 인가 상태를 트리 구조와 같이 위계 구조를 가지기 보다는 키워드를 통해서 관리하도록 한다.
- 인가를 변경해주는 함수 필요 → auth.service에서 제공
- 인가 변경
- 로그인, 대기큐, 좌석 점유, 관리자 각 상태로 변경할 수 있는 함수만들기
- 인가 변경
- 세션은 만료 시간을 가짐
- 세션을 참조할 때마다 만료 시간이 갱신
//session
SID(key)| user-id. user-status. target-event expiredTime
UUID1 | 1. 대기큐 1 2024-11-12:16:40
UUID2 | 2 좌석 선택 1
UUID3 | 3 기본 null
Notion
📚팀 노션
Team
🌳그라운드 룰
👨⚖️ 컨벤션
🤓GIT Branch전략
Project
👨🔧개발 Feature
💽DB설계
⌨️기술공유
🎨Figma 디자인
🦾아키텍쳐 설계